Major Update - 2.0.0.143
EN: 2.0.0.143 CN: 2.0.0.142 JP: 2.0.0.145 KR: 2.0.0.150
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
local AnniversaryActCtrl = class("AnniversaryActCtrl", BaseCtrl)
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
AnniversaryActCtrl._mapNodeConfig = {
|
||||
btnJump = {
|
||||
nCount = 4,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Jump"
|
||||
},
|
||||
btnName = {
|
||||
nCount = 2,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Name"
|
||||
},
|
||||
txtBtnSkin = {nCount = 2, sComponentName = "TMP_Text"},
|
||||
txtBtnChar = {nCount = 2, sComponentName = "TMP_Text"},
|
||||
txtBtnJump1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Advertise_Skin_201018"
|
||||
},
|
||||
txtBtnJump2 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Advertise_Package_201018"
|
||||
},
|
||||
txtBtnJump3 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Advertise_Bonus_201018"
|
||||
},
|
||||
txtBtnJump4 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Advertise_ChargeReset_201018"
|
||||
},
|
||||
txtDiscount = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Advertise_PackageDiscount_201018"
|
||||
},
|
||||
reddotMall = {}
|
||||
}
|
||||
AnniversaryActCtrl._mapRedDotConfig = {
|
||||
[RedDotDefine.Mall_Page] = {
|
||||
sNodeName = "reddotMall",
|
||||
param = {
|
||||
AllEnum.MallToggle.Activity
|
||||
}
|
||||
}
|
||||
}
|
||||
function AnniversaryActCtrl:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nActId = actData:GetActId()
|
||||
self.AdConfig = ConfigTable.GetData("AdControl", self.nActId)
|
||||
self:RefreshAct()
|
||||
end
|
||||
local tbCharId = {110, 155}
|
||||
local tbSkinId = {11003, 15503}
|
||||
function AnniversaryActCtrl:RefreshAct()
|
||||
local tbTxtSkin = self._mapNode.txtBtnSkin
|
||||
local tbTxtChar = self._mapNode.txtBtnChar
|
||||
for i = 1, #tbSkinId do
|
||||
local mapSkinCfg = ConfigTable.GetData_CharacterSkin(tbSkinId[i])
|
||||
if mapSkinCfg == nil then
|
||||
printError(string.format("CharacterSkin表里找不到皮肤id:%d", tbSkinId[i]))
|
||||
end
|
||||
NovaAPI.SetTMPText(tbTxtSkin[i], mapSkinCfg ~= nil and mapSkinCfg.Name or "")
|
||||
local mapCharCfg = ConfigTable.GetData_Character(tbCharId[i])
|
||||
if mapCharCfg == nil then
|
||||
printError(string.format("Character表里找不到角色id:%d", tbCharId[i]))
|
||||
end
|
||||
NovaAPI.SetTMPText(tbTxtChar[i], mapCharCfg ~= nil and mapCharCfg.Name or "")
|
||||
end
|
||||
end
|
||||
function AnniversaryActCtrl:OnBtnClick_Name(btn, nIndex)
|
||||
local callback = function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Skin)
|
||||
end
|
||||
EventManager.Hit(EventId.SetTransition, 5, callback)
|
||||
end
|
||||
function AnniversaryActCtrl:OnBtnClick_Jump(btn, nIndex)
|
||||
local nEndTime = self.actData:GetActEndTime()
|
||||
local nCurTime = ClientManager.serverTimeStamp
|
||||
if nEndTime < nCurTime then
|
||||
return
|
||||
end
|
||||
local bPlayCond = self.actData:CheckActJumpCond(true)
|
||||
if not bPlayCond then
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
if nIndex == 1 then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Skin)
|
||||
elseif nIndex == 2 then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Package)
|
||||
elseif nIndex == 3 then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Activity)
|
||||
elseif nIndex == 4 then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Gem)
|
||||
end
|
||||
end
|
||||
EventManager.Hit(EventId.SetTransition, 5, callback)
|
||||
end
|
||||
return AnniversaryActCtrl
|
||||
@@ -1,5 +1,5 @@
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
NewTutorialsActCtrl = class("NewTutorialsActCtrl", BaseCtrl)
|
||||
local NewTutorialsActCtrl = class("NewTutorialsActCtrl", BaseCtrl)
|
||||
NewTutorialsActCtrl._mapNodeConfig = {
|
||||
goBaseGuide = {},
|
||||
goAdvanceGuide = {},
|
||||
@@ -263,7 +263,7 @@ function NewTutorialsActCtrl:RefreshGuideQuset()
|
||||
self._mapNode.btn_GoGuideQusetPanel.gameObject:SetActive(bPlayCond)
|
||||
self._mapNode.txt_Locked1.gameObject:SetActive(not bPlayCond)
|
||||
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.Quest) or {}
|
||||
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
local sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Locked1, sLockTip)
|
||||
if not bPlayCond then
|
||||
return
|
||||
@@ -290,7 +290,7 @@ function NewTutorialsActCtrl:RefreshTutorial()
|
||||
self._mapNode.btn_GoTutorialPanel.gameObject:SetActive(bPlayCond)
|
||||
self._mapNode.txt_Locked2.gameObject:SetActive(not bPlayCond)
|
||||
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.TutorialLevel) or {}
|
||||
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
local sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Locked2, sLockTip)
|
||||
if not bPlayCond then
|
||||
return
|
||||
@@ -315,7 +315,7 @@ function NewTutorialsActCtrl:RefreshTeamFormation()
|
||||
self._mapNode.btn_GoTeamFormationPanel.gameObject:SetActive(bPlayCond)
|
||||
self._mapNode.txt_Locked3.gameObject:SetActive(not bPlayCond)
|
||||
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.QuestNewbie) or {}
|
||||
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
local sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Locked3, sLockTip)
|
||||
if not bPlayCond then
|
||||
return
|
||||
@@ -347,7 +347,7 @@ function NewTutorialsActCtrl:RefreshWeekBoss()
|
||||
self._mapNode.btn_GoWeekBossPanel.gameObject:SetActive(bPlayCond)
|
||||
self._mapNode.goCountDown3.gameObject:SetActive(bPlayCond)
|
||||
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.WeeklyCopies) or {}
|
||||
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
local sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
self._mapNode.txt_AdvanceLocked3.gameObject:SetActive(not bPlayCond)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_AdvanceLocked3, sLockTip)
|
||||
if not bPlayCond then
|
||||
@@ -370,7 +370,7 @@ function NewTutorialsActCtrl:RefreshVampireSurvivor()
|
||||
self._mapNode.goCountDown1.gameObject:SetActive(bPlayCond)
|
||||
self._mapNode.goProgress1.gameObject:SetActive(bPlayCond)
|
||||
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.VampireSurvivor) or {}
|
||||
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
local sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
self._mapNode.txt_AdvanceLocked1.gameObject:SetActive(not bPlayCond)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_AdvanceLocked1, sLockTip)
|
||||
if not bPlayCond then
|
||||
@@ -420,7 +420,7 @@ function NewTutorialsActCtrl:RefreshScoreBoss()
|
||||
self._mapNode.goProgress2.gameObject:SetActive(bPlayCond)
|
||||
self._mapNode.txt_AdvanceLocked2.gameObject:SetActive(not bPlayCond)
|
||||
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.ScoreBoss) or {}
|
||||
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
local sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_AdvanceLocked2, sLockTip)
|
||||
if not bPlayCond then
|
||||
return
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
local LoginRewardPopUpCtrl_01 = class("LoginRewardPopUpCtrl_01", BaseCtrl)
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
LoginRewardPopUpCtrl_01._mapNodeConfig = {
|
||||
imgActivity = {sComponentName = "Image"},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"},
|
||||
btnActivity = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_Activity"
|
||||
},
|
||||
txtTips = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "LoginReward_PopUp_Tip"
|
||||
},
|
||||
goRewardItem = {
|
||||
nCount = 7,
|
||||
sCtrlName = "Game.UI.Activity.LoginReward.LoginSpRewardItemCtrl"
|
||||
},
|
||||
imgActor = {nCount = 2, sComponentName = "Image"},
|
||||
trActor2D_PNG = {
|
||||
sNodeName = "----Actor2D_PNG----",
|
||||
sComponentName = "Transform"
|
||||
}
|
||||
}
|
||||
LoginRewardPopUpCtrl_01._mapEventConfig = {}
|
||||
LoginRewardPopUpCtrl_01._mapRedDotConfig = {}
|
||||
function LoginRewardPopUpCtrl_01:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:RefreshActData()
|
||||
self.nActId = self._panel.nActId
|
||||
self.actData = self._panel.actData
|
||||
self.remainTimer = nil
|
||||
self:RefreshRewardList()
|
||||
self:RefreshNPC2D()
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
end
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:RefreshRewardList()
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
if nil ~= tbRewardList then
|
||||
local nReceiveDay = self.actData:GetCanReceive()
|
||||
self.nActual = self.actData:GetReceived()
|
||||
for k, v in ipairs(self._mapNode.goRewardItem) do
|
||||
local mapReward = tbRewardList[k]
|
||||
v.gameObject:SetActive(mapReward ~= nil)
|
||||
if mapReward ~= nil then
|
||||
v:SetRewardItem(k, mapReward, true, nReceiveDay == self.nActual and k == self.nActual + 1, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:RefreshNPC2D()
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local nReceive = self.actData:GetCanReceive()
|
||||
local nNpcId = tbRewardList[nReceive].NpcId
|
||||
local sPath = "LoginNpc_" .. nNpcId
|
||||
self._mapNode.imgActor[1].gameObject:SetActive(true)
|
||||
self:SetActivityAtlasSprite(self._mapNode.imgActor[1], "_" .. self.nActId, sPath)
|
||||
NovaAPI.SetImageNativeSize(self._mapNode.imgActor[1])
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:PlayOutAnim()
|
||||
local nAnimLength = 0
|
||||
if self.animRoot ~= nil then
|
||||
nAnimLength = NovaAPI.GetAnimClipLength(self.animRoot, {
|
||||
"LoginReward_01_out"
|
||||
})
|
||||
self.animRoot:Play("LoginReward_01_out")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
|
||||
end
|
||||
return nAnimLength
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:Awake()
|
||||
self.animRoot = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnEnable()
|
||||
if self.animRoot ~= nil then
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self.animRoot, {
|
||||
"LoginReward_01_in"
|
||||
})
|
||||
self.animRoot:Play("LoginReward_01_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
|
||||
end
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnDisable()
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnDestroy()
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnBtnClick_Activity()
|
||||
local bOpen = self.actData:CheckActivityOpen()
|
||||
if not bOpen then
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
end
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_PopUp_Time_Out"),
|
||||
callbackConfirm = callback
|
||||
})
|
||||
return
|
||||
end
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
if not canReceive then
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
return
|
||||
end
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local nReceive = self.actData:GetCanReceive()
|
||||
local mapNpc = {
|
||||
nNpcId = tbRewardList[nReceive].NpcId,
|
||||
nVoiceId = tbRewardList[nReceive].VoiceId
|
||||
}
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
end
|
||||
PlayerData.Activity:SendReceiveLoginRewardMsg(self.nActId, callback, mapNpc)
|
||||
end
|
||||
return LoginRewardPopUpCtrl_01
|
||||
@@ -0,0 +1,28 @@
|
||||
local LoginSpRewardCtrl_01 = class("LoginSpRewardCtrl_01", BaseCtrl)
|
||||
LoginSpRewardCtrl_01._mapNodeConfig = {
|
||||
goCommon = {
|
||||
sNodeName = "---Common---"
|
||||
}
|
||||
}
|
||||
LoginSpRewardCtrl_01._mapEventConfig = {}
|
||||
function LoginSpRewardCtrl_01:UnbindCtrl()
|
||||
if self.activityCtrl ~= nil then
|
||||
self:UnbindCtrlByNode(self.activityCtrl)
|
||||
self.activityCtrl = nil
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_01:InitActData(actData)
|
||||
if self.activityCtrl == nil then
|
||||
self.activityCtrl = self:BindCtrlByNode(self._mapNode.goCommon, "Game.UI.Activity.LoginReward.LoginSpRewardCtrl_List")
|
||||
end
|
||||
self.actData = actData
|
||||
self.nActId = actData:GetActId()
|
||||
self.activityCtrl:InitActData(actData)
|
||||
end
|
||||
function LoginSpRewardCtrl_01:ClearActivity()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function LoginSpRewardCtrl_01:OnDisable()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
return LoginSpRewardCtrl_01
|
||||
@@ -0,0 +1,200 @@
|
||||
local LoginRewardCtrl_01 = class("LoginRewardCtrl_01", BaseCtrl)
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
LoginRewardCtrl_01._mapNodeConfig = {
|
||||
btnDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Detail"
|
||||
},
|
||||
txtDetail = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Detail"
|
||||
},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"},
|
||||
sv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btnActivity = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_Activity"
|
||||
}
|
||||
}
|
||||
LoginRewardCtrl_01._mapEventConfig = {}
|
||||
function LoginRewardCtrl_01:UnbindCtrl()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function LoginRewardCtrl_01:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
end
|
||||
})
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
|
||||
end
|
||||
function LoginRewardCtrl_01:RefreshRewardList()
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
if nil ~= tbRewardList then
|
||||
local nMaxDay = #tbRewardList
|
||||
self.nReceiveDay = self.actData:GetCanReceive()
|
||||
self.nActual = self.actData:GetReceived()
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
local nSelectIndex = 0
|
||||
if canReceive then
|
||||
nSelectIndex = self.actData:GetCanReceive()
|
||||
else
|
||||
nSelectIndex = self.nActual
|
||||
end
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self._mapNode.sv:SetAnim(0.06)
|
||||
self._mapNode.sv:Init(nMaxDay, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
self._mapNode.sv:SetScrollGridPos(nSelectIndex - 2, 0)
|
||||
end
|
||||
end
|
||||
function LoginRewardCtrl_01:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local nMaxDay = #tbRewardList
|
||||
local mapReward = tbRewardList[nIndex]
|
||||
local nInstanceID = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceID] then
|
||||
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Activity.LoginReward.LoginRewardItemCtrl")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceID]:SetRewardItem(nIndex, mapReward, nIndex == nMaxDay, self.nReceiveDay == self.nActual and nIndex == self.nActual + 1, "zs_activity_03_num_")
|
||||
end
|
||||
function LoginRewardCtrl_01:OnGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local mapReward = tbRewardList[nIndex]
|
||||
local tbShowReward = {}
|
||||
if mapReward ~= nil then
|
||||
for i = 1, 3 do
|
||||
local nTid = mapReward["RewardId" .. i]
|
||||
local nCount = mapReward["Qty" .. i]
|
||||
if nTid ~= 0 then
|
||||
table.insert(tbShowReward, {nTid = nTid, nCount = nCount})
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.sv:SetScrollGridPos(nIndex - 1, 0.1, 1)
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
self:AddTimer(1, 0.1, function()
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
local btn = goGrid.transform:Find("btnGrid/AnimRoot/goRewardItem/btnItem")
|
||||
if #tbShowReward == 1 then
|
||||
local nTid = tbShowReward[1].nTid
|
||||
UTILS.ClickItemGridWithTips(nTid, btn.gameObject.transform, true, true, false)
|
||||
else
|
||||
local tbReward = {}
|
||||
for _, v in ipairs(tbShowReward) do
|
||||
local rewardData = {
|
||||
[1] = v.nTid,
|
||||
[5] = v.nCount
|
||||
}
|
||||
table.insert(tbReward, rewardData)
|
||||
end
|
||||
EventManager.Hit("ShowActRewardList", tbReward)
|
||||
end
|
||||
end, true, true, true)
|
||||
end
|
||||
function LoginRewardCtrl_01:RefreshDetail()
|
||||
local mapActCfg = self.actData:GetLoginRewardControlCfg()
|
||||
local bEmpty = mapActCfg.DesText == ""
|
||||
self._mapNode.btnDetail.gameObject:SetActive(not bEmpty)
|
||||
end
|
||||
function LoginRewardCtrl_01:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nActId = actData:GetActId()
|
||||
self:RefreshRewardList()
|
||||
self:RefreshDetail()
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
self._mapNode.btnActivity.gameObject:SetActive(canReceive)
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function LoginRewardCtrl_01:ClearActivity()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function LoginRewardCtrl_01:Awake()
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function LoginRewardCtrl_01:OnDisable()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function LoginRewardCtrl_01:OnBtnClick_Detail()
|
||||
local mapActCfg = self.actData:GetLoginRewardControlCfg()
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = mapActCfg.DesText,
|
||||
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function LoginRewardCtrl_01:OnBtnClick_Activity()
|
||||
local callback = function()
|
||||
self._mapNode.btnActivity.gameObject:SetActive(false)
|
||||
local actData = PlayerData.Activity:GetActivityDataById(self.actData:GetActId())
|
||||
self:InitActData(actData)
|
||||
end
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
if not canReceive then
|
||||
callback()
|
||||
return
|
||||
end
|
||||
PlayerData.Activity:SendReceiveLoginRewardMsg(self.actData:GetActId(), callback)
|
||||
end
|
||||
return LoginRewardCtrl_01
|
||||
@@ -0,0 +1,157 @@
|
||||
local LoginRewardPopUpCtrl_01 = class("LoginRewardPopUpCtrl_01", BaseCtrl)
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
LoginRewardPopUpCtrl_01._mapNodeConfig = {
|
||||
sv = {
|
||||
sNodeName = "goRewardList",
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"},
|
||||
btnActivity = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_Activity"
|
||||
},
|
||||
txtTips = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "LoginReward_PopUp_Tip"
|
||||
}
|
||||
}
|
||||
LoginRewardPopUpCtrl_01._mapEventConfig = {}
|
||||
LoginRewardPopUpCtrl_01._mapRedDotConfig = {}
|
||||
function LoginRewardPopUpCtrl_01:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:RefreshActData()
|
||||
self.nActId = self._panel.nActId
|
||||
self.actData = self._panel.actData
|
||||
self.remainTimer = nil
|
||||
self:RefreshRewardList()
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
end
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:RefreshRewardList()
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
if nil ~= tbRewardList then
|
||||
local nMaxDay = #tbRewardList
|
||||
local nActual = self.actData:GetReceived()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self._mapNode.sv:SetAnim(0.06)
|
||||
self._mapNode.sv:Init(nMaxDay, self, self.OnGridRefresh)
|
||||
self:AddTimer(1, 0.5, function()
|
||||
self._mapNode.sv:SetScrollGridPos(nActual - 1, 0.5)
|
||||
end, true, true, true)
|
||||
end
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local nMaxDay = #tbRewardList
|
||||
local mapReward = tbRewardList[nIndex]
|
||||
local nInstanceID = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceID] then
|
||||
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Activity.LoginReward.LoginRewardItemCtrl")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceID]:SetRewardItem(nIndex, mapReward, nIndex == nMaxDay, nil, "zs_activity_03_num_")
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:PlayOutAnim()
|
||||
local nAnimLength = 0
|
||||
if self.animRoot ~= nil then
|
||||
nAnimLength = NovaAPI.GetAnimClipLength(self.animRoot, {
|
||||
"LoginReward_01_out"
|
||||
})
|
||||
self.animRoot:Play("LoginReward_01_out")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
|
||||
end
|
||||
return nAnimLength
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:Awake()
|
||||
self.animRoot = self.gameObject:GetComponent("Animator")
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnEnable()
|
||||
if self.animRoot ~= nil then
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self.animRoot, {
|
||||
"LoginReward_01_in"
|
||||
})
|
||||
self.animRoot:Play("LoginReward_01_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
|
||||
end
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnDisable()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnDestroy()
|
||||
end
|
||||
function LoginRewardPopUpCtrl_01:OnBtnClick_Activity()
|
||||
local bOpen = self.actData:CheckActivityOpen()
|
||||
if not bOpen then
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
end
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_PopUp_Time_Out"),
|
||||
callbackConfirm = callback
|
||||
})
|
||||
return
|
||||
end
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
if not canReceive then
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
end
|
||||
PlayerData.Activity:SendReceiveLoginRewardMsg(self.nActId, callback)
|
||||
end
|
||||
return LoginRewardPopUpCtrl_01
|
||||
@@ -19,8 +19,6 @@ LoginRewardPopUpCtrl_01._mapNodeConfig = {
|
||||
sLanguageId = "Quest_Receive"
|
||||
}
|
||||
}
|
||||
LoginRewardPopUpCtrl_01._mapEventConfig = {}
|
||||
LoginRewardPopUpCtrl_01._mapRedDotConfig = {}
|
||||
function LoginRewardPopUpCtrl_01:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
@@ -63,7 +61,6 @@ end
|
||||
function LoginRewardPopUpCtrl_01:RefreshActData()
|
||||
self.nActId = self._panel.nActId
|
||||
self.actData = self._panel.actData
|
||||
self.remainTimer = nil
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
@@ -120,8 +117,10 @@ function LoginRewardPopUpCtrl_01:OnBtnClick_Activity()
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
PlayerData.CharSkin:TryOpenSkinShowPanel(function()
|
||||
EventManager.Hit("RefreshLoginRewardPanel")
|
||||
end)
|
||||
end
|
||||
PlayerData.Activity:SendReceiveLoginRewardMsg(301042, callback)
|
||||
PlayerData.Activity:SendReceiveLoginRewardMsg(self.nActId, callback)
|
||||
end
|
||||
return LoginRewardPopUpCtrl_01
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
local LoginSkinRewardCtrl_01 = class("LoginSkinRewardCtrl_01", BaseCtrl)
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
LoginSkinRewardCtrl_01._mapNodeConfig = {
|
||||
btnDetail = {
|
||||
sNodeName = "btnActDetail",
|
||||
@@ -36,17 +37,14 @@ LoginSkinRewardCtrl_01._mapNodeConfig = {
|
||||
LoginSkinRewardCtrl_01._mapEventConfig = {
|
||||
ClickLoginRewardTips = "OnEvent_ClickLoginRewardTips"
|
||||
}
|
||||
function LoginSkinRewardCtrl_01:UnbindCtrl()
|
||||
end
|
||||
function LoginSkinRewardCtrl_01:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nActId = actData:GetActId()
|
||||
self.nNpcId = nil
|
||||
self.bPlayVoice = false
|
||||
self:RefreshDetail()
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
self._mapNode.btnReward.gameObject:SetActive(canReceive)
|
||||
self._mapNode.btnUnReward.gameObject:SetActive(not canReceive)
|
||||
self._mapNode.imgEnd.gameObject:SetActive(false)
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
@@ -62,11 +60,17 @@ function LoginSkinRewardCtrl_01:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
self._mapNode.goActTime:SetActive(0 < remainTime)
|
||||
self._mapNode.imgEnd:SetActive(remainTime <= 0)
|
||||
self._mapNode.goActTime.gameObject:SetActive(0 < remainTime)
|
||||
self._mapNode.imgEnd.gameObject:SetActive(remainTime <= 0)
|
||||
if remainTime < 0 then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
if self.remainTimer then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
end
|
||||
if self._bEndPopped then
|
||||
return
|
||||
end
|
||||
self._bEndPopped = true
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
@@ -114,8 +118,6 @@ function LoginSkinRewardCtrl_01:RefreshDetail()
|
||||
local sTips = ConfigTable.GetUIText("LoginSkinRewardTips1_301053") .. "\n" .. ConfigTable.GetUIText("LoginSkinRewardTips2_301053")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtAdvanceMat, sTips)
|
||||
end
|
||||
function LoginSkinRewardCtrl_01:ClearActivity()
|
||||
end
|
||||
function LoginSkinRewardCtrl_01:OnBtnClick_Detail()
|
||||
local mapActCfg = self.actData:GetLoginRewardControlCfg()
|
||||
local msg = {
|
||||
@@ -129,6 +131,7 @@ function LoginSkinRewardCtrl_01:OnBtnClick_Activity()
|
||||
local callback = function()
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
local actData = PlayerData.Activity:GetActivityDataById(self.actData:GetActId())
|
||||
PlayerData.CharSkin:TryOpenSkinShowPanel()
|
||||
self:InitActData(actData)
|
||||
end
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
@@ -136,6 +139,7 @@ function LoginSkinRewardCtrl_01:OnBtnClick_Activity()
|
||||
return
|
||||
end
|
||||
PlayerData.Activity:SendReceiveLoginRewardMsg(self.actData:GetActId(), callback)
|
||||
RedDotManager.SetValid(RedDotDefine.Activity_Tab, self.nActId, false)
|
||||
end
|
||||
function LoginSkinRewardCtrl_01:OnEvent_ClickLoginRewardTips(callback, index)
|
||||
callback()
|
||||
@@ -143,5 +147,9 @@ end
|
||||
function LoginSkinRewardCtrl_01:OnBtnClick_Reward()
|
||||
end
|
||||
function LoginSkinRewardCtrl_01:OnDisable()
|
||||
if self.remainTimer then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
end
|
||||
end
|
||||
return LoginSkinRewardCtrl_01
|
||||
|
||||
@@ -127,6 +127,16 @@ function LoginSpRewardCtrl_List:RefreshRewardList()
|
||||
end
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_List:StopVoice()
|
||||
self.bPlayVoice = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
if self.timer then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_List:RefreshNPC2D(bSwitch)
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local nNpcId = tbRewardList[self.nSelectIndex].NpcId
|
||||
@@ -144,14 +154,7 @@ function LoginSpRewardCtrl_List:RefreshNPC2D(bSwitch)
|
||||
self._mapNode.animActorL2D:Play("Actor2D_PNG_right_middle_in", 0, 0)
|
||||
end
|
||||
if bSwitch and self.bPlayVoice then
|
||||
self.bPlayVoice = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
if self.timer then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
self:StopVoice()
|
||||
else
|
||||
self:PlayVoice()
|
||||
end
|
||||
@@ -180,6 +183,7 @@ function LoginSpRewardCtrl_List:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nNpcId = nil
|
||||
self.bPlayVoice = false
|
||||
self.bChangeTabStop = true
|
||||
self:RefreshRewardList()
|
||||
self:RefreshNPC2D()
|
||||
self:RefreshDetail()
|
||||
@@ -202,9 +206,7 @@ function LoginSpRewardCtrl_List:OnEnable()
|
||||
end
|
||||
function LoginSpRewardCtrl_List:OnDisable()
|
||||
Actor2DManager.UnsetBoardNPC2D()
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
self:StopVoice()
|
||||
end
|
||||
function LoginSpRewardCtrl_List:OnDestroy()
|
||||
end
|
||||
@@ -280,9 +282,7 @@ function LoginSpRewardCtrl_List:OnEvent_ActivityListChangeTab(nId)
|
||||
self.bChangeTabStop = true
|
||||
elseif nId ~= self.actData:GetActId() and self.bChangeTabStop then
|
||||
self.bChangeTabStop = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
self:StopVoice()
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_List:OnEvent_ClosePanel(nPanelId)
|
||||
|
||||
@@ -127,6 +127,16 @@ function LoginSpRewardCtrl_List_01:RefreshRewardList()
|
||||
end
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_List_01:StopVoice()
|
||||
self.bPlayVoice = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
if self.timer then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_List_01:RefreshNPC2D(bSwitch)
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local nNpcId = tbRewardList[self.nSelectIndex].NpcId
|
||||
@@ -144,14 +154,7 @@ function LoginSpRewardCtrl_List_01:RefreshNPC2D(bSwitch)
|
||||
self._mapNode.animActorL2D:Play("Actor2D_PNG_right_middle_in", 0, 0)
|
||||
end
|
||||
if bSwitch and self.bPlayVoice then
|
||||
self.bPlayVoice = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
if self.timer then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
self:StopVoice()
|
||||
else
|
||||
self:PlayVoice()
|
||||
end
|
||||
@@ -180,6 +183,7 @@ function LoginSpRewardCtrl_List_01:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nNpcId = nil
|
||||
self.bPlayVoice = false
|
||||
self.bChangeTabStop = true
|
||||
self:RefreshRewardList()
|
||||
self:RefreshNPC2D()
|
||||
self:RefreshDetail()
|
||||
@@ -202,9 +206,7 @@ function LoginSpRewardCtrl_List_01:OnEnable()
|
||||
end
|
||||
function LoginSpRewardCtrl_List_01:OnDisable()
|
||||
Actor2DManager.UnsetBoardNPC2D()
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
self:StopVoice()
|
||||
end
|
||||
function LoginSpRewardCtrl_List_01:OnDestroy()
|
||||
end
|
||||
@@ -280,9 +282,7 @@ function LoginSpRewardCtrl_List_01:OnEvent_ActivityListChangeTab(nId)
|
||||
self.bChangeTabStop = true
|
||||
elseif nId ~= self.actData:GetActId() and self.bChangeTabStop then
|
||||
self.bChangeTabStop = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
self:StopVoice()
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_List_01:OnEvent_ClosePanel(nPanelId)
|
||||
|
||||
@@ -153,6 +153,16 @@ function LoginSpRewardCtrl_Lsv:OnGridBtnClick(goGrid, gridIndex)
|
||||
self.nSelectIndex = nIndex
|
||||
self:RefreshNPC2D(true)
|
||||
end
|
||||
function LoginSpRewardCtrl_Lsv:StopVoice()
|
||||
self.bPlayVoice = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
if self.timer then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_Lsv:RefreshNPC2D(bSwitch)
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local nNpcId = tbRewardList[self.nSelectIndex].NpcId
|
||||
@@ -170,14 +180,7 @@ function LoginSpRewardCtrl_Lsv:RefreshNPC2D(bSwitch)
|
||||
self._mapNode.animActorL2D:Play("Actor2D_PNG_right_middle_in", 0, 0)
|
||||
end
|
||||
if bSwitch and self.bPlayVoice then
|
||||
self.bPlayVoice = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
if self.timer then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
self:StopVoice()
|
||||
else
|
||||
self:PlayVoice()
|
||||
end
|
||||
@@ -206,6 +209,7 @@ function LoginSpRewardCtrl_Lsv:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nNpcId = nil
|
||||
self.bPlayVoice = false
|
||||
self.bChangeTabStop = true
|
||||
self:RefreshRewardList()
|
||||
self:RefreshNPC2D()
|
||||
self:RefreshDetail()
|
||||
@@ -234,9 +238,7 @@ function LoginSpRewardCtrl_Lsv:OnDisable()
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
Actor2DManager.UnsetBoardNPC2D()
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
self:StopVoice()
|
||||
end
|
||||
function LoginSpRewardCtrl_Lsv:OnDestroy()
|
||||
end
|
||||
@@ -302,9 +304,7 @@ function LoginSpRewardCtrl_Lsv:OnEvent_ActivityListChangeTab(nId)
|
||||
self.bChangeTabStop = true
|
||||
elseif nId ~= self.actData:GetActId() and self.bChangeTabStop then
|
||||
self.bChangeTabStop = false
|
||||
BubbleVoiceManager.StopBubbleAnim()
|
||||
PlayerVoiceData:ClearTimer()
|
||||
PlayerVoiceData:StopCharVoice()
|
||||
self:StopVoice()
|
||||
end
|
||||
end
|
||||
function LoginSpRewardCtrl_Lsv:OnEvent_ClosePanel(nPanelId)
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
local ActMailBindCtrl = class("ActMailBindCtrl", BaseCtrl)
|
||||
local SDKManager = CS.SDKManager.Instance
|
||||
ActMailBindCtrl._mapNodeConfig = {
|
||||
txtDesc = {sComponentName = "TMP_Text"},
|
||||
btnGo = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Go"
|
||||
},
|
||||
txtBtnGo = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MailBind_Go"
|
||||
},
|
||||
btnGoLock = {},
|
||||
txtBtnGoLock = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MailBind_GoLock"
|
||||
}
|
||||
}
|
||||
ActMailBindCtrl._mapEventConfig = {
|
||||
MailBind_RequestUpdate = "OnEvent_RequestUpdate"
|
||||
}
|
||||
ActMailBindCtrl._mapRedDotConfig = {}
|
||||
function ActMailBindCtrl:InitActData(actData)
|
||||
self.actData = actData
|
||||
self.nActId = self.actData:GetActId()
|
||||
local config = ConfigTable.GetData("ActivityMailBindControl", self.nActId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDesc, config.Desc)
|
||||
local itemCfg = ConfigTable.GetData("Item", config.Reward1Tid)
|
||||
if itemCfg == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imgItem, itemCfg.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCount, config.Reward1Qty)
|
||||
self:InitRewardStatus()
|
||||
end
|
||||
function ActMailBindCtrl:InitRewardStatus()
|
||||
local bGettedReward = self.actData:GetRewardData()
|
||||
self._mapNode.btnGo.gameObject:SetActive(not bGettedReward)
|
||||
self._mapNode.btnGoLock.gameObject:SetActive(bGettedReward)
|
||||
end
|
||||
function ActMailBindCtrl:OnBtnClick_Go()
|
||||
local bRequestState = self.actData:GetRequestState()
|
||||
if bRequestState then
|
||||
return
|
||||
end
|
||||
local bGettedReward = self.actData:GetRewardData()
|
||||
if bGettedReward then
|
||||
self:InitRewardStatus()
|
||||
return
|
||||
end
|
||||
if not SDKManager:IsSDKInit() then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
|
||||
return
|
||||
end
|
||||
self.actData:RequestReward()
|
||||
end
|
||||
function ActMailBindCtrl:OnEvent_RequestUpdate()
|
||||
self:InitRewardStatus()
|
||||
end
|
||||
return ActMailBindCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local MathParkourLevelSelectPanel = class("MathParkourLevelSelectPanel", BasePanel)
|
||||
MathParkourLevelSelectPanel._sUIResRootPath = "UI_Activity/"
|
||||
MathParkourLevelSelectPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "_400018/MathParkourLevelsSelect.prefab",
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourLevelSelectCtrl"
|
||||
}
|
||||
}
|
||||
function MathParkourLevelSelectPanel:Awake()
|
||||
self.nSelectIndex = 0
|
||||
end
|
||||
function MathParkourLevelSelectPanel:OnEnable()
|
||||
end
|
||||
function MathParkourLevelSelectPanel:OnAfterEnter()
|
||||
end
|
||||
function MathParkourLevelSelectPanel:OnDisable()
|
||||
end
|
||||
function MathParkourLevelSelectPanel:OnDestroy()
|
||||
end
|
||||
function MathParkourLevelSelectPanel:OnRelease()
|
||||
end
|
||||
return MathParkourLevelSelectPanel
|
||||
@@ -0,0 +1,30 @@
|
||||
local MathParkourPanel = class("MathParkourPanel", BasePanel)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
MathParkourPanel._sUIResRootPath = "UI_Activity/"
|
||||
MathParkourPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "_400018/MathParkourPanel.prefab",
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourCtrl"
|
||||
},
|
||||
{
|
||||
sPrefabPath = "_400018/MathParkourSkillDisplayPanel.prefab",
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourSkillDisplayCtrl"
|
||||
}
|
||||
}
|
||||
function MathParkourPanel:Awake()
|
||||
GamepadUIManager.EnterAdventure(true)
|
||||
GamepadUIManager.EnableGamepadUI("MathParkourCtrl", {}, nil, false)
|
||||
end
|
||||
function MathParkourPanel:OnEnable()
|
||||
end
|
||||
function MathParkourPanel:OnAfterEnter()
|
||||
end
|
||||
function MathParkourPanel:OnDisable()
|
||||
end
|
||||
function MathParkourPanel:OnDestroy()
|
||||
GamepadUIManager.DisableGamepadUI("MathParkourCtrl")
|
||||
GamepadUIManager.QuitAdventure()
|
||||
end
|
||||
function MathParkourPanel:OnRelease()
|
||||
end
|
||||
return MathParkourPanel
|
||||
@@ -0,0 +1,23 @@
|
||||
local MathParkourResultPanel = class("MathParkourResultPanel", BasePanel)
|
||||
MathParkourResultPanel._nSnapshotPrePanel = 1
|
||||
MathParkourResultPanel._sUIResRootPath = "UI_Activity/"
|
||||
MathParkourResultPanel._bIsMainPanel = false
|
||||
MathParkourResultPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "_400018/MathParkourResultPanel.prefab",
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourResultCtrl"
|
||||
}
|
||||
}
|
||||
function MathParkourResultPanel:Awake()
|
||||
end
|
||||
function MathParkourResultPanel:OnEnable()
|
||||
end
|
||||
function MathParkourResultPanel:OnAfterEnter()
|
||||
end
|
||||
function MathParkourResultPanel:OnDisable()
|
||||
end
|
||||
function MathParkourResultPanel:OnDestroy()
|
||||
end
|
||||
function MathParkourResultPanel:OnRelease()
|
||||
end
|
||||
return MathParkourResultPanel
|
||||
@@ -0,0 +1,21 @@
|
||||
local MathParkourSkillDisplayPanel = class("MathParkourSkillDisplayPanel", BasePanel)
|
||||
MathParkourSkillDisplayPanel._bIsMainPanel = false
|
||||
MathParkourSkillDisplayPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Activity/MathParkour/400018/MathParkourSkillDisplayPanel.prefab",
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourSkillDisplayPanelCtrl"
|
||||
}
|
||||
}
|
||||
function MathParkourSkillDisplayPanel:Awake()
|
||||
end
|
||||
function MathParkourSkillDisplayPanel:OnEnable()
|
||||
end
|
||||
function MathParkourSkillDisplayPanel:OnAfterEnter()
|
||||
end
|
||||
function MathParkourSkillDisplayPanel:OnDisable()
|
||||
end
|
||||
function MathParkourSkillDisplayPanel:OnDestroy()
|
||||
end
|
||||
function MathParkourSkillDisplayPanel:OnRelease()
|
||||
end
|
||||
return MathParkourSkillDisplayPanel
|
||||
@@ -0,0 +1,90 @@
|
||||
local MathParkourBuffCtrl = class("MathParkourBuffCtrl", BaseCtrl)
|
||||
local AssetPath = "UI_Activity/_400018/SpriteAtlas/"
|
||||
MathParkourBuffCtrl._mapNodeConfig = {
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
TMPBuffTime1 = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
MathParkourBuffCtrl._mapEventConfig = {}
|
||||
MathParkourBuffCtrl._mapRedDotConfig = {}
|
||||
function MathParkourBuffCtrl:Awake()
|
||||
self.timer = nil
|
||||
self.boomTimer = nil
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function MathParkourBuffCtrl:OnEnable()
|
||||
end
|
||||
function MathParkourBuffCtrl:ShowBuff(nBuffId, bPause)
|
||||
self.nBuffId = nBuffId
|
||||
local buffCfg = ConfigTable.GetData("MathParkourBuffItem", nBuffId)
|
||||
if self.timer ~= nil then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
if buffCfg.Icon ~= "" then
|
||||
self:SetPngSprite(self._mapNode.imgIcon, AssetPath .. buffCfg.Icon)
|
||||
end
|
||||
self.nCurTime = buffCfg.Time
|
||||
self.nBoomTime = buffCfg.Time
|
||||
self:SetTimeText(self.nCurTime)
|
||||
self.timer = self:AddTimer(0, 1, function()
|
||||
self.nCurTime = self.nCurTime - 1
|
||||
self.nCurTime = math.max(self.nCurTime, 0)
|
||||
if self.nCurTime <= 0 then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
self:HideBuff()
|
||||
return
|
||||
end
|
||||
self:SetTimeText(self.nCurTime)
|
||||
end, true, true, true)
|
||||
self.timer:Pause(bPause)
|
||||
if buffCfg.ObjType == GameEnum.MathParkourBuffType.Boom then
|
||||
if self.boomTimer ~= nil then
|
||||
self.boomTimer:Cancel()
|
||||
self.boomTimer = nil
|
||||
end
|
||||
EventManager.Hit("MathParkour_BoomTime", 1.0)
|
||||
self.boomTimer = self:AddTimer(0, 0.02, function()
|
||||
self.nBoomTime = self.nBoomTime - 0.02
|
||||
if self.nBoomTime <= 0 then
|
||||
self.boomTimer:Cancel()
|
||||
self.boomTimer = nil
|
||||
return
|
||||
end
|
||||
EventManager.Hit("MathParkour_BoomTime", self.nBoomTime / buffCfg.Time)
|
||||
end, true, true, true)
|
||||
self.boomTimer:Pause(bPause)
|
||||
end
|
||||
if self.animator ~= nil then
|
||||
self.animator:Play("rtBuff_in")
|
||||
end
|
||||
end
|
||||
function MathParkourBuffCtrl:SetTimeText(nTime)
|
||||
nTime = math.max(nTime, 0)
|
||||
nTime = math.floor(nTime)
|
||||
local sTimeText = string.format("%02d:%02d", math.floor(nTime / 60), nTime % 60)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPBuffTime1, sTimeText)
|
||||
end
|
||||
function MathParkourBuffCtrl:HideBuff()
|
||||
if self.timer ~= nil then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
if self.boomTimer ~= nil then
|
||||
self.boomTimer:Cancel()
|
||||
self.boomTimer = nil
|
||||
end
|
||||
if self.nBuffId ~= nil and self.nBuffId ~= 0 then
|
||||
EventManager.Hit("MathParkour_BuffTimeOut", self.nBuffId)
|
||||
end
|
||||
self.nBuffId = 0
|
||||
end
|
||||
function MathParkourBuffCtrl:Pause(bPause)
|
||||
if self.timer ~= nil then
|
||||
self.timer:Pause(bPause)
|
||||
end
|
||||
if self.boomTimer ~= nil then
|
||||
self.boomTimer:Pause(bPause)
|
||||
end
|
||||
end
|
||||
return MathParkourBuffCtrl
|
||||
@@ -0,0 +1,615 @@
|
||||
local MathParkourCtrl = class("MathParkourCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
MathParkourCtrl._mapNodeConfig = {
|
||||
rtBuff = {
|
||||
nCount = 5,
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourBuffCtrl"
|
||||
},
|
||||
txt_newScore = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_NewScore"
|
||||
},
|
||||
txt_targetScore = {sComponentName = "TMP_Text"},
|
||||
imgActProgress = {sComponentName = "Image"},
|
||||
StarItem = {nCount = 3},
|
||||
obj_Time = {},
|
||||
btnPause = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Pause",
|
||||
sAction = "MathParkour_Pause"
|
||||
},
|
||||
goChallenge = {
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourResultSuccessCtrl"
|
||||
},
|
||||
goFailure = {
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourResultFailCtrl"
|
||||
},
|
||||
goPause = {
|
||||
sNodeName = "MathParkourPause",
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourPauseCtrl"
|
||||
},
|
||||
btn_qte = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_QTE",
|
||||
sAction = "MathParkour_QTE",
|
||||
sActionIconType = "Dark"
|
||||
},
|
||||
goSmash = {},
|
||||
imgSmasProgress = {sComponentName = "Image"},
|
||||
txt_SmashScore = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_SmashScore"
|
||||
},
|
||||
btnClearthescene = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_ClearTheScene",
|
||||
sAction = "MathParkour_Boom"
|
||||
},
|
||||
txt_Clearthescene = {
|
||||
sComponentName = "TMP_Text",
|
||||
nCount = 2,
|
||||
sLanguageId = "MathParkour_Clearthescene"
|
||||
},
|
||||
imgProgress = {sComponentName = "Image"},
|
||||
txt_Score1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_Score1"
|
||||
},
|
||||
txt_Score = {sComponentName = "TMP_Text"},
|
||||
canvasGroup = {
|
||||
sNodeName = "----SafeAreaRoot---",
|
||||
sComponentName = "CanvasGroup"
|
||||
}
|
||||
}
|
||||
MathParkourCtrl._mapEventConfig = {
|
||||
MathParkour_AddScore = "OnEvent_AddScore",
|
||||
MathParkour_BuffItemCollected = "OnEvent_AddBuff",
|
||||
MathParkour_UseBuff = "OnEvent_UseBuff",
|
||||
MathParkour_BuffConsumed = "OnEvent_BuffConsumed",
|
||||
MathParkour_BoomTime = "OnEvent_BoomTime",
|
||||
MathParkour_LevelEnd = "OnEvent_LevelEnd",
|
||||
MathParkour_BossEncountered = "OnEvent_BossEncountered",
|
||||
MathParkour_Confirm = "OnEvent_Confirm",
|
||||
MathParkour_Again = "OnEvent_Again",
|
||||
MathParkour_NextLevel = "OnEvent_GoNextLevel",
|
||||
MathParkour_BuffTimeOut = "OnEvent_BuffTimeOut",
|
||||
MathParkour_Exit_OnClick = "OnEvent_Exit",
|
||||
MathParkour_Restart_OnClick = "OnEvent_Restart",
|
||||
MathParkour_Continue_OnClick = "OnEvent_Continue",
|
||||
MathParkour_EnterLevel = "OnEvent_EnterLevel",
|
||||
MathParkour_BlockInput = "OnEvent_BlockInput",
|
||||
MathParkour_GMRemoveBuff = "OnEvent_GMRemoveBuff",
|
||||
MathParkour_GM_ToggleBuffOverlay = "OnEvent_GMToggleBuffOverlay",
|
||||
MathParkour_GM_Pause = "OnEvent_GMPause"
|
||||
}
|
||||
MathParkourCtrl._mapRedDotConfig = {}
|
||||
function MathParkourCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.nActId = param[1]
|
||||
self.nLevelId = param[2]
|
||||
end
|
||||
self.tbGamepadUINode = self:GetGamepadUINode()
|
||||
GamepadUIManager.AddGamepadUINode("MathParkourCtrl", self.tbGamepadUINode)
|
||||
self:InitData()
|
||||
self:UpdatePanelData()
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, 0)
|
||||
end
|
||||
function MathParkourCtrl:OnDestroy()
|
||||
self:ClearGMBuffOverlay()
|
||||
end
|
||||
function MathParkourCtrl:InitData()
|
||||
self.bPause = true
|
||||
self.levelCfg = ConfigTable.GetData("MathParkourLevel", self.nLevelId)
|
||||
self.cfg = ConfigTable.GetData("MathParkourConfig", self.levelCfg.ConfigId)
|
||||
self.actData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
self.CurLevelData = self.actData:GetLevelData(self.nLevelId)
|
||||
self.nCurScore = 0
|
||||
self.nStar = 0
|
||||
self.bInResult = false
|
||||
self:UpdateScore(0)
|
||||
self.nAddBuffCount = 0
|
||||
self.tbUsedBuffItem = {}
|
||||
self.tbBuffItem = {}
|
||||
self.bBossEncountered = false
|
||||
for i = 1, 5 do
|
||||
self.tbBuffItem[i] = self._mapNode.rtBuff[i]
|
||||
self.tbBuffItem[i].gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:UpdatePanelData()
|
||||
self._mapNode.btnClearthescene.gameObject:SetActive(false)
|
||||
self._mapNode.goChallenge:HidePanel()
|
||||
self._mapNode.goFailure:HidePanel()
|
||||
self._mapNode.obj_Time:SetActive(true)
|
||||
local timeOutGo = self._mapNode.obj_Time.transform:Find("AnimRoot")
|
||||
timeOutGo.gameObject:SetActive(false)
|
||||
self:InitQTE()
|
||||
self._mapNode.txt_Score1.gameObject:SetActive(self.bBossEncountered)
|
||||
self._mapNode.txt_Score.gameObject:SetActive(self.bBossEncountered)
|
||||
end
|
||||
function MathParkourCtrl:InitQTE()
|
||||
self._mapNode.goSmash.gameObject:SetActive(false)
|
||||
self._mapNode.btn_qte.gameObject:SetActive(false)
|
||||
if self.qteTimer ~= nil then
|
||||
self.qteTimer:Cancel()
|
||||
self.qteTimer = nil
|
||||
end
|
||||
self.nQte = 0
|
||||
end
|
||||
function MathParkourCtrl:StartGame()
|
||||
local bNewLevel = self.actData:GetLevelIsNew(self.nLevelId)
|
||||
if bNewLevel and self.levelCfg.DicId ~= 0 then
|
||||
self.actData:EnterLevel(self.nLevelId)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DictionaryEntry, self.levelCfg.DicId, true, function()
|
||||
WwiseAudioMgr:PostEvent("Mode_400018_start")
|
||||
self:AddTimer(1, 0.5, function()
|
||||
local timeOutGo = self._mapNode.obj_Time.transform:Find("AnimRoot")
|
||||
timeOutGo.gameObject:SetActive(true)
|
||||
NovaAPI.DispatchEventWithData("MATHPARKOUR_STARTLEVEL", nil, nil)
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
self:AddTimer(1, 3.5, function()
|
||||
self._mapNode.obj_Time:SetActive(false)
|
||||
self.bPause = false
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
NovaAPI.DispatchEventWithData("MATHPARKOUR_START", nil, nil)
|
||||
end, true, true, true)
|
||||
end, true, true, true)
|
||||
end)
|
||||
else
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
WwiseAudioMgr:PostEvent("Mode_400018_start")
|
||||
self:AddTimer(1, 0.5, function()
|
||||
local timeOutGo = self._mapNode.obj_Time.transform:Find("AnimRoot")
|
||||
timeOutGo.gameObject:SetActive(true)
|
||||
NovaAPI.DispatchEventWithData("MATHPARKOUR_STARTLEVEL", nil, nil)
|
||||
self:AddTimer(1, 3.5, function()
|
||||
self._mapNode.obj_Time:SetActive(false)
|
||||
self.bPause = false
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
NovaAPI.DispatchEventWithData("MATHPARKOUR_START", nil, nil)
|
||||
end, true, true, true)
|
||||
end, true, true, true)
|
||||
self.actData:EnterLevel(self.nLevelId)
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:ShowQTE()
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgSmasProgress, 0)
|
||||
self._mapNode.goSmash.gameObject:SetActive(true)
|
||||
self._mapNode.btn_qte.gameObject:SetActive(true)
|
||||
self.qteTimer = self:AddTimer(0, 1, function()
|
||||
self.nQte = self.nQte - self.cfg.QteProgressDeduction
|
||||
self.nQte = math.max(self.nQte, 0)
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgSmasProgress, self.nQte / self.cfg.QteProgressLimit)
|
||||
NovaAPI.DispatchEventWithData("MathParkour_SetQteSpeed", nil, {
|
||||
self.nQte * self.cfg.QteSpeedFactor
|
||||
})
|
||||
end, true, true, true)
|
||||
end
|
||||
function MathParkourCtrl:RemoveBuff(nBuffId)
|
||||
if self.tbUsedBuffItem[nBuffId] ~= nil then
|
||||
local buffItem = self.tbUsedBuffItem[nBuffId]
|
||||
table.insert(self.tbBuffItem, buffItem)
|
||||
buffItem.gameObject:SetActive(false)
|
||||
local buffCfg = ConfigTable.GetData("MathParkourBuffItem", nBuffId)
|
||||
if buffCfg.ObjType == GameEnum.MathParkourBuffType.Boom then
|
||||
self._mapNode.btnClearthescene.gameObject:SetActive(false)
|
||||
end
|
||||
self.tbUsedBuffItem[nBuffId] = nil
|
||||
NovaAPI.DispatchEventWithData("MathParkour_BuffRemoved", nil, {nBuffId})
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:Remap(nValue, nInMin, nInMax, nOutMin, nOutMax)
|
||||
if nInMax == nInMin then
|
||||
return nOutMin
|
||||
end
|
||||
return nOutMin + (nValue - nInMin) / (nInMax - nInMin) * (nOutMax - nOutMin)
|
||||
end
|
||||
function MathParkourCtrl:UpdateScore(nAddScore)
|
||||
self.nCurScore = math.max(self.nCurScore + nAddScore, 0)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_targetScore, self.nCurScore)
|
||||
self._mapNode.txt_newScore.gameObject:SetActive(self.nCurScore > self.CurLevelData.nScore)
|
||||
local nStar = 0
|
||||
if self.nCurScore >= self.levelCfg.Reward3Condition then
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgActProgress, 1)
|
||||
nStar = 3
|
||||
elseif self.nCurScore >= self.levelCfg.Reward2Condition then
|
||||
local nTempScore = self.nCurScore - self.levelCfg.Reward2Condition
|
||||
local amount = self:Remap(nTempScore / (self.levelCfg.Reward3Condition - self.levelCfg.Reward2Condition), 0, 1, 0, 0.33) + 0.66
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgActProgress, amount)
|
||||
nStar = 2
|
||||
elseif self.nCurScore >= self.levelCfg.Reward1Condition then
|
||||
local nTempScore = self.nCurScore - self.levelCfg.Reward1Condition
|
||||
local amount = self:Remap(nTempScore / (self.levelCfg.Reward2Condition - self.levelCfg.Reward1Condition), 0, 1, 0, 0.33) + 0.33
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgActProgress, amount)
|
||||
nStar = 1
|
||||
else
|
||||
local amount = self:Remap(self.nCurScore / self.levelCfg.Reward1Condition, 0, 1, 0, 0.33)
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgActProgress, amount)
|
||||
nStar = 0
|
||||
end
|
||||
for i = 1, 3 do
|
||||
local star = self._mapNode.StarItem[i].transform:Find("ImgStarGray")
|
||||
star.gameObject:SetActive(i > nStar)
|
||||
end
|
||||
self.nStar = nStar
|
||||
end
|
||||
function MathParkourCtrl:ApplyLogicPause(bPause)
|
||||
if bPause then
|
||||
NovaAPI.DispatchEventWithData("MATHPARKOUR_PAUSE_STATE_CHANGED", nil, {1})
|
||||
EventManager.Hit("MathParkour_CastAssistSkillPause", true)
|
||||
if self.tbUsedBuffItem ~= nil then
|
||||
for _, v in pairs(self.tbUsedBuffItem) do
|
||||
v:Pause(true)
|
||||
end
|
||||
end
|
||||
WwiseAudioMgr:PostEvent("Mode_400018_all_pasue")
|
||||
else
|
||||
NovaAPI.DispatchEventWithData("MATHPARKOUR_PAUSE_STATE_CHANGED", nil, {0})
|
||||
EventManager.Hit("MathParkour_CastAssistSkillPause", false)
|
||||
if self.tbUsedBuffItem ~= nil then
|
||||
for _, v in pairs(self.tbUsedBuffItem) do
|
||||
v:Pause(false)
|
||||
end
|
||||
end
|
||||
WwiseAudioMgr:PostEvent("Mode_400018_all_resume")
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:IsLogicPaused()
|
||||
return self.bPause == true or self.bGMPaused == true
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_GMPause(bPause)
|
||||
if bPause then
|
||||
if self:IsLogicPaused() then
|
||||
return
|
||||
end
|
||||
self.bGMPaused = true
|
||||
self:ApplyLogicPause(true)
|
||||
return
|
||||
end
|
||||
if not self.bGMPaused then
|
||||
return
|
||||
end
|
||||
self.bGMPaused = false
|
||||
if self:IsLogicPaused() then
|
||||
return
|
||||
end
|
||||
self:ApplyLogicPause(false)
|
||||
end
|
||||
function MathParkourCtrl:OnBtnClick_Pause()
|
||||
if self.bInResult then
|
||||
return
|
||||
end
|
||||
self.bPause = true
|
||||
self:ApplyLogicPause(true)
|
||||
self._mapNode.goPause:Open(self.levelCfg.DicId)
|
||||
end
|
||||
function MathParkourCtrl:OnBtnClick_Start()
|
||||
end
|
||||
function MathParkourCtrl:OnBtnClick_ClearTheScene()
|
||||
if self.tempClearSceneBuffId ~= nil and self.tbUsedBuffItem[self.tempClearSceneBuffId] ~= nil then
|
||||
NovaAPI.DispatchEventWithData("MATHPARKOUR_CLEAR_THE_SCENE", nil, {
|
||||
self.tempClearSceneBuffId
|
||||
})
|
||||
end
|
||||
if self.tbUsedBuffItem[self.tempClearSceneBuffId] ~= nil then
|
||||
local buffItem = self.tbUsedBuffItem[self.tempClearSceneBuffId]
|
||||
table.insert(self.tbBuffItem, buffItem)
|
||||
buffItem.gameObject:SetActive(false)
|
||||
local buffCfg = ConfigTable.GetData("MathParkourBuffItem", self.tempClearSceneBuffId)
|
||||
if buffCfg.ObjType == GameEnum.MathParkourBuffType.Boom then
|
||||
self._mapNode.btnClearthescene.gameObject:SetActive(false)
|
||||
end
|
||||
self.tbUsedBuffItem[self.tempClearSceneBuffId] = nil
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:OnBtnClick_QTE()
|
||||
self.nQte = self.nQte + self.cfg.QteProgressPerClick
|
||||
self.nQte = math.min(self.nQte, self.cfg.QteProgressLimit)
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgSmasProgress, self.nQte / self.cfg.QteProgressLimit)
|
||||
NovaAPI.DispatchEventWithData("MathParkour_SetQteSpeed", nil, {
|
||||
self.nQte * self.cfg.QteSpeedFactor
|
||||
})
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_AddScore(nAddScore)
|
||||
self:UpdateScore(nAddScore)
|
||||
if self.bBossEncountered then
|
||||
self.nBossScore = self.nBossScore + nAddScore
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Score, "+" .. tostring(self.nBossScore))
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_AddBuff(nBuffId)
|
||||
self.nAddBuffCount = self.nAddBuffCount + 1
|
||||
local buffCfg = ConfigTable.GetData("MathParkourBuffItem", nBuffId)
|
||||
if NovaAPI.IsEditorPlatform() then
|
||||
print("MathParkourCtrl:OnEvent_AddBuff nBuffId=" .. tostring(nBuffId) .. "=====" .. buffCfg.Name)
|
||||
end
|
||||
if buffCfg.ObjType == GameEnum.MathParkourBuffType.Rocket then
|
||||
NovaAPI.DispatchEventWithData("MathParkour_BuffAdded", nil, {nBuffId})
|
||||
NovaAPI.DispatchEventWithData("MathParkour_BuffRemoved", nil, {nBuffId})
|
||||
return
|
||||
end
|
||||
if self.tbUsedBuffItem[nBuffId] == nil then
|
||||
local buffItem = self.tbBuffItem[1]
|
||||
buffItem.gameObject:SetActive(true)
|
||||
buffItem:ShowBuff(nBuffId, self:IsLogicPaused())
|
||||
self.tbUsedBuffItem[nBuffId] = buffItem
|
||||
if buffCfg.ObjType == GameEnum.MathParkourBuffType.Boom then
|
||||
self._mapNode.btnClearthescene.gameObject:SetActive(true)
|
||||
self.tempClearSceneBuffId = nBuffId
|
||||
end
|
||||
table.remove(self.tbBuffItem, 1)
|
||||
NovaAPI.DispatchEventWithData("MathParkour_BuffAdded", nil, {nBuffId})
|
||||
else
|
||||
self.tbUsedBuffItem[nBuffId]:ShowBuff(nBuffId, self:IsLogicPaused())
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_BuffTimeOut(nBuffId)
|
||||
local cfg = ConfigTable.GetData("MathParkourBuffItem", nBuffId)
|
||||
if cfg.ObjType == GameEnum.MathParkourBuffType.Boom then
|
||||
self:OnBtnClick_ClearTheScene()
|
||||
end
|
||||
self:RemoveBuff(nBuffId)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_UseBuff(nBuffId)
|
||||
self:RemoveBuff(nBuffId)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_BuffConsumed(nBuffId)
|
||||
self:RemoveBuff(nBuffId)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_BoomTime(fTime)
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgProgress, fTime)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_LevelEnd(bResult)
|
||||
self:ClearGMBuffOverlay()
|
||||
self.bInResult = true
|
||||
if bResult then
|
||||
local nNextLevelId = self.actData:GetNextLevelId(self.nLevelId)
|
||||
self._mapNode.goChallenge:ShowPanel(self.nCurScore, self.nCurScore > self.CurLevelData.nScore, self.nStar, nNextLevelId ~= nil, self.nActId)
|
||||
else
|
||||
self._mapNode.goFailure:ShowPanel(self.nCurScore)
|
||||
end
|
||||
self.actData:DoResult(self.nLevelId, bResult, self.nCurScore, self.nStar, self.nAddBuffCount)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_BossEncountered()
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 1.6)
|
||||
EventManager.Hit("MathParkour_CastAssistSkill", 140, 14001)
|
||||
self:AddTimer(1, 1.66, function()
|
||||
self.bBossEncountered = true
|
||||
self:ShowQTE()
|
||||
self._mapNode.txt_Score1.gameObject:SetActive(self.bBossEncountered)
|
||||
self._mapNode.txt_Score.gameObject:SetActive(self.bBossEncountered)
|
||||
self.nBossScore = 0
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Score, "+" .. tostring(self.nBossScore))
|
||||
end, true, true, true)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_Confirm()
|
||||
if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true, 0, false)
|
||||
EventManager.Hit(EventId.CloesCurPanel)
|
||||
PlayerData.Base:OnBackToMainMenuModule()
|
||||
else
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true)
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_Again()
|
||||
NovaAPI.DispatchEventWithData("MathParkour_Restart", nil, nil)
|
||||
self:InitData()
|
||||
self:UpdatePanelData()
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, 0)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_GoNextLevel()
|
||||
local nNextLevelId = self.actData:GetNextLevelId(self.nLevelId)
|
||||
if nNextLevelId == nil then
|
||||
return
|
||||
end
|
||||
WwiseAudioMgr:PostEvent("Mode_400018_all_stop")
|
||||
self.nLevelId = nNextLevelId
|
||||
self:AddTimer(1, 0.1, function()
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, 0)
|
||||
end, true, true, true)
|
||||
self:InitData()
|
||||
self:UpdatePanelData()
|
||||
local param = {}
|
||||
table.insert(param, tostring(self.nActId))
|
||||
table.insert(param, tostring(self.CurLevelData.nId))
|
||||
table.insert(param, tostring(0))
|
||||
CS.MiniGameHelper.SetMiniGameData(param)
|
||||
NovaAPI.DispatchEventWithData("MathParkour_NextLevel", nil, nil)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_Exit()
|
||||
WwiseAudioMgr:PostEvent("Mode_400018_all_stop")
|
||||
if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true, 0, false)
|
||||
EventManager.Hit(EventId.CloesCurPanel)
|
||||
PlayerData.Base:OnBackToMainMenuModule()
|
||||
else
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true)
|
||||
end
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_Restart()
|
||||
WwiseAudioMgr:PostEvent("Mode_400018_all_stop")
|
||||
self._mapNode.goPause:Close()
|
||||
NovaAPI.DispatchEventWithData("MathParkour_Restart", nil, nil)
|
||||
self:AddTimer(1, 0.1, function()
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, 0)
|
||||
end, true, true, true)
|
||||
self:InitData()
|
||||
self:UpdatePanelData()
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_Continue()
|
||||
self._mapNode.goPause:Close()
|
||||
self.bPause = false
|
||||
if self:IsLogicPaused() then
|
||||
return
|
||||
end
|
||||
self:ApplyLogicPause(false)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_EnterLevel()
|
||||
local animator = self.gameObject:GetComponent("Animator")
|
||||
if animator ~= nil then
|
||||
animator:Play("MathParkourPanel_in")
|
||||
end
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, 1)
|
||||
self:StartGame()
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_BlockInput(bBlock)
|
||||
EventManager.Hit(EventId.BlockInput, bBlock)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_GMRemoveBuff(nBuffId)
|
||||
self:RemoveBuff(nBuffId)
|
||||
end
|
||||
function MathParkourCtrl:OnEvent_GMToggleBuffOverlay()
|
||||
self.bGMBuffOverlay = not self.bGMBuffOverlay
|
||||
if self.bGMBuffOverlay then
|
||||
self:EnsureGMBuffOverlay()
|
||||
self:RefreshGMBuffOverlay()
|
||||
if self.gmOverlayTimer == nil then
|
||||
self.gmOverlayTimer = self:AddTimer(0, 0.5, function()
|
||||
if self.bGMBuffOverlay then
|
||||
self:RefreshGMBuffOverlay()
|
||||
end
|
||||
end, true, true, true)
|
||||
else
|
||||
self.gmOverlayTimer:Pause(false)
|
||||
end
|
||||
else
|
||||
if self.goGMBuffOverlay ~= nil and not self.goGMBuffOverlay:IsNull() then
|
||||
self.goGMBuffOverlay:SetActive(false)
|
||||
end
|
||||
if self.gmOverlayTimer ~= nil then
|
||||
self.gmOverlayTimer:Pause(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
local GM_OVERLAY_COL_MAX = 4
|
||||
local GetGMOverlayFont = function(trParent)
|
||||
local srcTxt = trParent:GetComponentInChildren(typeof(CS.UnityEngine.UI.Text))
|
||||
if srcTxt ~= nil and srcTxt.font ~= nil then
|
||||
return srcTxt.font
|
||||
end
|
||||
local ok, builtinFont = pcall(function()
|
||||
return CS.UnityEngine.Resources.GetBuiltinResource(typeof(CS.UnityEngine.Font), "LegacyRuntime.ttf")
|
||||
end)
|
||||
if ok then
|
||||
return builtinFont
|
||||
end
|
||||
return nil
|
||||
end
|
||||
local CreateGMOverlayText = function(goParent, sName, font)
|
||||
local go = CS.UnityEngine.GameObject(sName, typeof(CS.UnityEngine.RectTransform))
|
||||
go.layer = goParent.layer
|
||||
go.transform:SetParent(goParent.transform, false)
|
||||
local txt = go:AddComponent(typeof(CS.UnityEngine.UI.Text))
|
||||
txt.fontSize = 22
|
||||
txt.color = CS.UnityEngine.Color.black
|
||||
txt.alignment = CS.UnityEngine.TextAnchor.UpperLeft
|
||||
txt.horizontalOverflow = CS.UnityEngine.HorizontalWrapMode.Overflow
|
||||
txt.verticalOverflow = CS.UnityEngine.VerticalWrapMode.Overflow
|
||||
txt.raycastTarget = false
|
||||
if font ~= nil then
|
||||
txt.font = font
|
||||
end
|
||||
return txt
|
||||
end
|
||||
local StretchGMOverlayText = function(txt, nAnchorMinX, nAnchorMaxX)
|
||||
local rt = txt:GetComponent("RectTransform")
|
||||
rt.anchorMin = Vector2(nAnchorMinX, 0)
|
||||
rt.anchorMax = Vector2(nAnchorMaxX, 1)
|
||||
rt.pivot = Vector2(0.5, 1)
|
||||
rt.offsetMin = Vector2(8, 0)
|
||||
rt.offsetMax = Vector2(-8, 0)
|
||||
end
|
||||
function MathParkourCtrl:EnsureGMBuffOverlay()
|
||||
if self.goGMBuffOverlay ~= nil and not self.goGMBuffOverlay:IsNull() and self.txtGMBuffOverlayRight ~= nil then
|
||||
self.goGMBuffOverlay:SetActive(true)
|
||||
return
|
||||
end
|
||||
if self.goGMBuffOverlay ~= nil and not self.goGMBuffOverlay:IsNull() then
|
||||
destroy(self.goGMBuffOverlay)
|
||||
end
|
||||
local parent = self._mapNode.canvasGroup.transform
|
||||
local go = CS.UnityEngine.GameObject("GMBuffOverlay", typeof(CS.UnityEngine.RectTransform))
|
||||
go.layer = parent.gameObject.layer
|
||||
go.transform:SetParent(parent, false)
|
||||
local rt = go:GetComponent("RectTransform")
|
||||
rt.anchorMin = Vector2(0.5, 0.5)
|
||||
rt.anchorMax = Vector2(0.5, 0.5)
|
||||
rt.pivot = Vector2(0.5, 1)
|
||||
rt.anchoredPosition = Vector2(0, -90)
|
||||
rt.sizeDelta = Vector2(560, 180)
|
||||
local font = GetGMOverlayFont(parent)
|
||||
local txtLeft = CreateGMOverlayText(go, "txtLeft", font)
|
||||
local txtRight = CreateGMOverlayText(go, "txtRight", font)
|
||||
StretchGMOverlayText(txtLeft, 0, 1)
|
||||
StretchGMOverlayText(txtRight, 0.5, 1)
|
||||
txtRight.gameObject:SetActive(false)
|
||||
self.goGMBuffOverlay = go
|
||||
self.txtGMBuffOverlay = txtLeft
|
||||
self.txtGMBuffOverlayRight = txtRight
|
||||
end
|
||||
function MathParkourCtrl:RefreshGMBuffOverlay()
|
||||
if self.txtGMBuffOverlay == nil then
|
||||
return
|
||||
end
|
||||
local tbLines = {}
|
||||
for nBuffId, buffCtrl in pairs(self.tbUsedBuffItem) do
|
||||
local buffCfg = ConfigTable.GetData("MathParkourBuffItem", nBuffId)
|
||||
local sName = buffCfg ~= nil and buffCfg.Name or tostring(nBuffId)
|
||||
local nTime = buffCtrl.nCurTime or 0
|
||||
table.insert(tbLines, {
|
||||
nId = nBuffId,
|
||||
sText = string.format("%s %02d:%02d", sName, math.floor(nTime / 60), nTime % 60)
|
||||
})
|
||||
end
|
||||
table.sort(tbLines, function(a, b)
|
||||
return a.nId < b.nId
|
||||
end)
|
||||
local JoinLines = function(nFrom, nTo)
|
||||
local s = "当前效果:\n"
|
||||
if nTo < nFrom then
|
||||
return s .. "(无)"
|
||||
end
|
||||
for i = nFrom, nTo do
|
||||
s = s .. tbLines[i].sText .. "\n"
|
||||
end
|
||||
return s
|
||||
end
|
||||
local nCount = #tbLines
|
||||
local bTwoCol = nCount > GM_OVERLAY_COL_MAX
|
||||
if not bTwoCol then
|
||||
StretchGMOverlayText(self.txtGMBuffOverlay, 0, 1)
|
||||
self.txtGMBuffOverlay.alignment = CS.UnityEngine.TextAnchor.UpperCenter
|
||||
NovaAPI.SetText(self.txtGMBuffOverlay, JoinLines(1, nCount))
|
||||
if self.txtGMBuffOverlayRight ~= nil then
|
||||
self.txtGMBuffOverlayRight.gameObject:SetActive(false)
|
||||
end
|
||||
return
|
||||
end
|
||||
local nLeft = math.ceil(nCount / 2)
|
||||
StretchGMOverlayText(self.txtGMBuffOverlay, 0, 0.5)
|
||||
self.txtGMBuffOverlay.alignment = CS.UnityEngine.TextAnchor.UpperLeft
|
||||
NovaAPI.SetText(self.txtGMBuffOverlay, JoinLines(1, nLeft))
|
||||
self.txtGMBuffOverlayRight.gameObject:SetActive(true)
|
||||
self.txtGMBuffOverlayRight.alignment = CS.UnityEngine.TextAnchor.UpperLeft
|
||||
local sRight = ""
|
||||
for i = nLeft + 1, nCount do
|
||||
sRight = sRight .. tbLines[i].sText .. "\n"
|
||||
end
|
||||
NovaAPI.SetText(self.txtGMBuffOverlayRight, "\n" .. sRight)
|
||||
end
|
||||
function MathParkourCtrl:ClearGMBuffOverlay()
|
||||
self.bGMBuffOverlay = false
|
||||
if self.gmOverlayTimer ~= nil then
|
||||
self.gmOverlayTimer:Cancel()
|
||||
self.gmOverlayTimer = nil
|
||||
end
|
||||
if self.goGMBuffOverlay ~= nil and not self.goGMBuffOverlay:IsNull() then
|
||||
destroy(self.goGMBuffOverlay)
|
||||
end
|
||||
self.goGMBuffOverlay = nil
|
||||
self.txtGMBuffOverlay = nil
|
||||
self.txtGMBuffOverlayRight = nil
|
||||
end
|
||||
return MathParkourCtrl
|
||||
@@ -0,0 +1,162 @@
|
||||
local MathParkourLevelDetailCtrl = class("MathParkourLevelDetailCtrl", BaseCtrl)
|
||||
local AssetPath = "UI_Activity/_400018/SpriteAtlas/"
|
||||
MathParkourLevelDetailCtrl._mapNodeConfig = {
|
||||
txt_LevelName = {sComponentName = "TMP_Text"},
|
||||
txt_detailDesc = {sComponentName = "TMP_Text"},
|
||||
txt_ScoreTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_ScoreTitle"
|
||||
},
|
||||
txt_MaxScore = {sComponentName = "TMP_Text"},
|
||||
txt_Title1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Title1"
|
||||
},
|
||||
txt_Title2 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Title2"
|
||||
},
|
||||
listReward = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
rtReward1 = {},
|
||||
btn_item = {nCount = 4},
|
||||
btn_firstPassItem = {sComponentName = "UIButton"},
|
||||
firstPassItem = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btn_threePassItem = {sComponentName = "UIButton"},
|
||||
threePassItem = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btn_Go = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Go"
|
||||
},
|
||||
txtBtnGo = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Go"
|
||||
}
|
||||
}
|
||||
MathParkourLevelDetailCtrl._mapEventConfig = {}
|
||||
MathParkourLevelDetailCtrl._mapRedDotConfig = {}
|
||||
function MathParkourLevelDetailCtrl:Awake()
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:OnEnable()
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:OnDisable()
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:Clear()
|
||||
if self.tbItemCtrl ~= nil then
|
||||
for _, ctrl in pairs(self.tbItemCtrl) do
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
end
|
||||
end
|
||||
self.tbItemCtrl = {}
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:ShowPanel(nActId, levelData)
|
||||
self.nActId = nActId
|
||||
self.levelData = levelData
|
||||
local config = ConfigTable.GetData("MathParkourLevel", levelData.nId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_LevelName, config.Title)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_detailDesc, config.Desc)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_MaxScore, levelData.nScore)
|
||||
local buffItem = config.DropItemList
|
||||
self._mapNode.listReward.gameObject:SetActive(4 < #buffItem)
|
||||
self._mapNode.rtReward1.gameObject:SetActive(#buffItem <= 4)
|
||||
if 4 < #buffItem then
|
||||
self._mapNode.listReward:Init(#buffItem, self, self.OnGridRefresh, self.OnGridBtnClick, false)
|
||||
else
|
||||
for i = 1, 4 do
|
||||
if i <= #buffItem then
|
||||
local btn_item = self._mapNode.btn_item[i]
|
||||
btn_item.gameObject:SetActive(true)
|
||||
local itemId = buffItem[i]
|
||||
local buffCfg = ConfigTable.GetData("MathParkourBuffItem", itemId)
|
||||
if buffCfg ~= nil then
|
||||
local imgIcon = btn_item.transform:Find("AnimRoot/item/AnimRoot/imgIcon"):GetComponent("Image")
|
||||
if buffCfg.Icon ~= "" then
|
||||
self:SetPngSprite(imgIcon, AssetPath .. buffCfg.Icon)
|
||||
end
|
||||
local btn = btn_item.gameObject:GetComponent("UIButton")
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(function()
|
||||
local msgData = {
|
||||
Title = buffCfg.Name,
|
||||
Desc = {
|
||||
buffCfg.Desc or ""
|
||||
}
|
||||
}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DescTips, btn.transform, msgData)
|
||||
end)
|
||||
end
|
||||
else
|
||||
self._mapNode.btn_item[i].gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.btn_firstPassItem.gameObject:SetActive(config.Reward1Id)
|
||||
if config.Reward1Id > 0 then
|
||||
self._mapNode.firstPassItem:SetItem(config.Reward1Id, nil, config.Reward1Count, false, 0 < levelData.nStar, true)
|
||||
self._mapNode.btn_firstPassItem.onClick:RemoveAllListeners()
|
||||
self._mapNode.btn_firstPassItem.onClick:AddListener(function()
|
||||
UTILS.ClickItemGridWithTips(config.Reward1Id, self._mapNode.btn_firstPassItem.transform, true, true, false)
|
||||
end)
|
||||
end
|
||||
self._mapNode.btn_threePassItem.gameObject:SetActive(config.Reward3Id)
|
||||
if 0 < config.Reward3Id then
|
||||
self._mapNode.threePassItem:SetItem(config.Reward3Id, nil, config.Reward3Count, false, levelData.nStar >= 3, false, true)
|
||||
self._mapNode.btn_threePassItem.onClick:RemoveAllListeners()
|
||||
self._mapNode.btn_threePassItem.onClick:AddListener(function()
|
||||
UTILS.ClickItemGridWithTips(config.Reward3Id, self._mapNode.btn_threePassItem.transform, true, true, false)
|
||||
end)
|
||||
end
|
||||
self.gameObject:SetActive(true)
|
||||
if self.animator ~= nil then
|
||||
self.animator:Play("LevelDetailsPanel_in")
|
||||
end
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:ClosePanel()
|
||||
self.gameObject:SetActive(false)
|
||||
self:Clear()
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
local item = goGrid.transform:Find("btn_itemTemp/AnimRoot/item")
|
||||
if not self.tbItemCtrl[nInstanceId] then
|
||||
self.tbItemCtrl[nInstanceId] = self:BindCtrlByNode(item, "Game.UI.TemplateEx.TemplateItemCtrl")
|
||||
end
|
||||
local config = ConfigTable.GetData("MathParkourLevel", self.levelData.nId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
local itemId = config.DropItemList[nIndex]
|
||||
self.tbItemCtrl[nInstanceId]:SetItem(itemId)
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:OnGridBtnClick(go, nIndex)
|
||||
local nIndex = nIndex + 1
|
||||
local config = ConfigTable.GetData("MathParkourLevel", self.levelData.nId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
local itemId = config.DropItemList[nIndex]
|
||||
UTILS.ClickItemGridWithTips(itemId, go.transform, true, true, false)
|
||||
end
|
||||
function MathParkourLevelDetailCtrl:OnBtnClick_Go()
|
||||
local param = {}
|
||||
table.insert(param, tostring(self.nActId))
|
||||
table.insert(param, tostring(self.levelData.nId))
|
||||
table.insert(param, tostring(0))
|
||||
CS.MiniGameHelper.SetMiniGameData(param)
|
||||
NovaAPI.EnterModule("MathParkourModuleScene", true, 56)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.MathParkourPanel, self.nActId, self.levelData.nId)
|
||||
end
|
||||
return MathParkourLevelDetailCtrl
|
||||
@@ -0,0 +1,268 @@
|
||||
local MathParkourLevelSelectCtrl = class("MathParkourLevelSelectCtrl", BaseCtrl)
|
||||
local SpineManager = require("Game.Spine.SpineManager")
|
||||
local layoutRight = 915
|
||||
local layoutRightDefault = 322
|
||||
local layoutMax = -427
|
||||
MathParkourLevelSelectCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
btnCloseBg = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CloseBg"
|
||||
},
|
||||
togRoot = {nCount = 7},
|
||||
btnTask = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Task"
|
||||
},
|
||||
txtTask = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_QuestTitle"
|
||||
},
|
||||
Sp_BookScene = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
Sp_BookSceneFront = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
rt_Toggle = {},
|
||||
srToggle = {
|
||||
sComponentName = "UIScrollRect"
|
||||
},
|
||||
rt_ToggleTrans = {
|
||||
sNodeName = "rt_Toggle",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
levelDetail = {
|
||||
sNodeName = "LevelDetailsPanel",
|
||||
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourLevelDetailCtrl"
|
||||
},
|
||||
charSpine = {sNodeName = "Sp_char"},
|
||||
reward_reddot = {}
|
||||
}
|
||||
MathParkourLevelSelectCtrl._mapEventConfig = {
|
||||
MathParkourLevelUpdate = "OnEvent_LevelUpdate"
|
||||
}
|
||||
MathParkourLevelSelectCtrl._mapRedDotConfig = {}
|
||||
function MathParkourLevelSelectCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.nActId = param[1]
|
||||
end
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:OnEnable()
|
||||
self._mapNode.rt_Toggle.gameObject:SetActive(false)
|
||||
local aniamtor = self.gameObject:GetComponent("Animator")
|
||||
if aniamtor ~= nil then
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
aniamtor:Play("MathParkourLevelsSelect_in")
|
||||
self._mapNode.rt_Toggle.gameObject:SetActive(true)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
self._mapNode.Sp_BookSceneFront.gameObject:SetActive(true)
|
||||
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActId)
|
||||
if bInActGroup then
|
||||
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
||||
local actGroupId = mapActivityData.MidGroupId
|
||||
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
||||
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
||||
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
||||
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
||||
nActGroupId,
|
||||
taskActId,
|
||||
mapActivityData.MiniGameRedDot
|
||||
}, self._mapNode.reward_reddot)
|
||||
end
|
||||
end
|
||||
self:RefreshLevelList()
|
||||
self._mapNode.levelDetail:ClosePanel()
|
||||
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRightDefault, -32, 0)
|
||||
self._mapNode.Sp_BookScene.localPosition = Vector3(0, self._mapNode.Sp_BookScene.localPosition.y, 0)
|
||||
self._mapNode.rt_ToggleTrans.localPosition = Vector3(0, self._mapNode.rt_ToggleTrans.localPosition.y, 0)
|
||||
if 0 < self._panel.nSelectIndex then
|
||||
local cacheLevelId = self.actData:GetCacheLevelId()
|
||||
if cacheLevelId ~= nil then
|
||||
for i, v in ipairs(self.tbLevelData) do
|
||||
if v.nId == cacheLevelId then
|
||||
self._panel.nSelectIndex = i
|
||||
self.actData:ClearCacheLevelId()
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
self:AddTimer(1, 1.5, function()
|
||||
self:ShowDetail(self.tbLevelData[self._panel.nSelectIndex], self._panel.nSelectIndex, false)
|
||||
local imgSelect = self._mapNode.togRoot[self._panel.nSelectIndex].transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
||||
imgSelect.gameObject:SetActive(true)
|
||||
if self._panel.nSelectIndex > 4 then
|
||||
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRight, -32, 0)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
local moveTime = 0.2
|
||||
local moveX = -325 - 340 * (self._panel.nSelectIndex - 5)
|
||||
self._mapNode.rt_ToggleTrans:DOLocalMoveX(moveX, moveTime)
|
||||
self._mapNode.Sp_BookScene:DOLocalMoveX(moveX, moveTime)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
end, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 1.5)
|
||||
else
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 1)
|
||||
end
|
||||
SpineManager.PlayAnim(self._mapNode.Sp_BookScene.gameObject, "in", false)
|
||||
SpineManager.PlayAnim(self._mapNode.Sp_BookSceneFront, "in_Front", false)
|
||||
self:AddTimer(1, 1, function()
|
||||
SpineManager.PlayAnim(self._mapNode.Sp_BookScene.gameObject, "idle", true)
|
||||
self._mapNode.Sp_BookSceneFront.gameObject:SetActive(false)
|
||||
end, true, true, true)
|
||||
function self.onScrollValueChanged(value)
|
||||
self._mapNode.Sp_BookScene.localPosition = Vector3(self._mapNode.rt_ToggleTrans.localPosition.x, self._mapNode.Sp_BookScene.localPosition.y, 0)
|
||||
end
|
||||
self._mapNode.srToggle.onValueChanged:AddListener(self.onScrollValueChanged)
|
||||
SpineManager.PlayAnim(self._mapNode.charSpine, "in", false)
|
||||
self:AddTimer(1, 0.9, function()
|
||||
SpineManager.PlayAnim(self._mapNode.charSpine, "idle", true)
|
||||
end, true, true, true)
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:OnDisable()
|
||||
if self.onScrollValueChanged ~= nil then
|
||||
self._mapNode.srToggle.onValueChanged:RemoveListener(self.onScrollValueChanged)
|
||||
self.onScrollValueChanged = nil
|
||||
end
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:RefreshLevelList()
|
||||
self.actData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
if self.actData == nil then
|
||||
return
|
||||
end
|
||||
self.tbLevelData = self.actData:GetAllLevelData()
|
||||
for i = 1, 7 do
|
||||
local levelData = self.tbLevelData[i]
|
||||
if levelData ~= nil then
|
||||
self:SetLevelToggle(levelData, self._mapNode.togRoot[i], i)
|
||||
self._mapNode.togRoot[i]:SetActive(true)
|
||||
else
|
||||
self._mapNode.togRoot[i]:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:OnEvent_LevelUpdate()
|
||||
self:RefreshLevelList()
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:OnDestroy()
|
||||
if PlayerData.Activity:IsActivityInActivityGroup(self.nActId) then
|
||||
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
||||
local actGroupId = mapActivityData.MidGroupId
|
||||
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
||||
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
||||
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
||||
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
||||
RedDotManager.UnRegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
||||
actGroupId,
|
||||
taskActId,
|
||||
mapActivityData.MiniGameRedDot
|
||||
}, self._mapNode.reward_reddot)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:SetLevelToggle(levelData, toggle, nIndex)
|
||||
local rt_Targets = toggle.transform:Find("tog/grpText/rt_Targets")
|
||||
local rtLockPreLv = toggle.transform:Find("tog/grpText/rtLockPreLv")
|
||||
local txt_Open = toggle.transform:Find("tog/AnimRoot/AnimSwitch/txt_Open"):GetComponent("TextMeshProUGUI")
|
||||
local txt_Lock = toggle.transform:Find("tog/AnimRoot/AnimSwitch/txt_Lock"):GetComponent("TextMeshProUGUI")
|
||||
local levelUnlock = self.actData:GetLevelUnlock(levelData.nId)
|
||||
local tog = toggle.transform:Find("tog"):GetComponent("UIButton")
|
||||
tog.onClick:RemoveAllListeners()
|
||||
rt_Targets.gameObject:SetActive(levelUnlock)
|
||||
rtLockPreLv.gameObject:SetActive(not levelUnlock)
|
||||
txt_Open.gameObject:SetActive(levelUnlock)
|
||||
txt_Lock.gameObject:SetActive(not levelUnlock)
|
||||
local sLevelIndex = string.format("%02d", nIndex)
|
||||
NovaAPI.SetTMPText(txt_Open, sLevelIndex)
|
||||
NovaAPI.SetTMPText(txt_Lock, sLevelIndex)
|
||||
local imgSelect = toggle.transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
||||
imgSelect.gameObject:SetActive(false)
|
||||
if not levelUnlock then
|
||||
return
|
||||
end
|
||||
for i = 1, 3 do
|
||||
local btnTarget = rt_Targets.transform:Find("btnTarget" .. i):GetComponent("Button")
|
||||
btnTarget.interactable = i <= levelData.nStar
|
||||
end
|
||||
tog.onClick:AddListener(function()
|
||||
self:ShowDetail(levelData, nIndex, true)
|
||||
imgSelect.gameObject:SetActive(true)
|
||||
end)
|
||||
local bNewDot = toggle.transform:Find("tog/AnimRoot/AnimSwitch/redH")
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_MathParkour_New_Level, {
|
||||
self.nActId,
|
||||
levelData.nId
|
||||
}, bNewDot)
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:ShowDetail(levelData, nIndex, bScroll)
|
||||
local tempIndex = self._panel.nSelectIndex
|
||||
if 0 < tempIndex then
|
||||
local imgSelect = self._mapNode.togRoot[tempIndex].transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
||||
imgSelect.gameObject:SetActive(false)
|
||||
end
|
||||
self._panel.nSelectIndex = nIndex
|
||||
self._mapNode.levelDetail:ShowPanel(self.nActId, levelData)
|
||||
if bScroll and 4 < nIndex then
|
||||
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRight, -32, 0)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
local moveTime = 0.2
|
||||
local moveX = -325 - 340 * (nIndex - 5)
|
||||
self._mapNode.rt_ToggleTrans:DOLocalMoveX(moveX, moveTime)
|
||||
self._mapNode.Sp_BookScene:DOLocalMoveX(moveX, moveTime)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:OnBtnClick_CloseBg()
|
||||
local tempIndex = self._panel.nSelectIndex
|
||||
if 0 < tempIndex then
|
||||
local imgSelect = self._mapNode.togRoot[tempIndex].transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
||||
imgSelect.gameObject:SetActive(false)
|
||||
end
|
||||
self._panel.nSelectIndex = 0
|
||||
self._mapNode.levelDetail:ClosePanel()
|
||||
local moveTime = 0.2
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, moveTime)
|
||||
local layout = layoutRight
|
||||
self.tweener = DOTween.To(function()
|
||||
return layout
|
||||
end, function(v)
|
||||
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, math.floor(v), -32, 0)
|
||||
end, layoutRightDefault, moveTime):OnComplete(function()
|
||||
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRightDefault, -32, 0)
|
||||
end)
|
||||
end
|
||||
function MathParkourLevelSelectCtrl:OnBtnClick_Task()
|
||||
if PlayerData.Activity:IsActivityInActivityGroup(self.nActId) then
|
||||
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
||||
local actGroupId = mapActivityData.MidGroupId
|
||||
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
||||
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
||||
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
||||
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Task_20104, taskActId, GameEnum.ActivityTaskTabType.Tab4)
|
||||
return
|
||||
end
|
||||
RedDotManager.UnRegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
||||
actGroupId,
|
||||
taskActId,
|
||||
mapActivityData.MiniGameRedDot
|
||||
}, self._mapNode.reward_reddot)
|
||||
self._mapNode.reward_reddot:SetActive(false)
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_End_Notice"))
|
||||
end
|
||||
end
|
||||
return MathParkourLevelSelectCtrl
|
||||
@@ -0,0 +1,80 @@
|
||||
local MathParkourPauseCtrl = class("MathParkourPauseCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
MathParkourPauseCtrl._mapNodeConfig = {
|
||||
blur = {},
|
||||
txt_title = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Text_Pause"
|
||||
},
|
||||
txt_exit = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Button_Leave"
|
||||
},
|
||||
txt_restart = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Button_Re"
|
||||
},
|
||||
txt_continue = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Button_Back"
|
||||
},
|
||||
txt_dic = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Tutorial_DicTitle"
|
||||
},
|
||||
btn_exit = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Exit",
|
||||
sAction = "Giveup"
|
||||
},
|
||||
btn_restart = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Restart",
|
||||
sAction = "Retry"
|
||||
},
|
||||
btn_continue = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Continue",
|
||||
sAction = "Back"
|
||||
},
|
||||
btn_dic = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_OpenDic",
|
||||
sAction = "Depot"
|
||||
}
|
||||
}
|
||||
MathParkourPauseCtrl._mapEventConfig = {}
|
||||
MathParkourPauseCtrl._mapRedDotConfig = {}
|
||||
function MathParkourPauseCtrl:Awake()
|
||||
end
|
||||
function MathParkourPauseCtrl:Open(nDicId)
|
||||
self.nDicId = nDicId
|
||||
self.gameObject:SetActive(true)
|
||||
self._mapNode.btn_dic.gameObject:SetActive(0 < nDicId)
|
||||
self.tbGamepadUINode = self:GetGamepadUINode()
|
||||
GamepadUIManager.EnableGamepadUI("MathParkourPauseCtrl", self.tbGamepadUINode, nil, false)
|
||||
end
|
||||
function MathParkourPauseCtrl:Close()
|
||||
GamepadUIManager.DisableGamepadUI("MathParkourPauseCtrl")
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function MathParkourPauseCtrl:OnBtnClick_Exit()
|
||||
EventManager.Hit("MathParkour_Exit_OnClick")
|
||||
end
|
||||
function MathParkourPauseCtrl:OnBtnClick_Restart()
|
||||
EventManager.Hit("MathParkour_Restart_OnClick")
|
||||
end
|
||||
function MathParkourPauseCtrl:OnBtnClick_Continue()
|
||||
EventManager.Hit("MathParkour_Continue_OnClick")
|
||||
end
|
||||
function MathParkourPauseCtrl:OnBtnClick_OpenDic()
|
||||
if self.nDicId == 0 then
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DictionaryEntry, self.nDicId, true)
|
||||
end
|
||||
return MathParkourPauseCtrl
|
||||
@@ -0,0 +1,45 @@
|
||||
local MathParkourResultFailCtrl = class("MathParkourResultFailCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
MathParkourResultFailCtrl._mapNodeConfig = {
|
||||
txtCompleteTipsPrev1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_CompleteTipsPrev"
|
||||
},
|
||||
txt_Complete = {sComponentName = "TMP_Text"},
|
||||
btn_Confirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txt_confirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_Confirm"
|
||||
},
|
||||
btn_Again = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Again"
|
||||
},
|
||||
txt_again = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_Again"
|
||||
}
|
||||
}
|
||||
MathParkourResultFailCtrl._mapEventConfig = {}
|
||||
MathParkourResultFailCtrl._mapRedDotConfig = {}
|
||||
function MathParkourResultFailCtrl:ShowPanel(nScore)
|
||||
self.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Complete, nScore)
|
||||
self.tbGamepadUINode = self:GetGamepadUINode()
|
||||
GamepadUIManager.EnableGamepadUI("MathParkourResultFailCtrl", self.tbGamepadUINode, nil, true)
|
||||
end
|
||||
function MathParkourResultFailCtrl:HidePanel()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function MathParkourResultFailCtrl:OnBtnClick_Confirm()
|
||||
GamepadUIManager.DisableGamepadUI("MathParkourResultFailCtrl")
|
||||
EventManager.Hit("MathParkour_Confirm")
|
||||
end
|
||||
function MathParkourResultFailCtrl:OnBtnClick_Again()
|
||||
GamepadUIManager.DisableGamepadUI("MathParkourResultFailCtrl")
|
||||
EventManager.Hit("MathParkour_Again")
|
||||
end
|
||||
return MathParkourResultFailCtrl
|
||||
@@ -0,0 +1,67 @@
|
||||
local MathParkourResultSuccessCtrl = class("MathParkourResultSuccessCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
MathParkourResultSuccessCtrl._mapNodeConfig = {
|
||||
txtCompleteTipsPrev1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_StarTitle"
|
||||
},
|
||||
ScoreStar = {nCount = 3},
|
||||
txtCompleteTipsPrev2 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_CompleteTipsPrev"
|
||||
},
|
||||
txt_Complete = {sComponentName = "TMP_Text"},
|
||||
txt_curScore = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_NewScore"
|
||||
},
|
||||
btn_Confirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txt_confirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_Confirm"
|
||||
},
|
||||
btn_Nextlevel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_NextLevel"
|
||||
},
|
||||
txt_nextlevel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MathParkour_Text_NextLevel"
|
||||
}
|
||||
}
|
||||
MathParkourResultSuccessCtrl._mapEventConfig = {}
|
||||
MathParkourResultSuccessCtrl._mapRedDotConfig = {}
|
||||
function MathParkourResultSuccessCtrl:ShowPanel(nScore, bNew, nStarCount, bCanNextLevel, nActId)
|
||||
self.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Complete, nScore)
|
||||
self._mapNode.txt_curScore.gameObject:SetActive(bNew)
|
||||
for i = 1, 3 do
|
||||
self._mapNode.ScoreStar[i].gameObject:SetActive(i <= nStarCount)
|
||||
end
|
||||
bCanNextLevel = bCanNextLevel or false
|
||||
self._mapNode.btn_Nextlevel.gameObject:SetActive(bCanNextLevel)
|
||||
self.actData = PlayerData.Activity:GetActivityDataById(nActId)
|
||||
if self.actData ~= nil then
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 1)
|
||||
self:AddTimer(1, 1, function()
|
||||
self.actData:OpenTempChangeInfo()
|
||||
end, true, true, true)
|
||||
end
|
||||
self.tbGamepadUINode = self:GetGamepadUINode()
|
||||
GamepadUIManager.EnableGamepadUI("MathParkourResultSuccessCtrl", self.tbGamepadUINode, nil, true)
|
||||
end
|
||||
function MathParkourResultSuccessCtrl:HidePanel()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function MathParkourResultSuccessCtrl:OnBtnClick_Confirm()
|
||||
GamepadUIManager.DisableGamepadUI("MathParkourResultSuccessCtrl")
|
||||
EventManager.Hit("MathParkour_Confirm")
|
||||
end
|
||||
function MathParkourResultSuccessCtrl:OnBtnClick_NextLevel()
|
||||
GamepadUIManager.DisableGamepadUI("MathParkourResultSuccessCtrl")
|
||||
EventManager.Hit("MathParkour_NextLevel")
|
||||
end
|
||||
return MathParkourResultSuccessCtrl
|
||||
@@ -0,0 +1,113 @@
|
||||
local MathParkourSkillDisplayCtrl = class("MathParkourSkillDisplayCtrl", BaseCtrl)
|
||||
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
|
||||
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
|
||||
local ResTypeAny = GameResourceLoader.ResType.Any
|
||||
local Path = require("path")
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
local LocalSettingData = require("GameCore.Data.LocalSettingData")
|
||||
MathParkourSkillDisplayCtrl._mapNodeConfig = {
|
||||
DisplayParent = {},
|
||||
imgBgChar = {sComponentName = "Image"},
|
||||
imgBgPortrait = {sComponentName = "Image"},
|
||||
DisplayL2d = {sComponentName = "RawImage"},
|
||||
animRoot = {sComponentName = "Animator", sNodeName = "animove"},
|
||||
imgBgCharL2d = {}
|
||||
}
|
||||
MathParkourSkillDisplayCtrl._mapEventConfig = {
|
||||
MathParkour_CastAssistSkill = "OnEvent_CastAssistSkill",
|
||||
MathParkour_CastAssistSkillPause = "OnEvent_CastAssistSkillPause"
|
||||
}
|
||||
MathParkourSkillDisplayCtrl._mapRedDotConfig = {}
|
||||
function MathParkourSkillDisplayCtrl:Awake()
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:OnEnable()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.DisplayParent:SetActive(true)
|
||||
NovaAPI.SetMaskAllDirty(self._mapNode.imgBgCharL2d)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.DisplayParent:SetActive(false)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:OnDisable()
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:OnDestroy()
|
||||
self.tbInterruptedDisplay = nil
|
||||
Actor2DManager.UnsetActor2D(false, 1, true)
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:InterrputAllDisplay()
|
||||
self:InterrputAnim()
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:InterrputAnim()
|
||||
if self.timer ~= nil then
|
||||
self.timer:Cancel(false)
|
||||
self.timer = nil
|
||||
end
|
||||
Actor2DManager.UnsetActor2D(false, 1, true)
|
||||
self.callback = nil
|
||||
self._mapNode.DisplayParent:SetActive(false)
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:UltimateDisplay(nCharId, nSkinId)
|
||||
self:InitL2dRes(nCharId, nSkinId)
|
||||
self:ShowSkill(nCharId, nSkinId)
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:InitL2dRes(nCharId, nSkinId)
|
||||
local mapSkin = ConfigTable.GetData_CharacterSkin(nSkinId)
|
||||
local sBodyName = string.format("%s_001", nSkinId)
|
||||
self.LoadSprite(self._mapNode.imgBgPortrait, mapSkin.Portrait, sBodyName)
|
||||
local mapCharDescCfg = ConfigTable.GetData("CharacterDes", nCharId)
|
||||
local sColor
|
||||
if mapCharDescCfg == nil then
|
||||
sColor = ""
|
||||
else
|
||||
sColor = mapCharDescCfg.CharSkillColor == "" and mapCharDescCfg.CharColor or mapCharDescCfg.CharSkillColor
|
||||
end
|
||||
local _b, _color = ColorUtility.TryParseHtmlString(sColor)
|
||||
NovaAPI.SetImageColor(self._mapNode.imgBgChar, _color)
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl.LoadSprite(imgObj, sPath, sName)
|
||||
local _sPath = string.format("%s/atlas_png/a/%s.png", Path.dirname(sPath), sName)
|
||||
NovaAPI.SetImageSprite(imgObj, Settings.AB_ROOT_PATH .. _sPath)
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:ShowSkill(nCharId, nSkinId, callback)
|
||||
if self.timer ~= nil then
|
||||
self.timer:Cancel(false)
|
||||
self.timer = nil
|
||||
end
|
||||
WwiseAudioMgr:PostEvent("ui_tip_support_ult")
|
||||
self._mapNode.DisplayParent:SetActive(true)
|
||||
NovaAPI.SetMaskAllDirty(self._mapNode.imgBgCharL2d)
|
||||
self._mapNode.animRoot:Play("Empty")
|
||||
self._mapNode.animRoot:Play("SubskillDisplay_moves_1")
|
||||
self.gameObject.transform.localScale = Vector3.one
|
||||
Actor2DManager.SetActor2D_ForSubSKill(PanelId.SubSkillDisplay, self._mapNode.DisplayL2d, nCharId, nSkinId, nil, nIdx)
|
||||
Actor2DManager.PlayAnim("ultra", true, 1)
|
||||
self.callback = callback
|
||||
self.timer = self:AddTimer(1, 1.5, "ShowEnd", true, true, true, true)
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:ShowEnd()
|
||||
if self.callback ~= nil and type(self.callback) == "function" then
|
||||
self.callback()
|
||||
end
|
||||
Actor2DManager.UnsetActor2D(false, 1)
|
||||
self.callback = nil
|
||||
self._mapNode.DisplayParent:SetActive(false)
|
||||
self.timer = nil
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:OnEvent_CastAssistSkillPause(bPause)
|
||||
if bPause then
|
||||
if self.callback ~= nil and type(self.callback) == "function" then
|
||||
self.callback()
|
||||
end
|
||||
self:InterrputAllDisplay()
|
||||
end
|
||||
end
|
||||
function MathParkourSkillDisplayCtrl:OnEvent_CastAssistSkill(nCharId, nSkinId)
|
||||
self.UseLive2D = LocalSettingData.mapData.UseLive2D
|
||||
if not (nCharId and nSkinId) or not self.UseLive2D then
|
||||
return
|
||||
end
|
||||
self:UltimateDisplay(nCharId, nSkinId)
|
||||
end
|
||||
return MathParkourSkillDisplayCtrl
|
||||
@@ -1,4 +1,5 @@
|
||||
local PeriodicQuestCtrl_01 = class("PeriodicQuestCtrl_01", BaseCtrl)
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
PeriodicQuestCtrl_01._mapNodeConfig = {
|
||||
goCommon = {
|
||||
sNodeName = "---Common---"
|
||||
@@ -38,11 +39,24 @@ PeriodicQuestCtrl_01._mapNodeConfig = {
|
||||
btnCharDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CharPreview"
|
||||
}
|
||||
},
|
||||
btnDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Detail"
|
||||
},
|
||||
txtBtnDetail = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Detail"
|
||||
},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
PeriodicQuestCtrl_01._mapEventConfig = {
|
||||
RefreshPeriodicAct = "OnEvent_RefreshPeriodicAct"
|
||||
}
|
||||
function PeriodicQuestCtrl_01:OnDisable()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:RefreshActInfo()
|
||||
if self.activityCtrl ~= nil then
|
||||
self.activityCtrl:RefreshQuestList()
|
||||
@@ -108,24 +122,22 @@ function PeriodicQuestCtrl_01:InitActData(actData, bResetGroup)
|
||||
self.nActId = actData:GetActId()
|
||||
self.activityCtrl:InitActData(actData, bResetGroup)
|
||||
self:RefreshActInfo()
|
||||
self:SetTime()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:ClearActivity()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:Awake()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:FadeIn()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:FadeOut()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:OnEnable()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:OnDisable()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:OnDestroy()
|
||||
end
|
||||
function PeriodicQuestCtrl_01:OnRelease()
|
||||
function PeriodicQuestCtrl_01:SetTime()
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_01:OnBtnClick_Receive()
|
||||
local callback = function()
|
||||
@@ -169,4 +181,60 @@ function PeriodicQuestCtrl_01:OnBtnClick_CharPreview()
|
||||
end
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_01:OnBtnClick_Detail()
|
||||
local perQuestActCfg = self.actData:GetPerQuestCfg()
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = perQuestActCfg.DesText,
|
||||
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function PeriodicQuestCtrl_01:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
end
|
||||
})
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, orderedFormat(ConfigTable.GetUIText("PerActivity_Remain_Time") or "", sTimeStr))
|
||||
end
|
||||
return PeriodicQuestCtrl_01
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
local PeriodicQuestCtrl_cover = class("PeriodicQuestCtrl_cover", BaseCtrl)
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
PeriodicQuestCtrl_cover._mapNodeConfig = {
|
||||
goCommon = {
|
||||
sNodeName = "---Common---"
|
||||
},
|
||||
btnDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Detail"
|
||||
},
|
||||
txtBtnDetail = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Detail"
|
||||
},
|
||||
txtActivityTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_CopyMemo"
|
||||
},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
PeriodicQuestCtrl_cover._mapEventConfig = {
|
||||
RefreshPeriodicAct = "OnEvent_RefreshPeriodicAct"
|
||||
}
|
||||
function PeriodicQuestCtrl_cover:OnDisable()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:RefreshActInfo()
|
||||
if self.activityCtrl ~= nil then
|
||||
self.activityCtrl:RefreshQuestList()
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:UnbindCtrl()
|
||||
if self.activityCtrl ~= nil then
|
||||
self:UnbindCtrlByNode(self.activityCtrl)
|
||||
self.activityCtrl = nil
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:InitActData(actData, bResetGroup)
|
||||
if self.activityCtrl == nil then
|
||||
self.activityCtrl = self:BindCtrlByNode(self._mapNode.goCommon, "Game.UI.Activity.PeriodicQuest.PeriodicQuestCtrl")
|
||||
end
|
||||
self.actData = actData
|
||||
self.nActId = actData:GetActId()
|
||||
self.activityCtrl:InitActData(actData, bResetGroup)
|
||||
self:RefreshActInfo()
|
||||
self:SetTime()
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:ClearActivity()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:SetTime()
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:OnEvent_RefreshPeriodicAct(nActId)
|
||||
if nActId == self.nActId then
|
||||
self.bQuestAnim = false
|
||||
self:RefreshActInfo()
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:OnBtnClick_Detail()
|
||||
local perQuestActCfg = self.actData:GetPerQuestCfg()
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = perQuestActCfg.DesText,
|
||||
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function PeriodicQuestCtrl_cover:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
end
|
||||
})
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
|
||||
end
|
||||
return PeriodicQuestCtrl_cover
|
||||
@@ -1,5 +1,4 @@
|
||||
local PeriodicQuestCtrl = class("PeriodicQuestCtrl", BaseCtrl)
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
PeriodicQuestCtrl._mapNodeConfig = {
|
||||
loopSv = {
|
||||
sNodeName = "srGuideQuest",
|
||||
@@ -22,73 +21,36 @@ PeriodicQuestCtrl._mapNodeConfig = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GroupLock"
|
||||
},
|
||||
btnDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Detail"
|
||||
},
|
||||
txtBtnDetail = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Detail"
|
||||
},
|
||||
btnQuickRec = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_QuickRec"
|
||||
},
|
||||
btnCanNotQuickRec = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CannotQuickRec"
|
||||
},
|
||||
txtBtnQuickRec = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Quick_Receive"
|
||||
},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"}
|
||||
txtBtnCannotQuickRec = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Quick_Receive"
|
||||
},
|
||||
btnShop = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Shop"
|
||||
},
|
||||
btnGuideMission = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GuideMission"
|
||||
},
|
||||
txtBtnGuideMission = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_AvgReview"
|
||||
}
|
||||
}
|
||||
PeriodicQuestCtrl._mapEventConfig = {}
|
||||
function PeriodicQuestCtrl:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local curTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
end
|
||||
})
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, orderedFormat(ConfigTable.GetUIText("PerActivity_Remain_Time") or "", sTimeStr))
|
||||
end
|
||||
function PeriodicQuestCtrl:RefreshQuestList()
|
||||
self.tbAllQuestList = self.actData:GetQuestListByGroup()
|
||||
if nil == self.tbAllQuestList[self._panel.nSelectGroup] then
|
||||
@@ -114,6 +76,7 @@ function PeriodicQuestCtrl:RefreshQuestList()
|
||||
end
|
||||
local _, _, canReceive = self.actData:GetQuestProgress()
|
||||
self._mapNode.btnQuickRec.gameObject:SetActive(0 < canReceive)
|
||||
self._mapNode.btnCanNotQuickRec.gameObject:SetActive(canReceive <= 0)
|
||||
for k, v in ipairs(self._mapNode.PerActGroupItem) do
|
||||
local nAllQuest, nReceivedQuest = self.actData:GetDayQuestStatus(k)
|
||||
v:RefreshStatus(nAllQuest <= nReceivedQuest and 0 < nReceivedQuest)
|
||||
@@ -186,27 +149,11 @@ function PeriodicQuestCtrl:InitActData(actData, bResetGroup)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
return
|
||||
end
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl:Awake()
|
||||
self.tbGridCtrl = {}
|
||||
self.tbSequences = {}
|
||||
end
|
||||
function PeriodicQuestCtrl:FadeIn()
|
||||
end
|
||||
function PeriodicQuestCtrl:FadeOut()
|
||||
end
|
||||
function PeriodicQuestCtrl:OnEnable()
|
||||
end
|
||||
function PeriodicQuestCtrl:OnDisable()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
@@ -214,10 +161,6 @@ function PeriodicQuestCtrl:OnDisable()
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function PeriodicQuestCtrl:OnDestroy()
|
||||
end
|
||||
function PeriodicQuestCtrl:OnRelease()
|
||||
end
|
||||
function PeriodicQuestCtrl:OnBtnClick_Group(_, nIndex)
|
||||
if self._panel.nSelectGroup == nIndex then
|
||||
return
|
||||
@@ -240,15 +183,6 @@ end
|
||||
function PeriodicQuestCtrl:OnBtnClick_GroupLock()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("PerActivity_Not_Open"))
|
||||
end
|
||||
function PeriodicQuestCtrl:OnBtnClick_Detail()
|
||||
local perQuestActCfg = self.actData:GetPerQuestCfg()
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = perQuestActCfg.DesText,
|
||||
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function PeriodicQuestCtrl:OnBtnClick_QuickRec()
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshPeriodicAct", self.nActId)
|
||||
@@ -256,4 +190,19 @@ function PeriodicQuestCtrl:OnBtnClick_QuickRec()
|
||||
end
|
||||
PlayerData.Activity:SendReceivePerQuest(self.nActId, 0, callback)
|
||||
end
|
||||
function PeriodicQuestCtrl:OnBtnClick_CannotQuickRec()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("InfinityTower_Reward_Tips"))
|
||||
end
|
||||
function PeriodicQuestCtrl:OnBtnClick_Shop()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.GuideMission, 3)
|
||||
end
|
||||
function PeriodicQuestCtrl:OnBtnClick_GuideMission()
|
||||
local nActivityId = tonumber(self.actData:GetSpecialParam())
|
||||
if type(nActivityId) == "number" then
|
||||
local data = ConfigTable.GetData("ActivityStoryChapter", nActivityId)
|
||||
if data ~= nil then
|
||||
PlayerData.StoryReview:TryOpenStoryChapter(data.ChapterId)
|
||||
end
|
||||
end
|
||||
end
|
||||
return PeriodicQuestCtrl
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
local PeriodicQuestCtrl_02 = class("PeriodicQuestCtrl_02", BaseCtrl)
|
||||
PeriodicQuestCtrl_02._mapNodeConfig = {
|
||||
goCommon = {
|
||||
sNodeName = "---Common---"
|
||||
}
|
||||
}
|
||||
PeriodicQuestCtrl_02._mapEventConfig = {
|
||||
RefreshPeriodicAct = "OnEvent_RefreshPeriodicAct"
|
||||
}
|
||||
function PeriodicQuestCtrl_02:RefreshActInfo()
|
||||
if self.activityCtrl ~= nil then
|
||||
self.activityCtrl:RefreshQuestList()
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_02:UnbindCtrl()
|
||||
if self.activityCtrl ~= nil then
|
||||
self:UnbindCtrlByNode(self.activityCtrl)
|
||||
self.activityCtrl = nil
|
||||
end
|
||||
end
|
||||
function PeriodicQuestCtrl_02:InitActData(actData, bResetGroup)
|
||||
if self.activityCtrl == nil then
|
||||
self.activityCtrl = self:BindCtrlByNode(self._mapNode.goCommon, "Game.UI.Activity.PeriodicQuest.PeriodicQuestCtrl")
|
||||
end
|
||||
self.actData = actData
|
||||
self.nActId = actData:GetActId()
|
||||
self.activityCtrl:InitActData(actData, bResetGroup)
|
||||
self:RefreshActInfo()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:ClearActivity()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:Awake()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:FadeIn()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:FadeOut()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:OnEnable()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:OnDisable()
|
||||
self:UnbindCtrl()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:OnDestroy()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:OnRelease()
|
||||
end
|
||||
function PeriodicQuestCtrl_02:OnEvent_RefreshPeriodicAct(nActId)
|
||||
if nActId == self.nActId then
|
||||
self.bQuestAnim = false
|
||||
self:RefreshActInfo()
|
||||
end
|
||||
end
|
||||
return PeriodicQuestCtrl_02
|
||||
@@ -14,9 +14,16 @@ PeriodicQuestItemCtrl._mapNodeConfig = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Reward"
|
||||
},
|
||||
btnReward2 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Reward2"
|
||||
},
|
||||
rtReward = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
rtReward2 = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnReceive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Receive"
|
||||
@@ -56,6 +63,9 @@ function PeriodicQuestItemCtrl:SetData(nActId, mapData)
|
||||
self.nJumpTo = questCfg.JumpTo
|
||||
self.rewardId = questCfg.Reward
|
||||
self._mapNode.rtReward:SetItem(questCfg.Reward, nil, questCfg.RewardQty, nil, nil, nil, nil, true)
|
||||
self.rewardId2 = questCfg.Reward2
|
||||
self._mapNode.rtReward2:SetItem(questCfg.Reward2, nil, questCfg.RewardQty2, nil, nil, nil, nil, true)
|
||||
self._mapNode.btnReward2.gameObject:SetActive(self.rewardId2 ~= 0)
|
||||
self._mapNode.txtUnComplete.gameObject:SetActive(nStatus == AllEnum.ActQuestStatus.UnComplete and questCfg.JumpTo == 0)
|
||||
self._mapNode.btnJump.gameObject:SetActive(nStatus == AllEnum.ActQuestStatus.UnComplete and questCfg.JumpTo ~= 0)
|
||||
self._mapNode.btnReceive.gameObject:SetActive(nStatus == AllEnum.ActQuestStatus.Complete)
|
||||
@@ -90,6 +100,11 @@ function PeriodicQuestItemCtrl:OnBtnClick_Reward(btn)
|
||||
UTILS.ClickItemGridWithTips(self.rewardId, btn.transform, true, true, true)
|
||||
end
|
||||
end
|
||||
function PeriodicQuestItemCtrl:OnBtnClick_Reward2(btn)
|
||||
if nil ~= self.rewardId2 then
|
||||
UTILS.ClickItemGridWithTips(self.rewardId2, btn.transform, true, true, true)
|
||||
end
|
||||
end
|
||||
function PeriodicQuestItemCtrl:OnBtnClick_Receive()
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshPeriodicAct", self.nActId)
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
local ActivityReengagement_101004PopUpCtrl = class("ActivityReengagement_101004PopUpCtrl", BaseCtrl)
|
||||
local LocalData = require("GameCore.Data.LocalData")
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
ActivityReengagement_101004PopUpCtrl._mapNodeConfig = {
|
||||
txtTips = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_Popup_Tip"
|
||||
},
|
||||
goRewardItem = {
|
||||
nCount = 4,
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnRewardItem = {
|
||||
nCount = 4,
|
||||
sNodeName = "goRewardItem",
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnClickBtnRewardItem"
|
||||
},
|
||||
rtBtn = {},
|
||||
btnWelcome = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Welcome"
|
||||
},
|
||||
txtBtnWelcome = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_Popup_Welcome"
|
||||
}
|
||||
}
|
||||
ActivityReengagement_101004PopUpCtrl._mapEventConfig = {}
|
||||
function ActivityReengagement_101004PopUpCtrl:ShowPopUp(actId, callback, index)
|
||||
self.popUpIndex = index
|
||||
self.nCurActId = actId
|
||||
self.callback = callback
|
||||
local bCanReceive = PlayerData.Reengagement:CheckCanReceive()
|
||||
self._mapNode.rtBtn:SetActive(bCanReceive)
|
||||
local nActId = PlayerData.Reengagement:GetActId()
|
||||
local mapActData = ConfigTable.GetData("ActivityReturneeReunionReward", nActId)
|
||||
if mapActData == nil then
|
||||
if self.callback ~= nil then
|
||||
self.callback()
|
||||
end
|
||||
return
|
||||
end
|
||||
local tbRewards = {}
|
||||
self.tbItemReward = {}
|
||||
for i = 1, 3 do
|
||||
local nId = mapActData["Reward" .. i .. "Tid"]
|
||||
local nQty = mapActData["Reward" .. i .. "Qty"]
|
||||
if 0 < nId then
|
||||
table.insert(tbRewards, {nId = nId, nQty = nQty})
|
||||
table.insert(self.tbItemReward, nId)
|
||||
end
|
||||
end
|
||||
for i = 1, #self._mapNode.goRewardItem do
|
||||
local item = self._mapNode.goRewardItem[i]
|
||||
if i <= #tbRewards then
|
||||
item:SetItem(tbRewards[i].nId, nil, tbRewards[i].nQty)
|
||||
self._mapNode.btnRewardItem[i].gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.btnRewardItem[i].gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
self.anim = self.gameObject:GetComponent("Animator")
|
||||
self:PlayOpenAnim()
|
||||
end
|
||||
function ActivityReengagement_101004PopUpCtrl:PlayOpenAnim()
|
||||
if self.anim then
|
||||
self.anim:Play("open", 0, 0)
|
||||
end
|
||||
end
|
||||
function ActivityReengagement_101004PopUpCtrl:ClosePopUp(callback)
|
||||
if self.anim ~= nil then
|
||||
self.anim:Play("close", 0, 0)
|
||||
self:AddTimer(1, 0.1, function()
|
||||
if callback ~= nil then
|
||||
callback()
|
||||
end
|
||||
end, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.1)
|
||||
elseif callback ~= nil then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
function ActivityReengagement_101004PopUpCtrl:OnBtnClick_Close()
|
||||
self:ClosePopUp(self.callback)
|
||||
end
|
||||
function ActivityReengagement_101004PopUpCtrl:OnBtnClick_Goto()
|
||||
local callback = function()
|
||||
if nil ~= self.nCurActId then
|
||||
PlayerData.Activity:SendActivityDetailMsg()
|
||||
local endTime = PlayerData.Reengagement:GetReengagementCloseTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime <= 0 then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Invalid_Tip_3"))
|
||||
if self.callback ~= nil then
|
||||
self.callback()
|
||||
end
|
||||
return
|
||||
end
|
||||
PopUpManager.PauseAfterCurrent()
|
||||
local openAct = function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.ReengagementPanel)
|
||||
end
|
||||
if self.callback ~= nil then
|
||||
self.callback(openAct, true)
|
||||
else
|
||||
openAct()
|
||||
end
|
||||
end
|
||||
end
|
||||
self:ClosePopUp(callback)
|
||||
end
|
||||
function ActivityReengagement_101004PopUpCtrl:OnClickBtnRewardItem(btn, index)
|
||||
UTILS.ClickItemGridWithTips(self.tbItemReward[index], self._mapNode.btnRewardItem[index].transform, true, true, false)
|
||||
end
|
||||
function ActivityReengagement_101004PopUpCtrl:OnBtnClick_Welcome()
|
||||
local cb = function()
|
||||
self:OnBtnClick_Goto()
|
||||
end
|
||||
PlayerData.Reengagement:RequestReceiveReunionReward(cb)
|
||||
end
|
||||
return ActivityReengagement_101004PopUpCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local ActivityReengagementPopUpPanel = class("ActivityReengagementPopUpPanel", BasePanel)
|
||||
ActivityReengagementPopUpPanel._bIsMainPanel = false
|
||||
ActivityReengagementPopUpPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "ActivityList/ActivityPopUpPanel.prefab",
|
||||
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementPopUpCtrl"
|
||||
}
|
||||
}
|
||||
function ActivityReengagementPopUpPanel:Awake()
|
||||
end
|
||||
function ActivityReengagementPopUpPanel:OnEnable()
|
||||
end
|
||||
function ActivityReengagementPopUpPanel:OnAfterEnter()
|
||||
end
|
||||
function ActivityReengagementPopUpPanel:OnDisable()
|
||||
end
|
||||
function ActivityReengagementPopUpPanel:OnDestroy()
|
||||
end
|
||||
function ActivityReengagementPopUpPanel:OnRelease()
|
||||
end
|
||||
return ActivityReengagementPopUpPanel
|
||||
@@ -25,6 +25,8 @@ ReengagementBDPreviewCtrl._mapNodeConfig = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_WorldClass_Level"
|
||||
},
|
||||
txtLevel = {sComponentName = "TMP_Text"},
|
||||
imgExpBar = {sComponentName = "Image"},
|
||||
svAll = {
|
||||
sComponentName = "LoopScrollView"
|
||||
}
|
||||
@@ -41,15 +43,26 @@ function ReengagementBDPreviewCtrl:OpenPanel()
|
||||
self:InitPanel()
|
||||
self._mapNode.animRoot:Play("t_window_04_t_in")
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function ReengagementBDPreviewCtrl:InitPanel()
|
||||
self.tbLevelInterval = {}
|
||||
local foreachData = function(mapData)
|
||||
table.insert(self.tbLevelInterval, mapData)
|
||||
end
|
||||
ForEachTableLine(ConfigTable.GetData("ReengagementBDTrial"), foreachData)
|
||||
ForEachTableLine(ConfigTable.Get("ActivityReturneeTrialBuildGroup"), foreachData)
|
||||
table.sort(self.tbLevelInterval, function(a, b)
|
||||
return a.LevelMin < b.LevelMin
|
||||
end)
|
||||
self.nWorldLevel = PlayerData.Base:GetWorldClass()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel, self.nWorldLevel)
|
||||
local nCurExp = PlayerData.Base:GetWorldExp()
|
||||
local mapCfg = ConfigTable.GetData("WorldClass", self.nWorldLevel + 1, true)
|
||||
local nFullExp = 0
|
||||
if mapCfg ~= nil then
|
||||
nFullExp = mapCfg.Exp
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgExpBar, nCurExp / nFullExp)
|
||||
end
|
||||
self._mapNode.svAll:Init(#self.tbLevelInterval, self, self.OnGridRefresh)
|
||||
end
|
||||
function ReengagementBDPreviewCtrl:OnGridRefresh(goGrid, nGridIndex)
|
||||
@@ -58,7 +71,7 @@ function ReengagementBDPreviewCtrl:OnGridRefresh(goGrid, nGridIndex)
|
||||
local imgOnBg = goGrid.transform:Find("imgOnBg").gameObject
|
||||
local imgOffBg = goGrid.transform:Find("imgOffBg").gameObject
|
||||
local imgSelect = goGrid.transform:Find("imgSelect").gameObject
|
||||
if self.nWorldLevel >= mapData.MinLevel and self.nWorldLevel <= mapData.MaxLevel then
|
||||
if self.nWorldLevel >= mapData.LevelMin and (mapData.LevelMax == -1 or self.nWorldLevel <= mapData.LevelMax) then
|
||||
imgOnBg:SetActive(true)
|
||||
imgOffBg:SetActive(false)
|
||||
imgSelect:SetActive(true)
|
||||
@@ -69,13 +82,20 @@ function ReengagementBDPreviewCtrl:OnGridRefresh(goGrid, nGridIndex)
|
||||
end
|
||||
local txtDesc = goGrid.transform:Find("txtDesc"):GetComponent("TMP_Text")
|
||||
if txtDesc ~= nil then
|
||||
local nLevelMin = math.max(1, mapData.LevelMin)
|
||||
local nLevelMax = PlayerData.Base:GetMaxWorldClass()
|
||||
if mapData.LevelMax ~= -1 then
|
||||
nLevelMax = math.min(nLevelMax, mapData.LevelMax)
|
||||
end
|
||||
local sText = ConfigTable.GetUIText("Reengagement_BDTrialPreview_WorldClass")
|
||||
sText = sText .. mapData.MinLevel .. "~" .. mapData.MaxLevel
|
||||
sText = sText .. nLevelMin .. "~" .. nLevelMax
|
||||
NovaAPI.SetTMPText(txtDesc, sText)
|
||||
end
|
||||
local imgIcon = goGrid.transform:Find("imgIcon"):GetComponent("Image")
|
||||
if imgIcon ~= nil then
|
||||
self:SetPngSprite(imgIcon, mapData.Icon)
|
||||
local rank = PlayerData.Build:CalBuildRank(mapData.Score)
|
||||
local sScore = "Icon/BuildRank/BuildRank_" .. rank.Id
|
||||
self:SetPngSprite(imgIcon, sScore)
|
||||
end
|
||||
end
|
||||
function ReengagementBDPreviewCtrl:ClosePanel()
|
||||
|
||||
@@ -17,14 +17,10 @@ ReengagementBDPreviewItemCtrl._mapNodeConfig = {
|
||||
imgCharFrame = {nCount = 3, sComponentName = "Image"},
|
||||
txtPotentialCount = {nCount = 3, sComponentName = "TMP_Text"},
|
||||
imgCharElement = {nCount = 3, sComponentName = "Image"},
|
||||
txtChar = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "StarTower_Build_Char_Title"
|
||||
},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
txtRating = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "StarTower_Build_Rating"
|
||||
sLanguageId = "Template_Score"
|
||||
}
|
||||
}
|
||||
ReengagementBDPreviewItemCtrl._mapEventConfig = {}
|
||||
@@ -54,7 +50,7 @@ function ReengagementBDPreviewItemCtrl:RefreshChar()
|
||||
local mapCharData = self.mapBuildData.tbChar[i]
|
||||
local nCharTid = mapCharData ~= nil and mapCharData.nTid or 0
|
||||
local mapCharCfg = 0 < nCharTid and ConfigTable.GetData_Character(nCharTid) or nil
|
||||
local nCharSkinId = 0 < nCharTid and PlayerData.Char:GetCharSkinId(nCharTid) or 0
|
||||
local nCharSkinId = 0 < nCharTid and PlayerData.Build:GetBuildCharSkinId(self.mapBuildData, mapCharData) or 0
|
||||
local mapCharSkin = 0 < nCharSkinId and ConfigTable.GetData_CharacterSkin(nCharSkinId) or nil
|
||||
local bShowChar = mapCharCfg ~= nil and mapCharSkin ~= nil
|
||||
self._mapNode.imgCharIcon[i].gameObject:SetActive(bShowChar)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
local ReengagementBDTrialCtrl = class("ReengagementBDTrialCtrl", BaseCtrl)
|
||||
local TimerManager = CS.TimerManager.Instance
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
ReengagementBDTrialCtrl._mapNodeConfig = {
|
||||
txtActName = {
|
||||
sComponentName = "TMP_Text",
|
||||
@@ -15,30 +17,72 @@ ReengagementBDTrialCtrl._mapNodeConfig = {
|
||||
goInstanceItem = {
|
||||
nCount = 6,
|
||||
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementBDPreviewItemCtrl"
|
||||
}
|
||||
},
|
||||
txtTime = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
ReengagementBDTrialCtrl._mapEventConfig = {}
|
||||
function ReengagementBDTrialCtrl:Refresh(nCurTog)
|
||||
if nCurTog ~= AllEnum.ReengagementTog.BDTrial then
|
||||
return
|
||||
end
|
||||
self:RefreshTrialItems()
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
end
|
||||
function ReengagementBDTrialCtrl:RefreshTrialItems()
|
||||
self.nWorldLevel = PlayerData.Base:GetWorldClass()
|
||||
self.mapTrialBuildData = {}
|
||||
local foreachMapData = function(mapData)
|
||||
if self.nWorldLevel >= mapData.MinLevel and self.nWorldLevel <= mapData.MaxLevel then
|
||||
self.mapTrialBuildData = mapData
|
||||
end
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("ReengagementBDTrial"), foreachMapData)
|
||||
if self.mapTrialBuildData == {} then
|
||||
return
|
||||
end
|
||||
self.tbBuildIds = self.mapTrialBuildData.BuildIds
|
||||
self.tbBuildIds = PlayerData.Reengagement:GetLimitedTrialBuildList()
|
||||
for k, nBuildId in ipairs(self.tbBuildIds) do
|
||||
local itemCtrl = self.goInstanceItem[k]
|
||||
local itemCtrl = self._mapNode.goInstanceItem[k]
|
||||
itemCtrl:Refresh(nBuildId)
|
||||
end
|
||||
end
|
||||
function ReengagementBDTrialCtrl:RefreshRemainTime()
|
||||
local endTime = PlayerData.Reengagement:GetReengagementCloseTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ReengagementPanel)
|
||||
end
|
||||
})
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
|
||||
end
|
||||
return ReengagementBDTrialCtrl
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
local ReengagementCtrl = class("ReengagementCtrl", BaseCtrl)
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
local nTogCount = 5
|
||||
ReengagementCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
svTog = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
@@ -56,21 +61,80 @@ ReengagementCtrl._mapNodeConfig = {
|
||||
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementBDPreviewCtrl"
|
||||
}
|
||||
}
|
||||
ReengagementCtrl._mapEventConfig = {}
|
||||
ReengagementCtrl._mapEventConfig = {
|
||||
[EventId.IsNewDay] = "OnEvent_NewDay"
|
||||
}
|
||||
local mapReddotKey = {
|
||||
[1] = RedDotDefine.Activity_Reengagement_LoginReward,
|
||||
[2] = RedDotDefine.Activity_Reengagement_Task,
|
||||
[4] = RedDotDefine.Activity_Reengagement_WeeklyCard
|
||||
}
|
||||
function ReengagementCtrl:ClearTogCtrl()
|
||||
if self.ctrlTog == nil then
|
||||
self.ctrlTog = {}
|
||||
return
|
||||
end
|
||||
for nInstanceID, objCtrl in pairs(self.ctrlTog) do
|
||||
objCtrl:UnRegisterReddot()
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.ctrlTog[nInstanceID] = nil
|
||||
end
|
||||
end
|
||||
function ReengagementCtrl:InitTog()
|
||||
self._mapNode.svTog:Init(5, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
self:ClearTogCtrl()
|
||||
if self.nCurTog == nil or self.nCurTog < 1 or self.nCurTog > nTogCount then
|
||||
self.nCurTog = self:GetDefaultTog()
|
||||
end
|
||||
self._mapNode.svTog:Init(nTogCount, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
end
|
||||
function ReengagementCtrl:GetDefaultTog()
|
||||
for nIndex = 1, nTogCount do
|
||||
local sReddotKey = mapReddotKey[nIndex]
|
||||
if sReddotKey ~= nil and RedDotManager.GetValid(sReddotKey, {
|
||||
self.nActId
|
||||
}) then
|
||||
return nIndex
|
||||
end
|
||||
end
|
||||
local mapLoginReward = PlayerData.Reengagement:GetActLoginRewardList()
|
||||
if mapLoginReward == nil or (tonumber(mapLoginReward.Actual) or 0) < 7 then
|
||||
return 1
|
||||
end
|
||||
for nDay = 1, 7 do
|
||||
local tbQuestConfig = PlayerData.Reengagement:GetQuestConfigDataByGroup(100 + nDay)
|
||||
if #tbQuestConfig == 0 then
|
||||
return 2
|
||||
end
|
||||
for _, mapQuestConfig in ipairs(tbQuestConfig) do
|
||||
local mapQuest = PlayerData.Reengagement:GetQuestDataById(mapQuestConfig.Id)
|
||||
if mapQuest == nil or mapQuest.nStatus ~= 1 and mapQuest.nStatus ~= 2 then
|
||||
return 2
|
||||
end
|
||||
end
|
||||
end
|
||||
if 0 < PlayerData.Reengagement:GetDoubleDropCount() then
|
||||
return 3
|
||||
end
|
||||
return 1
|
||||
end
|
||||
function ReengagementCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceID = goGrid:GetInstanceID()
|
||||
if not self.ctrlTog[nInstanceID] then
|
||||
self.ctrlTog[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.TemplateEx.TemplateToggleCtrl")
|
||||
self.ctrlTog[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Activity.Reengagement.TemplateToggleReengagementCtrl")
|
||||
end
|
||||
local mapCfg = ConfigTable.GetUIText("ReengagementTog_" .. nIndex)
|
||||
if mapCfg then
|
||||
self.ctrlTog[nInstanceID]:SetText(mapCfg)
|
||||
end
|
||||
self.ctrlTog[nInstanceID]:SetDefault(nIndex == self.nCurTog)
|
||||
local sReddotKey = mapReddotKey[nIndex]
|
||||
self.ctrlTog[nInstanceID]:SetReddot(sReddotKey, {
|
||||
self.nActId
|
||||
})
|
||||
if self.nCurTog == nIndex then
|
||||
self.ctrlTog[nInstanceID]:SetTrigger(true)
|
||||
end
|
||||
end
|
||||
function ReengagementCtrl:OnGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
@@ -78,27 +142,35 @@ function ReengagementCtrl:OnGridBtnClick(goGrid, gridIndex)
|
||||
if nIndex == self.nCurTog then
|
||||
return
|
||||
end
|
||||
self.ctrlTog[nInstanceID]:SetTrigger(true)
|
||||
if self.nCurTog then
|
||||
if self.ctrlTog[nInstanceID] ~= nil then
|
||||
self.ctrlTog[nInstanceID]:SetTrigger(true)
|
||||
end
|
||||
if self.nCurTog ~= nil and self.nCurTog > 0 then
|
||||
local goSelect = self._mapNode.trSvTog:Find("Viewport/Content/" .. self.nCurTog - 1)
|
||||
if goSelect then
|
||||
self.ctrlTog[goSelect.gameObject:GetInstanceID()]:SetTrigger(false)
|
||||
local objCurTog = self.ctrlTog[goSelect.gameObject:GetInstanceID()]
|
||||
if objCurTog ~= nil then
|
||||
objCurTog:SetTrigger(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
self.nCurTog = nIndex
|
||||
self:SwitchTog()
|
||||
self:SwitchTog(self._bInfoReady == true)
|
||||
end
|
||||
function ReengagementCtrl:SwitchTog()
|
||||
self._mapNode.rtSignin:SetActive(self.nCurTog == 1)
|
||||
self._mapNode.rtTask:SetActive(self.nCurTog == 2)
|
||||
self._mapNode.rtDoubleDrop:SetActive(self.nCurTog == 3)
|
||||
self._mapNode.rtShopMall:SetActive(self.nCurTog == 4)
|
||||
self._mapNode.rtBDTrial:SetActive(self.nCurTog == 5)
|
||||
self.ctrlSignin:Refresh(self.nCurTog)
|
||||
self.ctrlTask:Refresh(self.nCurTog)
|
||||
self.ctrlDoubleDrop:Refresh(self.nCurTog)
|
||||
self.ctrlShopMall:Refresh(self.nCurTog)
|
||||
self.ctrlBDTrial:Refresh(self.nCurTog)
|
||||
function ReengagementCtrl:SwitchTog(bRefreshData)
|
||||
self._mapNode.rtSignin.gameObject:SetActive(self.nCurTog == 1)
|
||||
self._mapNode.rtTask.gameObject:SetActive(self.nCurTog == 2)
|
||||
self._mapNode.rtDoubleDrop.gameObject:SetActive(self.nCurTog == 3)
|
||||
self._mapNode.rtShopMall.gameObject:SetActive(self.nCurTog == 4)
|
||||
self._mapNode.rtBDTrial.gameObject:SetActive(self.nCurTog == 5)
|
||||
if bRefreshData ~= true then
|
||||
return
|
||||
end
|
||||
self._mapNode.ctrlSignin:Refresh(self.nCurTog)
|
||||
self._mapNode.ctrlTask:Refresh(self.nCurTog)
|
||||
self._mapNode.ctrlDoubleDrop:Refresh(self.nCurTog)
|
||||
self._mapNode.ctrlShopMall:Refresh(self.nCurTog)
|
||||
self._mapNode.ctrlBDTrial:Refresh(self.nCurTog)
|
||||
end
|
||||
local nMaxEnergyBatteryFillerLength = 252
|
||||
local nMinEnergyBatteryFillerLength = 15
|
||||
@@ -115,23 +187,65 @@ function ReengagementCtrl:RefreshEnergyBattery()
|
||||
self._mapNode.imgEnergyBarFill.sizeDelta = Vector2(nFillerLength, self._mapNode.imgEnergyBarFill.sizeDelta.y)
|
||||
end
|
||||
function ReengagementCtrl:Awake()
|
||||
self.ctrlTog = {}
|
||||
if self._bInfoReady == nil then
|
||||
self._bInfoReady = false
|
||||
end
|
||||
end
|
||||
function ReengagementCtrl:FadeIn()
|
||||
end
|
||||
function ReengagementCtrl:FadeOut()
|
||||
end
|
||||
function ReengagementCtrl:OnEnable()
|
||||
self.nCurTog = 1
|
||||
self:SwitchTog()
|
||||
local nActId = PlayerData.Reengagement:GetActId()
|
||||
local nOpenTime = PlayerData.Reengagement:GetReengagementOpenTime()
|
||||
if self.nActId ~= nActId or self._nActOpenTime ~= nOpenTime then
|
||||
self._bInfoReady = false
|
||||
self.nCurTog = 0
|
||||
self._panel.nSelectGroup = nil
|
||||
end
|
||||
self.nActId = nActId
|
||||
self._nActOpenTime = nOpenTime
|
||||
self.nCurTog = self.nCurTog or 0
|
||||
self._mapNode.svTog.gameObject:SetActive(false)
|
||||
self:SwitchTog(false)
|
||||
self:RefreshEnergyBattery()
|
||||
local init = function()
|
||||
self._bInfoReady = true
|
||||
if self._panel == nil or self._panel._bIsActive ~= true then
|
||||
return
|
||||
end
|
||||
self._mapNode.svTog.gameObject:SetActive(true)
|
||||
self:InitTog()
|
||||
self:SwitchTog(true)
|
||||
end
|
||||
if self._bInfoReady == false then
|
||||
PlayerData.Reengagement:RequestReengagementInfo(init)
|
||||
else
|
||||
init()
|
||||
end
|
||||
end
|
||||
function ReengagementCtrl:OnDisable()
|
||||
self:ClearTogCtrl()
|
||||
end
|
||||
function ReengagementCtrl:OnDestroy()
|
||||
end
|
||||
function ReengagementCtrl:OnRelease()
|
||||
end
|
||||
function ReengagementCtrl:OnClickTrialDetail()
|
||||
self.ReengagementPreviewPanel:OpenPanel()
|
||||
self._mapNode.ReengagementPreviewPanel:OpenPanel()
|
||||
end
|
||||
function ReengagementCtrl:OnEvent_NewDay()
|
||||
if PanelManager.GetCurPanelId() == PanelId.MainView then
|
||||
EventManager.Hit("NewDay_Clear_Guide")
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Alert_NextDay"),
|
||||
callbackConfirm = function()
|
||||
PanelManager.Home()
|
||||
end
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
end
|
||||
return ReengagementCtrl
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
local ClientManager = CS.ClientManager.Instance
|
||||
local ReengagementDoubleDropCtrl = class("ReengagementDoubleDropCtrl", BaseCtrl)
|
||||
ReengagementDoubleDropCtrl._mapNodeConfig = {
|
||||
txtActName = {
|
||||
@@ -30,8 +31,7 @@ ReengagementDoubleDropCtrl._mapNodeConfig = {
|
||||
nCount = 4,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Double_Drops_Goto_Instance"
|
||||
},
|
||||
redDotQuest = {}
|
||||
}
|
||||
}
|
||||
ReengagementDoubleDropCtrl._mapEventConfig = {}
|
||||
function ReengagementDoubleDropCtrl:Refresh(nCurTog)
|
||||
@@ -40,10 +40,15 @@ function ReengagementDoubleDropCtrl:Refresh(nCurTog)
|
||||
end
|
||||
self:InitActData()
|
||||
end
|
||||
local tbInstanceToFunc = {
|
||||
[GameEnum.instanceType.DailyInstance] = GameEnum.OpenFuncType.DailyInstance,
|
||||
[GameEnum.instanceType.RegionBoss] = GameEnum.OpenFuncType.RegionBoss,
|
||||
[GameEnum.instanceType.SkillInstance] = GameEnum.OpenFuncType.SkillInstance,
|
||||
[GameEnum.instanceType.CharGemInstance] = GameEnum.OpenFuncType.CharGemInstance
|
||||
}
|
||||
function ReengagementDoubleDropCtrl:InitActData()
|
||||
self.actData = {}
|
||||
self.nActId = 0
|
||||
self.tbFuncType = self.actData:GetDoubleFuncType()
|
||||
self.tbFuncType = PlayerData.Reengagement:GetDoubleFuncType()
|
||||
if self.tbFuncType == nil then
|
||||
return
|
||||
end
|
||||
@@ -51,13 +56,14 @@ function ReengagementDoubleDropCtrl:InitActData()
|
||||
for k, v in ipairs(self._mapNode.goInstanceItem) do
|
||||
v.gameObject:SetActive(self.tbFuncType[k] ~= nil)
|
||||
if self.tbFuncType[k] ~= nil then
|
||||
v:InitItem(self.tbFuncType[k])
|
||||
local bUnlock = PlayerData.Base:CheckFunctionUnlock(self.tbFuncType[k])
|
||||
local nFuncType = tbInstanceToFunc[self.tbFuncType[k]]
|
||||
v:InitItem(nFuncType)
|
||||
local bUnlock = PlayerData.Base:CheckFunctionUnlock(nFuncType)
|
||||
self._mapNode.btnGoto[k].gameObject:SetActive(bUnlock)
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDoubleCount, self.actData:GetDropActString())
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_DoubleDrop_Quest, self.nActId, self._mapNode.redDotQuest)
|
||||
local sText = ConfigTable.GetUIText("Reengagement_DoubleDrop_Count") .. PlayerData.Reengagement:GetDoubleDropCount() .. "/" .. PlayerData.Reengagement:GetMaxDoubleDropCount()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDoubleCount, sText)
|
||||
end
|
||||
function ReengagementDoubleDropCtrl:GetTimeStr(nRemainTime)
|
||||
local sTimeStr = ""
|
||||
@@ -96,8 +102,8 @@ function ReengagementDoubleDropCtrl:StartActTimer()
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
end
|
||||
local nOpenTime = self.actData:GetActOpenTime()
|
||||
local nCloseTime = self.actData:GetActEndTime()
|
||||
local nOpenTime = PlayerData.Reengagement:GetReengagementOpenTime()
|
||||
local nCloseTime = PlayerData.Reengagement:GetReengagementCloseTime()
|
||||
local refreshTime = function()
|
||||
local nCurTime = ClientManager.serverTimeStamp
|
||||
local sTime = ""
|
||||
@@ -110,6 +116,13 @@ function ReengagementDoubleDropCtrl:StartActTimer()
|
||||
if nRemainTime <= 0 and self.timer ~= nil then
|
||||
self.timer:Cancel()
|
||||
self.timer = nil
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ReengagementPanel)
|
||||
end
|
||||
})
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTime, sTime)
|
||||
end
|
||||
@@ -133,13 +146,13 @@ function ReengagementDoubleDropCtrl:OnBtnClick_Goto(btn, nIndex)
|
||||
if nType == nil then
|
||||
return
|
||||
end
|
||||
if nType == GameEnum.OpenFuncType.DailyInstance then
|
||||
if nType == GameEnum.instanceType.DailyInstance then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DailyInstanceLevelSelect, 0, 0, true)
|
||||
elseif nType == GameEnum.OpenFuncType.RegionBoss then
|
||||
elseif nType == GameEnum.instanceType.RegionBoss then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.RogueBossLevel, 0, 0, true)
|
||||
elseif nType == GameEnum.OpenFuncType.SkillInstance then
|
||||
elseif nType == GameEnum.instanceType.SkillInstance then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SkillInstanceLevelSelect)
|
||||
elseif nType == GameEnum.OpenFuncType.CharGemInstance then
|
||||
elseif nType == GameEnum.instanceType.CharGemInstance then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.EquipmentInstanceLevelSelect)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,14 +8,8 @@ ReengagementMallCtrl._mapNodeConfig = {
|
||||
},
|
||||
txtLabelValue = {sComponentName = "TMP_Text"},
|
||||
txtRemainDay = {sComponentName = "TMP_Text"},
|
||||
txtWeeklyCardName = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_WeeklyCardName"
|
||||
},
|
||||
txtWeeklyCardDesc = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_WeeklyCardDesc"
|
||||
},
|
||||
txtWeeklyCardName = {sComponentName = "TMP_Text"},
|
||||
txtWeeklyCardDesc = {sComponentName = "TMP_Text"},
|
||||
txtGetNow = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_GetNow"
|
||||
@@ -24,10 +18,18 @@ ReengagementMallCtrl._mapNodeConfig = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_GetDaily"
|
||||
},
|
||||
btnBuyWeeklyCard = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_BuyWeeklyCard"
|
||||
},
|
||||
txtBtnBuy = {sComponentName = "TMP_Text"},
|
||||
txtBtnReceiveWeeklyCard = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_Receive_Btn_Text"
|
||||
},
|
||||
txtAlreadyReceived = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_AlreadyReceived"
|
||||
sLanguageId = "CharPlot_Task_Received"
|
||||
},
|
||||
btnReceiveWeeklyCard = {
|
||||
sComponentName = "UIButton",
|
||||
@@ -41,6 +43,7 @@ ReengagementMallCtrl._mapNodeConfig = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnMallItem = {nCount = 3, sComponentName = "UIButton"},
|
||||
txtBannerTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Reengagement_Mall_BannerTitle"
|
||||
@@ -70,15 +73,26 @@ ReengagementMallCtrl._mapNodeConfig = {
|
||||
imgPointBg = {nCount = 10},
|
||||
PkgItem = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Mall.MallPackageItemCtrl"
|
||||
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementMallPackageItemCtrl"
|
||||
}
|
||||
}
|
||||
ReengagementMallCtrl._mapEventConfig = {}
|
||||
ReengagementMallCtrl._mapEventConfig = {
|
||||
MallOrderClear = "OnEvent_MallOrderClear",
|
||||
RefreshReengagementWeeklyCard = "OnEvent_RefreshReengagementWeeklyCard"
|
||||
}
|
||||
function ReengagementMallCtrl:OnEnable()
|
||||
self.tbPackagePage = {}
|
||||
self.actData = {}
|
||||
self.tbBannerInitPos = {}
|
||||
for _, v in ipairs(self._mapNode.activityBannerItem) do
|
||||
self.nBannerWidth = v.sizeDelta.x
|
||||
table.insert(self.tbBannerInitPos, v.anchoredPosition)
|
||||
end
|
||||
self.nBannerInterval = ConfigTable.GetConfigNumber("Activity_Banner_Interval_Time")
|
||||
end
|
||||
function ReengagementMallCtrl:OnDisable()
|
||||
self._mapNode.btnMallItem[1].onClick:RemoveAllListeners()
|
||||
self._mapNode.btnMallItem[2].onClick:RemoveAllListeners()
|
||||
self._mapNode.btnMallItem[3].onClick:RemoveAllListeners()
|
||||
self:ResetTimer()
|
||||
end
|
||||
function ReengagementMallCtrl:Refresh(nCurTog)
|
||||
@@ -90,22 +104,75 @@ function ReengagementMallCtrl:Refresh(nCurTog)
|
||||
self:RefreshPkgItem()
|
||||
end
|
||||
function ReengagementMallCtrl:RefreshWeeklyCard()
|
||||
local mapWeeklyCardCfg = self.actData:GetWeeklyCardData()
|
||||
local mapWeeklyCardData = {}
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLabelValue, "")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtWeeklyCardDesc, "")
|
||||
self._mapNode.btnReceiveWeeklyCard.gameObject:SetActive(true)
|
||||
self._mapNode.btnAlreadyReceived.gameObject:SetActive(true)
|
||||
self._mapNode.MallItem[1]:SetItem()
|
||||
self._mapNode.MallItem[2]:SetItem()
|
||||
self._mapNode.MallItem[3]:SetItem()
|
||||
local mapWeeklyCard = PlayerData.Reengagement:GetWeeklyCardData()
|
||||
local nActId = PlayerData.Reengagement:GetActId()
|
||||
local bHasWeeklyCard = mapWeeklyCard.Id ~= nil and mapWeeklyCard.Id ~= ""
|
||||
local foreach = function(mapData)
|
||||
if mapData ~= nil and mapData.ReturneeId == nActId then
|
||||
self.mapCurWeeklyCard = mapData
|
||||
end
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("ActivityReturneeCard"), foreach)
|
||||
local sCanBuy = ConfigTable.GetUIText("Mall_Package_LimitTitle") .. ":1/1"
|
||||
local sOut = ConfigTable.GetUIText("Mall_Package_SoldOut")
|
||||
local bDisabled = mapWeeklyCard.Received or mapWeeklyCard.Remaining <= 0
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLabelValue, bHasWeeklyCard and sOut or sCanBuy)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtWeeklyCardDesc, self.mapCurWeeklyCard.Desc)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtWeeklyCardName, self.mapCurWeeklyCard.Name)
|
||||
self._mapNode.btnReceiveWeeklyCard.gameObject:SetActive(not bDisabled and bHasWeeklyCard)
|
||||
self._mapNode.btnAlreadyReceived.gameObject:SetActive(bDisabled and bHasWeeklyCard)
|
||||
self._mapNode.btnBuyWeeklyCard.gameObject:SetActive(not bHasWeeklyCard)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnBuy, self.mapCurWeeklyCard.ShowPrice)
|
||||
if bHasWeeklyCard then
|
||||
local sRemain = orderedFormat(ConfigTable.GetUIText("Mall_MonthlyCard_RemainDay") or "", mapWeeklyCard.Remaining)
|
||||
local sReceived = ""
|
||||
if mapWeeklyCard.Received then
|
||||
sReceived = ConfigTable.GetUIText("Mall_MonthlyCard_Received")
|
||||
else
|
||||
sReceived = ConfigTable.GetUIText("Mall_MonthlyCard_Unreceived")
|
||||
end
|
||||
local sToday = "<color=#08D3D4>" .. sReceived .. "</color>"
|
||||
if mapWeeklyCard.Remaining > 0 then
|
||||
sRemain = sRemain .. " " .. sToday
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRemainDay, sRemain)
|
||||
end
|
||||
self._mapNode.txtRemainDay.gameObject:SetActive(bHasWeeklyCard)
|
||||
self._mapNode.MallItem[1]:SetItem(self.mapCurWeeklyCard.BaseItemId, nil, self.mapCurWeeklyCard.BaseItemQty)
|
||||
self._mapNode.MallItem[2]:SetItem(self.mapCurWeeklyCard.DailyItemId1, nil, self.mapCurWeeklyCard.DailyItemQty1)
|
||||
self._mapNode.MallItem[3]:SetItem(self.mapCurWeeklyCard.DailyItemId2, nil, self.mapCurWeeklyCard.DailyItemQty2)
|
||||
self._mapNode.btnMallItem[1].onClick:RemoveAllListeners()
|
||||
self._mapNode.btnMallItem[2].onClick:RemoveAllListeners()
|
||||
self._mapNode.btnMallItem[3].onClick:RemoveAllListeners()
|
||||
self._mapNode.btnMallItem[1].onClick:AddListener(function()
|
||||
UTILS.ClickItemGridWithTips(self.mapCurWeeklyCard.BaseItemId, self._mapNode.btnMallItem[1].transform, true, true, false)
|
||||
end)
|
||||
self._mapNode.btnMallItem[2].onClick:AddListener(function()
|
||||
UTILS.ClickItemGridWithTips(self.mapCurWeeklyCard.DailyItemId1, self._mapNode.btnMallItem[2].transform, true, true, false)
|
||||
end)
|
||||
self._mapNode.btnMallItem[3].onClick:AddListener(function()
|
||||
UTILS.ClickItemGridWithTips(self.mapCurWeeklyCard.DailyItemId2, self._mapNode.btnMallItem[3].transform, true, true, false)
|
||||
end)
|
||||
end
|
||||
function ReengagementMallCtrl:RefreshPkgItem()
|
||||
local nActId = PlayerData.Reengagement:GetActId()
|
||||
self.tbPackagePage = {}
|
||||
local foreach = function(mapData)
|
||||
if mapData ~= nil and mapData.ReturneeId == nActId then
|
||||
table.insert(self.tbPackagePage, mapData)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("ActivityReturneePack"), foreach)
|
||||
table.sort(self.tbPackagePage, function(a, b)
|
||||
return a.Sort < b.Sort
|
||||
end)
|
||||
local tbPurchasedBundles = PlayerData.Reengagement:GetPurchasedBundles()
|
||||
for i = 1, 3 do
|
||||
local mapData = self.tbPackagePage[i]
|
||||
if mapData ~= nil then
|
||||
local bPurchased = table.indexof(tbPurchasedBundles, mapData.Id) > 0
|
||||
self._mapNode.PkgItem[i].gameObject:SetActive(true)
|
||||
self._mapNode.PkgItem[i]:Refresh(mapData)
|
||||
self._mapNode.PkgItem[i]:RefreshReengagement(mapData, bPurchased)
|
||||
else
|
||||
self._mapNode.PkgItem[i].gameObject:SetActive(false)
|
||||
end
|
||||
@@ -122,7 +189,7 @@ function ReengagementMallCtrl:SetBanner()
|
||||
for _, v in ipairs(self._mapNode.imgPointBg) do
|
||||
v.gameObject:SetActive(false)
|
||||
end
|
||||
for k, v in ipairs(self.tbBannerList) do
|
||||
for k, v in pairs(self.tbBannerList) do
|
||||
if nil ~= self._mapNode.imgPointBg[k] then
|
||||
self._mapNode.imgPointBg[k]:SetActive(true)
|
||||
self._mapNode.imgPointBg[k].transform:Find("imgPoint").gameObject:SetActive(false)
|
||||
@@ -135,216 +202,6 @@ function ReengagementMallCtrl:SetBanner()
|
||||
self:StartActBannerTimer()
|
||||
self._mapNode.eventActBannerDrag.enabled = #self.tbBannerList > 1
|
||||
end
|
||||
function ReengagementMallCtrl:AddActivityBanner()
|
||||
local tb_activityBanner = PlayerData.Activity:GetActivityBannerList()
|
||||
for _, value in ipairs(tb_activityBanner) do
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = value:GetActId(),
|
||||
nType = GameEnum.bannerType.Activity,
|
||||
actData = value,
|
||||
nFuncType = GameEnum.OpenFuncType.Activity
|
||||
})
|
||||
end
|
||||
end
|
||||
function ReengagementMallCtrl:AddOtherBanner()
|
||||
local nNextOpenTime = 0
|
||||
local nNextCloseTime = 0
|
||||
local nCurTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
local forEachMap = function(mapLineData)
|
||||
if mapLineData.BannerType == GameEnum.bannerType.OpenFunc then
|
||||
local funcNum = tonumber(mapLineData.Param1)
|
||||
if funcNum == nil then
|
||||
return
|
||||
end
|
||||
local bUnlock = PlayerData.Base:CheckFunctionUnlock(funcNum, false)
|
||||
if bUnlock then
|
||||
local jumpToNum = tonumber(mapLineData.Param2)
|
||||
if jumpToNum == nil then
|
||||
return
|
||||
end
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.OpenFunc,
|
||||
sBanner = mapLineData.bannerName,
|
||||
nJumpTo = jumpToNum,
|
||||
nFuncType = funcNum
|
||||
})
|
||||
end
|
||||
elseif mapLineData.BannerType == GameEnum.bannerType.Community then
|
||||
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
|
||||
local channelName = CS.ClientConfig.ClientPublishChannelName
|
||||
if SDKManager:IsSDKInit() and clientPublishRegion == CS.ClientPublishRegion.CN and (channelName == "Official" or channelName == "TEST_1" or channelName == "Taptap") then
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.Community,
|
||||
sBanner = mapLineData.bannerName
|
||||
})
|
||||
end
|
||||
elseif mapLineData.BannerType == GameEnum.bannerType.Payment then
|
||||
if not NovaAPI.IsReviewServerEnv() then
|
||||
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
|
||||
local channelName = CS.ClientConfig.ClientPublishChannelName
|
||||
if SDKManager:IsSDKInit() and clientPublishRegion == CS.ClientPublishRegion.CN and (channelName == "Official" or channelName == "TEST_1" or channelName == "Taptap" or channelName == "TEST_2") then
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.Payment,
|
||||
sBanner = mapLineData.bannerName
|
||||
})
|
||||
end
|
||||
end
|
||||
elseif mapLineData.BannerType == GameEnum.bannerType.Mall or mapLineData.BannerType == GameEnum.bannerType.MallSkin then
|
||||
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
|
||||
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
|
||||
if nOpenTime <= nCurTime and nCloseTime >= nCurTime then
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = mapLineData.BannerType,
|
||||
sBanner = mapLineData.bannerName,
|
||||
sParam = mapLineData.Param3
|
||||
})
|
||||
if nCloseTime < nNextCloseTime or nNextCloseTime == 0 then
|
||||
nNextCloseTime = nCloseTime
|
||||
end
|
||||
elseif nOpenTime > nCurTime and (nOpenTime < nNextOpenTime or nNextOpenTime == 0) then
|
||||
nNextOpenTime = nOpenTime
|
||||
end
|
||||
elseif mapLineData.BannerType == GameEnum.bannerType.TimeLimit_Func then
|
||||
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
|
||||
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
|
||||
local nJumpToId = tonumber(mapLineData.Param3)
|
||||
local nFuncType = tonumber(mapLineData.Param4)
|
||||
if nFuncType == nil or nJumpToId == nil then
|
||||
return
|
||||
end
|
||||
local bUnlock = PlayerData.Base:CheckFunctionUnlock(nFuncType, false)
|
||||
if bUnlock and nOpenTime <= nCurTime and nCloseTime >= nCurTime then
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.TimeLimit_Func,
|
||||
sBanner = mapLineData.bannerName,
|
||||
nJumpTo = nJumpToId,
|
||||
nFuncType = nFuncType
|
||||
})
|
||||
if nCloseTime < nNextCloseTime or nNextCloseTime == 0 then
|
||||
nNextCloseTime = nCloseTime
|
||||
end
|
||||
elseif nOpenTime > nCurTime and (nOpenTime < nNextOpenTime or nNextOpenTime == 0) then
|
||||
nNextOpenTime = nOpenTime
|
||||
end
|
||||
elseif mapLineData.BannerType == GameEnum.bannerType.JumpToUrl then
|
||||
if NovaAPI.IsReviewServerEnv() and mapLineData.Param6 == "1" then
|
||||
return
|
||||
end
|
||||
local sUrl = mapLineData.Param3
|
||||
if sUrl == nil or sUrl == "" then
|
||||
return
|
||||
end
|
||||
local sPlatform = mapLineData.Param4
|
||||
local sOption = mapLineData.Param5
|
||||
local curPlatform = CS.ClientManager.Instance.Platform
|
||||
local bUseOpenUrl = mapLineData.Param7 == "1"
|
||||
if mapLineData.Param1 == "" then
|
||||
if sPlatform == "" then
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.JumpToUrl,
|
||||
sBanner = mapLineData.bannerName,
|
||||
sUrl = sUrl,
|
||||
bInside = true,
|
||||
bUseOpenUrl = bUseOpenUrl
|
||||
})
|
||||
else
|
||||
local tbPlatformList = string.split(sPlatform, ",")
|
||||
local tbOptionList = string.split(sOption, ",")
|
||||
local nIndex = table.indexof(tbPlatformList, curPlatform)
|
||||
if nIndex ~= nil and 0 < nIndex then
|
||||
local sOptionType = tbOptionList[nIndex]
|
||||
local bInside = sOptionType == "0"
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.JumpToUrl,
|
||||
sBanner = mapLineData.bannerName,
|
||||
sUrl = sUrl,
|
||||
bInside = bInside,
|
||||
bUseOpenUrl = bUseOpenUrl
|
||||
})
|
||||
end
|
||||
end
|
||||
else
|
||||
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
|
||||
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
|
||||
if nOpenTime <= nCurTime and nCloseTime >= nCurTime then
|
||||
if sPlatform == "" then
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.JumpToUrl,
|
||||
sBanner = mapLineData.bannerName,
|
||||
sUrl = sUrl,
|
||||
bInside = true,
|
||||
bUseOpenUrl = bUseOpenUrl
|
||||
})
|
||||
else
|
||||
local tbPlatformList = string.split(sPlatform, ",")
|
||||
local tbOptionList = string.split(sOption, ",")
|
||||
local nIndex = table.indexof(tbPlatformList, curPlatform)
|
||||
if nIndex ~= nil and 0 < nIndex then
|
||||
local sOptionType = tbOptionList[nIndex]
|
||||
local bInside = sOptionType == "0"
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.JumpToUrl,
|
||||
sBanner = mapLineData.bannerName,
|
||||
sUrl = sUrl,
|
||||
bInside = bInside,
|
||||
bUseOpenUrl = bUseOpenUrl
|
||||
})
|
||||
end
|
||||
end
|
||||
if nCloseTime < nNextCloseTime or nNextCloseTime == 0 then
|
||||
nNextCloseTime = nCloseTime
|
||||
end
|
||||
elseif nOpenTime > nCurTime and (nOpenTime < nNextOpenTime or nNextOpenTime == 0) then
|
||||
nNextOpenTime = nOpenTime
|
||||
end
|
||||
end
|
||||
elseif mapLineData.BannerType == GameEnum.bannerType.SeaPayment and not NovaAPI.IsReviewServerEnv() then
|
||||
local sUrl = mapLineData.Param3
|
||||
if sUrl == nil or sUrl == "" then
|
||||
return
|
||||
end
|
||||
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param1)
|
||||
local nCloseTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(mapLineData.Param2)
|
||||
if nOpenTime <= nCurTime and nCloseTime >= nCurTime then
|
||||
local sPlatform = mapLineData.Param4
|
||||
local sOption = mapLineData.Param5
|
||||
local curPlatform = CS.ClientManager.Instance.Platform
|
||||
local tbPlatformList = string.split(sPlatform, ",")
|
||||
local tbOptionList = string.split(sOption, ",")
|
||||
local nIndex = table.indexof(tbPlatformList, curPlatform)
|
||||
local sPid = mapLineData.Param6
|
||||
if nIndex ~= nil and 0 < nIndex then
|
||||
local sOptionType = tbOptionList[nIndex]
|
||||
local bInside = sOptionType == "0"
|
||||
if SDKManager:IsSDKInit() then
|
||||
table.insert(self.tbBannerList, {
|
||||
nId = mapLineData.Id,
|
||||
nType = GameEnum.bannerType.SeaPayment,
|
||||
sBanner = mapLineData.bannerName,
|
||||
sUrl = sUrl,
|
||||
bInside = bInside,
|
||||
sPid = sPid
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.Banner, forEachMap)
|
||||
local nRefreshTime = math.min(math.max(nNextOpenTime, 0), math.max(nNextCloseTime, 0))
|
||||
if 0 < nRefreshTime and nCurTime < nRefreshTime then
|
||||
self.bannerRefreshTimer = self:AddTimer(1, nRefreshTime - nCurTime, "SetBanner", true, true, true)
|
||||
end
|
||||
end
|
||||
function ReengagementMallCtrl:AddGachaBanner()
|
||||
local tbOpenedPool = PlayerData.Gacha:GetOpenedPool()
|
||||
local comp = function(a, b)
|
||||
@@ -586,4 +443,21 @@ function ReengagementMallCtrl:ResetTimer()
|
||||
self.bannerRefreshTimer = nil
|
||||
end
|
||||
end
|
||||
function ReengagementMallCtrl:OnBtnClick_BuyWeeklyCard()
|
||||
PlayerData.Reengagement:BuyWeeklyCard(self.mapCurWeeklyCard.Id, self.mapCurWeeklyCard.StatisticalGroup)
|
||||
end
|
||||
function ReengagementMallCtrl:OnBtnClick_ReceiveWeeklyCard()
|
||||
PlayerData.Reengagement:RequestReceiveWeeklyCard()
|
||||
end
|
||||
function ReengagementMallCtrl:OnEvent_RefreshReengagementWeeklyCard()
|
||||
self:RefreshWeeklyCard()
|
||||
end
|
||||
function ReengagementMallCtrl:OnBtnClick_AlreadyReceived()
|
||||
end
|
||||
function ReengagementMallCtrl:OnEvent_MallOrderClear()
|
||||
PlayerData.Reengagement:RequestReengagementInfo(function()
|
||||
self:RefreshWeeklyCard()
|
||||
self:RefreshPkgItem()
|
||||
end)
|
||||
end
|
||||
return ReengagementMallCtrl
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
local MallPackageDetailCtrl = import("Game.UI.Mall.MallPackageDetailCtrl")
|
||||
local ReengagementMallPackageDetailCtrl = class("ReengagementMallPackageDetailCtrl", MallPackageDetailCtrl)
|
||||
function ReengagementMallPackageDetailCtrl:Refresh(sPackageId)
|
||||
self._sPackageId = sPackageId
|
||||
local mapCfg = ConfigTable.GetData("ActivityReturneePack", sPackageId)
|
||||
if not mapCfg or not PlayerData.Reengagement:GetActIsOpen() then
|
||||
self:OnBtnClick_Close()
|
||||
return
|
||||
end
|
||||
local bPurchased = table.indexof(PlayerData.Reengagement:GetPurchasedBundles(), sPackageId) > 0
|
||||
local mapData = {
|
||||
nCurStock = bPurchased and 0 or 1,
|
||||
nNextRefreshTime = PlayerData.Reengagement:GetReengagementCloseTime(),
|
||||
bPrioritizeDeList = true
|
||||
}
|
||||
self:PlayInAni()
|
||||
self:RefreshInfo(mapCfg)
|
||||
self:RefreshPrice(mapCfg)
|
||||
self:RefreshLimit(mapCfg, mapData)
|
||||
self:RefreshTime(mapData)
|
||||
self:RefreshItem(mapCfg)
|
||||
self:RefreshBuy(mapCfg, mapData)
|
||||
end
|
||||
function ReengagementMallPackageDetailCtrl:RefreshLimit(mapCfg, mapData)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, mapData.nCurStock .. "/1")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimitCn, ConfigTable.GetUIText("Mall_Package_LimitTitle"))
|
||||
end
|
||||
function ReengagementMallPackageDetailCtrl:OnBtnClick_Buy()
|
||||
if not PlayerData.Reengagement:GetActIsOpen() then
|
||||
self:OnBtnClick_Close()
|
||||
return
|
||||
end
|
||||
local mapCfg = ConfigTable.GetData("ActivityReturneePack", self._sPackageId)
|
||||
if not mapCfg then
|
||||
return
|
||||
end
|
||||
if table.indexof(PlayerData.Reengagement:GetPurchasedBundles(), self._sPackageId) > 0 then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Mall_Package_SoldOut"))
|
||||
return
|
||||
end
|
||||
if not PlayerData.Shop:CheckShopCond(mapCfg.OrderCondType, decodeJson(mapCfg.OrderCondParams)) then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Shop_Condition"))
|
||||
return
|
||||
end
|
||||
PlayerData.Mall:BuyReengagementPackage(self._sPackageId, mapCfg.StatisticalGroup)
|
||||
end
|
||||
function ReengagementMallPackageDetailCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit("ReengagementMallCloseDetail")
|
||||
end
|
||||
return ReengagementMallPackageDetailCtrl
|
||||
@@ -0,0 +1,150 @@
|
||||
local ReengagementMallPackageItemCtrl = class("ReengagementMallPackageItemCtrl", BaseCtrl)
|
||||
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
||||
ReengagementMallPackageItemCtrl._mapNodeConfig = {
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgBg = {sComponentName = "Image"},
|
||||
txtPrice = {sComponentName = "TMP_Text"},
|
||||
txtLimit = {sComponentName = "TMP_Text"},
|
||||
imgCurrency = {sComponentName = "Image"},
|
||||
goCurrency = {},
|
||||
goTime = {},
|
||||
goCondition = {},
|
||||
goSoldOut = {},
|
||||
imgSoldOut = {nCount = 2},
|
||||
txtRefreshTime = {sComponentName = "TMP_Text"},
|
||||
txtTime = {sComponentName = "TMP_Text"},
|
||||
txtSoldOut = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Mall_Package_SoldOut"
|
||||
},
|
||||
txtCondition = {sComponentName = "TMP_Text"},
|
||||
goSaleRate = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
fxSaleRate = {sNodeName = "goSaleRate", sComponentName = "UIShiny"},
|
||||
txtSaleRate = {sComponentName = "TMP_Text"},
|
||||
imgMask = {},
|
||||
imgSaleMask = {},
|
||||
reddotPkg = {},
|
||||
reddotNew = {},
|
||||
btnGrid = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Buy"
|
||||
}
|
||||
}
|
||||
ReengagementMallPackageItemCtrl._mapEventConfig = {}
|
||||
function ReengagementMallPackageItemCtrl:RefreshReengagement(mapData, bPurchased)
|
||||
self.sId = mapData.Id
|
||||
self.sStatistical = mapData.StatisticalGroup
|
||||
self.bPurchased = bPurchased
|
||||
self:RefreshInfo(mapData, bPurchased)
|
||||
self:RefreshPrice(mapData)
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:RefreshPrice(mapCfg)
|
||||
if mapCfg.CurrencyType == GameEnum.currencyType.Cash then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, tostring(mapCfg.CurrencyShowPrice))
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Item then
|
||||
self._mapNode.goCurrency:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, mapCfg.CurrencyItemQty)
|
||||
self:SetPngSprite(self._mapNode.imgCurrency, ConfigTable.GetData_Item(mapCfg.CurrencyItemId).Icon2)
|
||||
elseif mapCfg.CurrencyType == GameEnum.currencyType.Free then
|
||||
self._mapNode.goCurrency:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPrice, ConfigTable.GetUIText("Mall_Package_Free"))
|
||||
end
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:RefreshInfo(mapCfg, bPurchased)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, mapCfg.Name)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapCfg.Icon)
|
||||
self:SetPngSprite(self._mapNode.imgBg, mapCfg.IconBg)
|
||||
self._mapNode.goSaleRate.gameObject:SetActive(not bPurchased)
|
||||
if mapCfg.SaleRate ~= 0 then
|
||||
if mapCfg.SaleRate == -1 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSaleRate, ConfigTable.GetUIText("Mall_Package_Recommend"))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSaleRate, string.format("%s%%", mapCfg.SaleRate))
|
||||
end
|
||||
end
|
||||
local sLimit = bPurchased and orderedFormat(ConfigTable.GetUIText("Mall_Package_Limit") or "", 0, 1) or orderedFormat(ConfigTable.GetUIText("Mall_Package_Limit") or "", 1, 1)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLimit, sLimit)
|
||||
self._mapNode.imgMask:SetActive(bPurchased)
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:RefreshTime(mapCfg, mapData)
|
||||
local bDisposable = mapCfg.RefreshType == GameEnum.mallPackageRefreshType.None
|
||||
self._mapNode.goTime.gameObject:SetActive(mapData.nNextRefreshTime > 0 and bDisposable)
|
||||
if mapData.nNextRefreshTime > 0 and bDisposable then
|
||||
local sSuffix = mapData.bPrioritizeDeList and ConfigTable.GetUIText("Mall_Package_Delist") or ConfigTable.GetUIText("Mall_Package_Refresh")
|
||||
local sPrefix
|
||||
local nRemaining = mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
|
||||
if nRemaining <= 3600 then
|
||||
sPrefix = ConfigTable.GetUIText("Mall_Package_WithinHour")
|
||||
elseif 3600 < nRemaining and nRemaining <= 86400 then
|
||||
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_Hour") or "", math.floor(nRemaining / 3600))
|
||||
elseif 86400 < nRemaining then
|
||||
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_Day") or "", math.floor(nRemaining / 86400))
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTime, sPrefix .. sSuffix)
|
||||
end
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:RefreshCond(mapData, bPurchased)
|
||||
local bShowMask = not bPurchased
|
||||
self._mapNode.imgMask:SetActive(bShowMask)
|
||||
self._mapNode.imgSaleMask:SetActive(bShowMask)
|
||||
NovaAPI.SetComponentEnable(self._mapNode.fxSaleRate, not bShowMask)
|
||||
self._mapNode.goCondition:SetActive(not bPurchased)
|
||||
self._mapNode.goSoldOut:SetActive(not bPurchased)
|
||||
if not bPurchaseAble then
|
||||
local sCond = ""
|
||||
if mapCfg.OrderCondType == GameEnum.shopCond.WorldClassSpecific then
|
||||
sCond = orderedFormat(ConfigTable.GetUIText("Mall_Cond_WorldClass") or "", tbCond[1])
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCondition, sCond)
|
||||
end
|
||||
if bPurchased then
|
||||
local bTime = mapData.nNextRefreshTime > 0
|
||||
self._mapNode.imgSoldOut[1]:SetActive(not bTime)
|
||||
self._mapNode.imgSoldOut[2]:SetActive(bTime)
|
||||
if mapData.nNextRefreshTime > 0 then
|
||||
local sPrefix
|
||||
local nRemaining = mapData.nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp
|
||||
if nRemaining <= 3600 then
|
||||
sPrefix = ConfigTable.GetUIText("Mall_Package_WithinHourRefresh")
|
||||
elseif 3600 < nRemaining and nRemaining <= 86400 then
|
||||
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_HourRefresh") or "", math.floor(nRemaining / 3600))
|
||||
elseif 86400 < nRemaining then
|
||||
sPrefix = orderedFormat(ConfigTable.GetUIText("Mall_Package_DayRefresh") or "", math.floor(nRemaining / 86400))
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRefreshTime, sPrefix)
|
||||
end
|
||||
end
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:RegisterRedDot(mapCfg)
|
||||
RedDotManager.RegisterNode(RedDotDefine.FreePackage, self.sId, self._mapNode.reddotPkg)
|
||||
local groupCfg = ConfigTable.GetData("MallPackagePage", mapCfg.GroupId)
|
||||
if groupCfg == nil then
|
||||
return
|
||||
end
|
||||
RedDotManager.RegisterNode(RedDotDefine.Mall_Package_New, {
|
||||
AllEnum.MallToggle.Package,
|
||||
groupCfg.Sort,
|
||||
self.sId
|
||||
}, self._mapNode.reddotNew)
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:Awake()
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:OnEnable()
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:OnDisable()
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:OnDestroy()
|
||||
end
|
||||
function ReengagementMallPackageItemCtrl:OnBtnClick_Buy()
|
||||
if self.bPurchased then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Mall_Package_SoldOut"))
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.ReengagementMallPopup, self.sId)
|
||||
end
|
||||
return ReengagementMallPackageItemCtrl
|
||||
@@ -0,0 +1,67 @@
|
||||
local ReengagementMallPopupCtrl = class("ReengagementMallPopupCtrl", BaseCtrl)
|
||||
ReengagementMallPopupCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
blur = {
|
||||
sNodeName = "t_fullscreen_blur_blue"
|
||||
},
|
||||
aniBlur = {
|
||||
sNodeName = "t_fullscreen_blur_blue",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
btnCloseDatail = {
|
||||
sNodeName = "snapshot",
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_CloseDetail"
|
||||
},
|
||||
PackageDetail = {
|
||||
sNodeName = "---PackageDetail---",
|
||||
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementMallPackageDetailCtrl"
|
||||
},
|
||||
ShopDetail = {
|
||||
sNodeName = "---ShopDetail---"
|
||||
},
|
||||
FurnitureDetail = {
|
||||
sNodeName = "---FurnitureDetail---"
|
||||
},
|
||||
FurnitureSet = {
|
||||
sNodeName = "---FurnitureSet---"
|
||||
}
|
||||
}
|
||||
ReengagementMallPopupCtrl._mapEventConfig = {
|
||||
ReengagementMallCloseDetail = "OnBtnClick_CloseDetail",
|
||||
MallOrderClear = "OnBtnClick_CloseDetail"
|
||||
}
|
||||
function ReengagementMallPopupCtrl:Awake()
|
||||
self._mapNode.PackageDetail.gameObject:SetActive(false)
|
||||
self._mapNode.ShopDetail:SetActive(false)
|
||||
self._mapNode.FurnitureDetail:SetActive(false)
|
||||
self._mapNode.FurnitureSet:SetActive(false)
|
||||
self._sPackageId = self:GetPanelParam()[1]
|
||||
end
|
||||
function ReengagementMallPopupCtrl:OnEnable()
|
||||
self._bClosing = false
|
||||
self._mapNode.blur:SetActive(true)
|
||||
self._mapNode.TopBar:CreateCoin({
|
||||
AllEnum.CoinItemId.FREESTONE
|
||||
}, true)
|
||||
self._mapNode.PackageDetail:Refresh(self._sPackageId)
|
||||
end
|
||||
function ReengagementMallPopupCtrl:OnBtnClick_CloseDetail()
|
||||
if self._bClosing then
|
||||
return
|
||||
end
|
||||
self._bClosing = true
|
||||
if self._mapNode.PackageDetail.gameObject.activeSelf then
|
||||
self._mapNode.PackageDetail:PlayOutAni()
|
||||
end
|
||||
self._mapNode.TopBar.gameObject:SetActive(false)
|
||||
self._mapNode.aniBlur:SetTrigger("tOut")
|
||||
self:AddTimer(1, 0.2, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ReengagementMallPopup)
|
||||
end, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
end
|
||||
return ReengagementMallPopupCtrl
|
||||
@@ -0,0 +1,9 @@
|
||||
local ReengagementMallPopupPanel = class("ReengagementMallPopupPanel", BasePanel)
|
||||
ReengagementMallPopupPanel._bIsMainPanel = false
|
||||
ReengagementMallPopupPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Mall/MallPopupPanel.prefab",
|
||||
sCtrlName = "Game.UI.Activity.Reengagement.ReengagementMallPopupCtrl"
|
||||
}
|
||||
}
|
||||
return ReengagementMallPopupPanel
|
||||
@@ -1,6 +1,7 @@
|
||||
local BasePanel = require("GameCore.UI.BasePanel")
|
||||
local ReengagementPanel = class("ReengagementPanel", BasePanel)
|
||||
ReengagementPanel._sUIResRootPath = "UI_Activity/"
|
||||
ReengagementPanel._bIsMainPanel = true
|
||||
ReengagementPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "_101004/ReengagementPanel.prefab",
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
local ReengagementPopUpCtrl = class("ReengagementPopUpCtrl", BaseCtrl)
|
||||
local sPrefabFolder = "UI_Activity/%s.prefab"
|
||||
ReengagementPopUpCtrl._mapNodeConfig = {
|
||||
imgBlurredBg = {},
|
||||
goContent = {
|
||||
sNodeName = "---Content---"
|
||||
},
|
||||
PopUpRoot = {
|
||||
sNodeName = "---PopUpRoot---",
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
ReengagementPopUpCtrl._mapEventConfig = {}
|
||||
ReengagementPopUpCtrl._mapRedDotConfig = {}
|
||||
function ReengagementPopUpCtrl:Awake()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
local mapData = tbParam[1]
|
||||
if type(mapData) == "table" then
|
||||
self.nActId = mapData.nActId or mapData[1]
|
||||
else
|
||||
self.nActId = mapData
|
||||
end
|
||||
self.callback = tbParam[2]
|
||||
end
|
||||
end
|
||||
function ReengagementPopUpCtrl:OnEnable()
|
||||
self._mapNode.goContent.gameObject:SetActive(false)
|
||||
self._mapNode.PopUpRoot.gameObject:SetActive(false)
|
||||
self._mapNode.imgBlurredBg.gameObject:SetActive(true)
|
||||
self:ShowPopUp()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.PopUpRoot.gameObject:SetActive(self.curPopUpCtrl ~= nil)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function ReengagementPopUpCtrl:OnDisable()
|
||||
self:ResetContent()
|
||||
end
|
||||
function ReengagementPopUpCtrl:OnDestroy()
|
||||
end
|
||||
function ReengagementPopUpCtrl:ResetContent()
|
||||
if self.curPopUpCtrl ~= nil then
|
||||
destroy(self.curPopUpCtrl.gameObject)
|
||||
self:UnbindCtrlByNode(self.curPopUpCtrl)
|
||||
end
|
||||
self.curPopUpCtrl = nil
|
||||
end
|
||||
function ReengagementPopUpCtrl:ShowPopUp()
|
||||
if self.nActId == nil then
|
||||
self:ClosePopUp()
|
||||
return
|
||||
end
|
||||
local mapPopUpCfg = ConfigTable.GetData("ActivityReturneeLoginRewardControl", self.nActId)
|
||||
if mapPopUpCfg == nil or mapPopUpCfg.UIAssets == nil or mapPopUpCfg.UIAssets == "" or mapPopUpCfg.CtrlName == nil or mapPopUpCfg.CtrlName == "" then
|
||||
self:ClosePopUp()
|
||||
return
|
||||
end
|
||||
self:ResetContent()
|
||||
local sPrefabPath = string.format(sPrefabFolder, mapPopUpCfg.UIAssets)
|
||||
local goObj = self:CreatePrefabInstance(sPrefabPath, self._mapNode.PopUpRoot)
|
||||
local sCtrlPath = string.format("Game.UI.Activity.%s", mapPopUpCfg.CtrlName)
|
||||
self.curPopUpCtrl = self:BindCtrlByNode(goObj, sCtrlPath)
|
||||
local callback = function(funcCall, bPauseQueue)
|
||||
self:ClosePopUp(funcCall, bPauseQueue)
|
||||
end
|
||||
self.curPopUpCtrl:ShowPopUp(self.nActId, callback, 1)
|
||||
end
|
||||
function ReengagementPopUpCtrl:ClosePopUp(funcCall, bPauseQueue)
|
||||
self:ResetContent()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ReengagementPopUpPanel)
|
||||
if bPauseQueue then
|
||||
if funcCall ~= nil then
|
||||
funcCall()
|
||||
end
|
||||
return
|
||||
end
|
||||
if self.callback ~= nil then
|
||||
self.callback(funcCall)
|
||||
elseif funcCall ~= nil then
|
||||
funcCall()
|
||||
end
|
||||
end
|
||||
return ReengagementPopUpCtrl
|
||||
@@ -0,0 +1,109 @@
|
||||
local ReengagementQuestItemCtrl = class("ReengagementQuestItemCtrl", BaseCtrl)
|
||||
local JumpUtil = require("Game.Common.Utils.JumpUtil")
|
||||
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
||||
ReengagementQuestItemCtrl._mapNodeConfig = {
|
||||
rtTitle = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtTitle = {sNodeName = "TMPTitle", sComponentName = "TMP_Text"},
|
||||
rtBarFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtProcess = {sNodeName = "TMPProcess", sComponentName = "TMP_Text"},
|
||||
btnReward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Reward"
|
||||
},
|
||||
rtReward = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnReceive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Receive"
|
||||
},
|
||||
txtBtnReceive = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "PerActivity_Quest_Receive"
|
||||
},
|
||||
btnJump = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Jump"
|
||||
},
|
||||
txtBtnJump = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "PerActivity_Quest_Jump"
|
||||
},
|
||||
txtUnComplete = {
|
||||
sNodeName = "TMPUncomplete",
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "PerActivity_Quest_UnComplete"
|
||||
},
|
||||
imgComplete = {},
|
||||
imgCompleteMask = {},
|
||||
imgPoint = {}
|
||||
}
|
||||
ReengagementQuestItemCtrl._mapEventConfig = {}
|
||||
local totalLength = 520
|
||||
local totalHeight = 37
|
||||
function ReengagementQuestItemCtrl:SetData(nActId, mapData)
|
||||
self.nActId = nActId
|
||||
self.nQuestId = mapData.Id
|
||||
local tbQuest = PlayerData.Reengagement:GetQuestDataById(self.nQuestId)
|
||||
if tbQuest == nil then
|
||||
tbQuest = {
|
||||
nStatus = 0,
|
||||
Progress = {Cur = 0, Max = 1}
|
||||
}
|
||||
end
|
||||
local nStatus = tbQuest.nStatus
|
||||
local questCfg = PlayerData.Reengagement:GetQuestConfigDataById(self.nQuestId)
|
||||
self.nGroupId = questCfg.GroupId
|
||||
if nil ~= questCfg then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTitle, questCfg.Title)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProcess, string.format("%s/%s", tbQuest.Progress.Cur, tbQuest.Progress.Max))
|
||||
self.nJumpTo = questCfg.JumpTo
|
||||
self.rewardId = questCfg.Reward1Tid
|
||||
self._mapNode.rtReward:SetItem(questCfg.Reward1Tid, nil, questCfg.Reward1Qty, nil, nil, nil, nil, true)
|
||||
self._mapNode.txtUnComplete.gameObject:SetActive(nStatus == 0 and questCfg.JumpTo == 0)
|
||||
self._mapNode.btnJump.gameObject:SetActive(nStatus == 0 and questCfg.JumpTo ~= 0)
|
||||
self._mapNode.btnReceive.gameObject:SetActive(nStatus == 1)
|
||||
self._mapNode.imgComplete.gameObject:SetActive(nStatus == 2)
|
||||
self._mapNode.imgCompleteMask.gameObject:SetActive(nStatus == 2)
|
||||
self._mapNode.imgPoint.gameObject:SetActive(nStatus ~= 2)
|
||||
if nStatus == 2 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProcess, ConfigTable.GetUIText("PerActivity_Quest_Complete"))
|
||||
self._mapNode.rtBarFill.sizeDelta = Vector2(totalLength, totalHeight)
|
||||
else
|
||||
self._mapNode.rtBarFill.sizeDelta = Vector2(tbQuest.Progress.Cur / tbQuest.Progress.Max * totalLength, totalHeight)
|
||||
end
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtTitle)
|
||||
end
|
||||
end
|
||||
function ReengagementQuestItemCtrl:Awake()
|
||||
end
|
||||
function ReengagementQuestItemCtrl:FadeIn()
|
||||
end
|
||||
function ReengagementQuestItemCtrl:FadeOut()
|
||||
end
|
||||
function ReengagementQuestItemCtrl:OnEnable()
|
||||
end
|
||||
function ReengagementQuestItemCtrl:OnDisable()
|
||||
end
|
||||
function ReengagementQuestItemCtrl:OnDestroy()
|
||||
end
|
||||
function ReengagementQuestItemCtrl:OnRelease()
|
||||
end
|
||||
function ReengagementQuestItemCtrl:OnBtnClick_Reward(btn)
|
||||
if nil ~= self.rewardId then
|
||||
UTILS.ClickItemGridWithTips(self.rewardId, btn.transform, true, true, true)
|
||||
end
|
||||
end
|
||||
function ReengagementQuestItemCtrl:OnBtnClick_Receive()
|
||||
PlayerData.Reengagement:RequestReceiveQuestReward(self.nQuestId, self.nGroupId)
|
||||
end
|
||||
function ReengagementQuestItemCtrl:OnBtnClick_Jump()
|
||||
if nil ~= self.nJumpTo and 0 ~= self.nJumpTo then
|
||||
JumpUtil.JumpTo(self.nJumpTo)
|
||||
end
|
||||
end
|
||||
return ReengagementQuestItemCtrl
|
||||
@@ -40,13 +40,13 @@ ReengagementSigninCtrl._mapNodeConfig = {
|
||||
}
|
||||
ReengagementSigninCtrl._mapEventConfig = {}
|
||||
function ReengagementSigninCtrl:Refresh(nCurTog)
|
||||
if nCurTog ~= AllEnum.ReengagementTog.ShopMall then
|
||||
if nCurTog ~= AllEnum.ReengagementTog.Signin then
|
||||
return
|
||||
end
|
||||
self:InitActData()
|
||||
end
|
||||
function ReengagementSigninCtrl:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local endTime = PlayerData.Reengagement:GetReengagementCloseTime()
|
||||
local curTime = ClientManager.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
@@ -56,7 +56,7 @@ function ReengagementSigninCtrl:RefreshRemainTime()
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ReengagementPanel)
|
||||
end
|
||||
})
|
||||
return
|
||||
@@ -93,17 +93,42 @@ function ReengagementSigninCtrl:RefreshRemainTime()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTime, sTimeStr)
|
||||
end
|
||||
function ReengagementSigninCtrl:RefreshRewardList()
|
||||
local canReceive = self.mapLoginRewardData.Receive > self.mapLoginRewardData.Actual
|
||||
self._mapNode.btnActivity.gameObject:SetActive(canReceive)
|
||||
self.nLoginRewardGroup = 0
|
||||
self.tbRewardList = {}
|
||||
local tbRewardList = self.actData:GetActLoginRewardList()
|
||||
local tbRewardList = {}
|
||||
local mapDataLoginRewardCtrl = ConfigTable.GetData("ActivityReturneeLoginRewardControl", PlayerData.Reengagement:GetActId())
|
||||
if mapDataLoginRewardCtrl ~= nil then
|
||||
self.nLoginRewardGroup = mapDataLoginRewardCtrl.RewardsGroup
|
||||
end
|
||||
local foreachfunc = function(mapData)
|
||||
if mapData ~= nil and mapData.RewardGroupId == self.nLoginRewardGroup then
|
||||
table.insert(tbRewardList, mapData)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("ActivityReturneeLoginRewardGroup"), foreachfunc)
|
||||
table.sort(tbRewardList, function(a, b)
|
||||
return a.Order < b.Order
|
||||
end)
|
||||
if nil ~= tbRewardList then
|
||||
local nMaxDay = #tbRewardList
|
||||
local nReceiveDay = self.actData:GetCanReceive()
|
||||
local nActual = self.actData:GetReceived()
|
||||
local nReceiveDay = self.mapLoginRewardData.Receive
|
||||
local nActual = self.mapLoginRewardData.Actual
|
||||
for k, v in ipairs(self._mapNode.goRewardItem) do
|
||||
self.tbRewardList[k] = {}
|
||||
local mapReward = tbRewardList[k]
|
||||
v.gameObject:SetActive(mapReward ~= nil)
|
||||
if mapReward ~= nil then
|
||||
local Status = 0
|
||||
if k <= nReceiveDay and k > nActual then
|
||||
Status = 1
|
||||
elseif k <= nReceiveDay and k <= nActual then
|
||||
Status = 2
|
||||
elseif k > nReceiveDay then
|
||||
Status = 0
|
||||
end
|
||||
mapReward.Status = Status
|
||||
v:SetRewardItem(k, mapReward, k == nMaxDay, nReceiveDay == nActual and k == nActual + 1)
|
||||
for i = 1, 3 do
|
||||
local nTid = mapReward["RewardId" .. i]
|
||||
@@ -117,12 +142,9 @@ function ReengagementSigninCtrl:RefreshRewardList()
|
||||
end
|
||||
end
|
||||
function ReengagementSigninCtrl:InitActData()
|
||||
local actData = {}
|
||||
self.actData = actData
|
||||
self:RefreshRewardList()
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
self._mapNode.btnActivity.gameObject:SetActive(canReceive)
|
||||
self.mapLoginRewardData = PlayerData.Reengagement:GetActLoginRewardList()
|
||||
self._mapNode.imgRemaineTime.gameObject:SetActive(true)
|
||||
self:RefreshRewardList()
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
@@ -137,43 +159,54 @@ end
|
||||
function ReengagementSigninCtrl:OnDestroy()
|
||||
end
|
||||
function ReengagementSigninCtrl:OnBtnClick_Detail()
|
||||
local mapActCfg = self.actData:GetLoginRewardControlCfg()
|
||||
local mapActData = ConfigTable.GetData("ActivityReturneeReunionReward", PlayerData.Reengagement:GetActId())
|
||||
if mapActData == nil then
|
||||
return
|
||||
end
|
||||
local tbRewards = {}
|
||||
for i = 1, 3 do
|
||||
local nId = mapActData["Reward" .. i .. "Tid"]
|
||||
local nQty = mapActData["Reward" .. i .. "Qty"]
|
||||
if 0 < nId then
|
||||
table.insert(tbRewards, {
|
||||
nId = nId,
|
||||
nCount = nQty,
|
||||
bReceived = true
|
||||
})
|
||||
end
|
||||
end
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = mapActCfg.DesText,
|
||||
sTitle = ConfigTable.GetUIText("Activity_Btn_Detail")
|
||||
nType = AllEnum.MessageBox.ItemList,
|
||||
tbItem = tbRewards,
|
||||
bBlur = true
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function ReengagementSigninCtrl:OnBtnClick_Item(btn, nIndex)
|
||||
if self.tbRewardList[nIndex] ~= nil then
|
||||
if #self.tbRewardList[nIndex] == 1 then
|
||||
if nIndex < self.mapLoginRewardData.Actual or self.mapLoginRewardData.Actual == self.mapLoginRewardData.Receive then
|
||||
local nTid = self.tbRewardList[nIndex][1].nTid
|
||||
UTILS.ClickItemGridWithTips(nTid, btn.gameObject.transform, true, true, false)
|
||||
else
|
||||
local tbReward = {}
|
||||
for _, v in ipairs(self.tbRewardList[nIndex]) do
|
||||
local rewardData = {
|
||||
[1] = v.nTid,
|
||||
[5] = v.nCount
|
||||
}
|
||||
table.insert(tbReward, rewardData)
|
||||
end
|
||||
EventManager.Hit("ShowActRewardList", tbReward)
|
||||
PlayerData.Reengagement:RequestReceiveLoginReward(function()
|
||||
self:RefreshRewardList()
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
function ReengagementSigninCtrl:OnBtnClick_Activity()
|
||||
local callback = function()
|
||||
self._mapNode.btnActivity.gameObject:SetActive(false)
|
||||
local actData = PlayerData.Activity:GetActivityDataById(self.actData:GetActId())
|
||||
self:InitActData(actData)
|
||||
if self.mapLoginRewardData.Actual < self.mapLoginRewardData.Receive then
|
||||
PlayerData.Reengagement:RequestReceiveLoginReward(function()
|
||||
self:RefreshRewardList()
|
||||
end)
|
||||
end
|
||||
local canReceive = self.actData:CheckCanReceive()
|
||||
if not canReceive then
|
||||
callback()
|
||||
return
|
||||
end
|
||||
function ReengagementSigninCtrl:OnBtnClick_Play()
|
||||
local mapActData = ConfigTable.GetData("ActivityReturnee", PlayerData.Reengagement:GetActId())
|
||||
local sAvgId
|
||||
if mapActData ~= nil and mapActData.AVG ~= nil then
|
||||
sAvgId = mapActData.AVG
|
||||
end
|
||||
PlayerData.Activity:SendReceiveLoginRewardMsg(self.actData:GetActId(), callback)
|
||||
EventManager.Hit("StoryDialog_DialogStart", sAvgId, Settings.sCurrentTxtLanguage, Settings.sCurrentVoLanguage)
|
||||
end
|
||||
return ReengagementSigninCtrl
|
||||
|
||||
@@ -34,14 +34,6 @@ ReengagementTaskCtrl._mapNodeConfig = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Detail"
|
||||
},
|
||||
btnQuickRec = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_QuickRec"
|
||||
},
|
||||
txtBtnQuickRec = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Activity_Btn_Quick_Receive"
|
||||
},
|
||||
goActTime = {},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"},
|
||||
txtActValue = {sComponentName = "TMP_Text"},
|
||||
@@ -52,17 +44,27 @@ ReengagementTaskCtrl._mapNodeConfig = {
|
||||
nCount = 7,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_NodeItem"
|
||||
},
|
||||
item = {
|
||||
nCount = 7,
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
}
|
||||
}
|
||||
ReengagementTaskCtrl._mapEventConfig = {}
|
||||
ReengagementTaskCtrl._mapEventConfig = {
|
||||
RefreshReengagementQuest = "RefreshQuestList",
|
||||
RefreshReengagementQuestPoint = "RefreshActivityNode",
|
||||
RefreshReengagementGroup = "OnRefreshGroup"
|
||||
}
|
||||
function ReengagementTaskCtrl:Refresh(nCurTog)
|
||||
if nCurTog ~= AllEnum.ReengagementTog.Task then
|
||||
return
|
||||
end
|
||||
self:InitActData()
|
||||
self:RefreshQuestList()
|
||||
self:RefreshActivityNode()
|
||||
end
|
||||
function ReengagementTaskCtrl:RefreshRemainTime()
|
||||
local endTime = self.actData:GetActEndTime()
|
||||
local endTime = PlayerData.Reengagement:GetReengagementCloseTime()
|
||||
local curTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
@@ -72,7 +74,7 @@ function ReengagementTaskCtrl:RefreshRemainTime()
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ReengagementPanel)
|
||||
end
|
||||
})
|
||||
return
|
||||
@@ -108,66 +110,83 @@ function ReengagementTaskCtrl:RefreshRemainTime()
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, orderedFormat(ConfigTable.GetUIText("PerActivity_Remain_Time") or "", sTimeStr))
|
||||
end
|
||||
local tbConvertStatus = {
|
||||
[0] = 1,
|
||||
[1] = 0,
|
||||
[2] = 2
|
||||
}
|
||||
function ReengagementTaskCtrl:RefreshQuestList()
|
||||
self.tbAllQuestList = self.actData:GetQuestListByGroup()
|
||||
if nil == self.tbAllQuestList[self._panel.nSelectGroup] then
|
||||
printLog(string.format("任务列表为空!!!actId = %s, group = %s", self.nActId, self._panel.nSelectGroup))
|
||||
return
|
||||
end
|
||||
self.tbQuestList = self.tbAllQuestList[self._panel.nSelectGroup]
|
||||
table.sort(self.tbQuestList, function(a, b)
|
||||
if a.nStatus == b.nStatus then
|
||||
local nGroupId = 100 + (self._panel.nSelectGroup or 1)
|
||||
self.tbQuestList = PlayerData.Reengagement:GetQuestListByGroup(nGroupId)
|
||||
self.tbQuestData = PlayerData.Reengagement:GetQuestConfigDataByGroup(nGroupId)
|
||||
table.sort(self.tbQuestData, function(a, b)
|
||||
if not self.tbQuestList[a.Id] or not self.tbQuestList[b.Id] then
|
||||
return a.Id < b.Id
|
||||
end
|
||||
return a.nStatus < b.nStatus
|
||||
if self.tbQuestList[a.Id].nStatus == self.tbQuestList[b.Id].nStatus then
|
||||
return a.Id < b.Id
|
||||
end
|
||||
return tbConvertStatus[self.tbQuestList[a.Id].nStatus] < tbConvertStatus[self.tbQuestList[b.Id].nStatus]
|
||||
end)
|
||||
for k, v in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
self.tbGridCtrl[k] = nil
|
||||
end
|
||||
if nil ~= self.tbQuestList then
|
||||
if #self.tbQuestData > 0 then
|
||||
self.nPageCount = 0
|
||||
self._mapNode.loopSv:SetAnim(0.06)
|
||||
self._mapNode.loopSv:Init(#self.tbQuestList, self, self.OnGridRefresh, nil, false, self.GetGridPageCount)
|
||||
self._mapNode.loopSv:Init(#self.tbQuestData, self, self.OnGridRefresh, nil, false, self.GetGridPageCount)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
end
|
||||
local _, _, canReceive = self.actData:GetQuestProgress()
|
||||
self._mapNode.btnQuickRec.gameObject:SetActive(0 < canReceive)
|
||||
for k, v in ipairs(self._mapNode.PerActGroupItem) do
|
||||
local nAllQuest, nReceivedQuest = self.actData:GetDayQuestStatus(k)
|
||||
v:RefreshStatus(nAllQuest <= nReceivedQuest and 0 < nReceivedQuest)
|
||||
local bAllReceived = PlayerData.Reengagement:IsQuestGroupAllReceived(k)
|
||||
v:RefreshStatus(bAllReceived)
|
||||
end
|
||||
end
|
||||
function ReengagementTaskCtrl:GetGridPageCount(pageCount)
|
||||
self.nPageCount = pageCount > #self.tbQuestList and #self.tbQuestList or pageCount
|
||||
end
|
||||
function ReengagementTaskCtrl:InitGroupList()
|
||||
local nCurDay = self.actData:GetCurOpenDay()
|
||||
self.nMaxOpenGroup = 0
|
||||
self.tbGroupList = {}
|
||||
local foreachtabelline = function(mapData)
|
||||
if mapData.ReturneeId == self.nActId then
|
||||
table.insert(self.tbGroupList, mapData)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("ActivityReturneeQuestGroup"), foreachtabelline)
|
||||
local tbNextOpenGroupList = {}
|
||||
if nil ~= CacheTable.GetData("_PeriodicQuestGroup", self.nActId) then
|
||||
local tbGroup = CacheTable.GetData("_PeriodicQuestGroup", self.nActId)[nCurDay]
|
||||
if nil ~= tbGroup then
|
||||
for _, v in ipairs(tbGroup) do
|
||||
if v > self.nMaxOpenGroup then
|
||||
self.nMaxOpenGroup = v
|
||||
end
|
||||
end
|
||||
end
|
||||
if nil ~= CacheTable.GetData("_PeriodicQuestGroup", self.nActId)[nCurDay + 1] then
|
||||
for _, v in ipairs(CacheTable.GetData("_PeriodicQuestGroup", self.nActId)[nCurDay + 1]) do
|
||||
tbNextOpenGroupList[v] = 1
|
||||
end
|
||||
local nEventOpenTime = PlayerData.Reengagement:GetReengagementOpenTime()
|
||||
local nCurTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
self.nCurDay = 0
|
||||
if nil ~= nEventOpenTime and 0 < nEventOpenTime and nEventOpenTime < nCurTime then
|
||||
local nOpenDayStartTime = CS.ClientManager.Instance:GetNextRefreshTime(nEventOpenTime) - 86400
|
||||
self.nCurDay = math.floor((nCurTime - nOpenDayStartTime) / 86400)
|
||||
end
|
||||
for _, v in ipairs(self.tbGroupList) do
|
||||
local nOpenDay = v.DayOpen
|
||||
if nOpenDay <= self.nCurDay then
|
||||
self.nMaxOpenGroup = math.max(self.nMaxOpenGroup, v.Id - 100)
|
||||
elseif nOpenDay == self.nCurDay + 1 then
|
||||
tbNextOpenGroupList[v.Id] = 1
|
||||
end
|
||||
end
|
||||
local nSelectGroup = self.actData:GetCanReceiveRewardGroup()
|
||||
if 0 == nSelectGroup then
|
||||
nSelectGroup = self.nMaxOpenGroup
|
||||
local nRedDotGroup = 0
|
||||
for _, mapGroup in ipairs(self.tbGroupList) do
|
||||
if mapGroup.DayOpen <= self.nCurDay and RedDotManager.GetValid(RedDotDefine.Activity_Reengagement_Task_Group, {
|
||||
self.nActId,
|
||||
mapGroup.Id
|
||||
}) then
|
||||
nRedDotGroup = math.max(nRedDotGroup, mapGroup.Id - 100)
|
||||
end
|
||||
end
|
||||
local nSelectGroup = 0 < nRedDotGroup and nRedDotGroup or math.max(1, self.nMaxOpenGroup)
|
||||
for k, v in ipairs(self._mapNode.PerActGroupItem) do
|
||||
v:Init(self.nActId, k, self.nMaxOpenGroup)
|
||||
if nil ~= tbNextOpenGroupList[k] then
|
||||
local nHour = self.actData:GetNextDayOpenTime()
|
||||
local bAllReceived = PlayerData.Reengagement:IsQuestGroupAllReceived(k)
|
||||
v:Init(self.nActId, k, self.nMaxOpenGroup, bAllReceived)
|
||||
if nil ~= tbNextOpenGroupList[k + 100] then
|
||||
local nNextRefreshTime = CS.ClientManager.Instance:GetNextRefreshTime(nCurTime)
|
||||
local nHour = math.floor((nNextRefreshTime - nCurTime) / 3600)
|
||||
if nHour < 1 then
|
||||
v:SetTime(orderedFormat(ConfigTable.GetUIText("PerActivity_Quest_Open_Time_2") or "", 1))
|
||||
else
|
||||
@@ -175,58 +194,62 @@ function ReengagementTaskCtrl:InitGroupList()
|
||||
end
|
||||
end
|
||||
end
|
||||
if nil == self._panel.nSelectGroup then
|
||||
if nil == self._panel.nSelectGroup or 0 >= self._panel.nSelectGroup or self._panel.nSelectGroup > self.nMaxOpenGroup then
|
||||
self._panel.nSelectGroup = nSelectGroup
|
||||
end
|
||||
self._mapNode.PerActGroupItem[self._panel.nSelectGroup]:SetSelect(true)
|
||||
if nil ~= self._mapNode.PerActGroupItem[self._panel.nSelectGroup] then
|
||||
self._mapNode.PerActGroupItem[self._panel.nSelectGroup]:SetSelect(true)
|
||||
end
|
||||
end
|
||||
function ReengagementTaskCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceId] then
|
||||
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Activity.PeriodicQuest.PeriodicQuestItemCtrl")
|
||||
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Activity.Reengagement.ReengagementQuestItemCtrl")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceId]:SetData(self.nActId, self.tbQuestList[nIndex])
|
||||
self.tbGridCtrl[nInstanceId]:SetData(self.nActId, self.tbQuestData[nIndex])
|
||||
end
|
||||
local totalLength = 816
|
||||
local totalNodeLength = 136
|
||||
local actNodeItemHeight = 152
|
||||
local totalHeight = 20
|
||||
function ReengagementTaskCtrl:RefreshActivityNode()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActValue, self.nActiveCount)
|
||||
local bAllComplete = self.nActiveCount >= self.nTotalActiveCount
|
||||
self.tbQuestActive = {}
|
||||
self.nTotalActiveCount = 0
|
||||
local ForeachActivity = function(mapData)
|
||||
table.insert(self.tbQuestActive, mapData)
|
||||
if mapData.ReturneeId == self.nActId then
|
||||
table.insert(self.tbQuestActive, mapData)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("DailyQuestActive"), ForeachActivity)
|
||||
ForEachTableLine(ConfigTable.Get("ActivityReturneeQuestPoint"), ForeachActivity)
|
||||
table.sort(self.tbQuestActive, function(a, b)
|
||||
return a.Active < b.Active
|
||||
return a.Point < b.Point
|
||||
end)
|
||||
local nMaxAct = self.tbQuestActive[#self.tbQuestActive].Active
|
||||
self.tbCanReceiveAct = {}
|
||||
local nMaxAct = self.tbQuestActive[#self.tbQuestActive].Point
|
||||
self.nTotalActiveCount = nMaxAct
|
||||
self.nActiveCount = PlayerData.Reengagement:GetQuestPointInfo().Point or 0
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActValue, self.nActiveCount)
|
||||
for k, v in ipairs(self.tbQuestActive) do
|
||||
if self._mapNode.btnNodeItem[k] ~= nil then
|
||||
local bReceived = PlayerData.Reengagement:CheckPointRewardReceived(v.Index)
|
||||
self._mapNode.item[k]:SetItem(v.Reward1Tid, nil, v.Reward1Qty, nil, bReceived)
|
||||
local node = self._mapNode.btnNodeItem[k]
|
||||
local nPosX = math.min(k / #self.tbQuestActive * totalNodeLength, totalNodeLength)
|
||||
node.transform:GetComponent("RectTransform").anchoredPosition = Vector2(nPosX, actNodeItemHeight)
|
||||
node.gameObject:SetActive(true)
|
||||
local txtNodeAct = node.transform:Find("AnimRoot/goNodeItem/txtNodeAct"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txtNodeAct, v.Active)
|
||||
local imgNodeAct1 = node.transform:Find("AnimRoot/goNodeItem/imgNumNml")
|
||||
local imgNodeAct2 = node.transform:Find("AnimRoot/goNodeItem/imgNumSel")
|
||||
local txtNodeAct1 = node.transform:Find("AnimRoot/goNodeItem/imgNumNml/txtNmlValue"):GetComponent("TMP_Text")
|
||||
local txtNodeAct2 = node.transform:Find("AnimRoot/goNodeItem/imgNumSel/txtSelValue"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txtNodeAct1, v.Point)
|
||||
NovaAPI.SetTMPText(txtNodeAct2, v.Point)
|
||||
local anim = node.transform:Find("AnimRoot"):GetComponent("Animator")
|
||||
local imgGift = node.transform:Find("AnimRoot/goNodeItem/imgGift")
|
||||
local imgComplete = node.transform:Find("AnimRoot/goNodeItem/imgComplete")
|
||||
local goParticle1 = node.transform:Find("AnimRoot/goNodeItem/UIParticle1")
|
||||
local goParticle2 = node.transform:Find("AnimRoot/goNodeItem/UIParticle2")
|
||||
local bReceived = PlayerData.Quest:CheckDailyActiveReceive(v.Id)
|
||||
local bComplete = v.Active <= self.nActiveCount
|
||||
imgGift.gameObject:SetActive(not bReceived)
|
||||
imgComplete.gameObject:SetActive(bReceived)
|
||||
local bComplete = v.Point <= self.nActiveCount and not bReceived
|
||||
imgNodeAct1.gameObject:SetActive(not bReceived)
|
||||
imgNodeAct2.gameObject:SetActive(bReceived)
|
||||
goParticle1.gameObject:SetActive(not bReceived and bComplete)
|
||||
goParticle2.gameObject:SetActive(not bReceived and bComplete)
|
||||
if bComplete and not bReceived then
|
||||
table.insert(self.tbCanReceiveAct, k)
|
||||
end
|
||||
if not bReceived and bComplete then
|
||||
anim:Play("Quest_btnNodeComplete_loop", 0, 0)
|
||||
else
|
||||
@@ -234,38 +257,27 @@ function ReengagementTaskCtrl:RefreshActivityNode()
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.btnActReceive.gameObject:SetActive(#self.tbCanReceiveAct > 0)
|
||||
self._mapNode.txtActComplete.gameObject:SetActive(bAllComplete and not (#self.tbCanReceiveAct > 0))
|
||||
self._mapNode.btnActReceiveGray.gameObject:SetActive(not bAllComplete and not (#self.tbCanReceiveAct > 0))
|
||||
local nWidth = math.min(self.nActiveCount / nMaxAct * totalLength, totalLength)
|
||||
self._mapNode.rtActProgressFill.sizeDelta = Vector2(nWidth, totalHeight)
|
||||
end
|
||||
function ReengagementTaskCtrl:InitActData(actData, bResetGroup)
|
||||
self.actData = actData
|
||||
if bResetGroup then
|
||||
function ReengagementTaskCtrl:InitActData(bResetGroup)
|
||||
if bResetGroup or self._panel.nSelectGroup == nil or self._panel.nSelectGroup == 0 then
|
||||
self._panel.nSelectGroup = nil
|
||||
end
|
||||
self.nActId = actData:GetActId()
|
||||
self.nActId = PlayerData.Reengagement:GetActId()
|
||||
self.bQuestAnim = false
|
||||
self:InitGroupList()
|
||||
local tbAllQuestList = self.actData:GetQuestListByGroup()
|
||||
if nil == tbAllQuestList[self._panel.nSelectGroup] then
|
||||
if nil == PlayerData.Reengagement:GetQuestListByGroup(self._panel.nSelectGroup + 100) then
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Tips,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1")
|
||||
})
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
return
|
||||
end
|
||||
local actCfg = self.actData:GetActCfgData()
|
||||
if actCfg.EndType == GameEnum.activityEndType.NoLimit then
|
||||
self._mapNode.goActTime.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
self._mapNode.goActTime.gameObject:SetActive(true)
|
||||
self:RefreshRemainTime()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshRemainTime", true, true, false)
|
||||
end
|
||||
end
|
||||
function ReengagementTaskCtrl:Awake()
|
||||
@@ -289,6 +301,10 @@ function ReengagementTaskCtrl:OnDestroy()
|
||||
end
|
||||
function ReengagementTaskCtrl:OnRelease()
|
||||
end
|
||||
function ReengagementTaskCtrl:OnRefreshGroup()
|
||||
self:InitGroupList()
|
||||
self:RefreshRemainTime()
|
||||
end
|
||||
function ReengagementTaskCtrl:OnBtnClick_Group(_, nIndex)
|
||||
if self._panel.nSelectGroup == nIndex then
|
||||
return
|
||||
@@ -296,7 +312,7 @@ function ReengagementTaskCtrl:OnBtnClick_Group(_, nIndex)
|
||||
if nIndex > self.nMaxOpenGroup then
|
||||
return
|
||||
end
|
||||
if nil == self.tbAllQuestList[nIndex] or nil == next(self.tbAllQuestList[nIndex]) then
|
||||
if nil == PlayerData.Reengagement:GetQuestConfigDataByGroup(nIndex + 100) or nil == next(PlayerData.Reengagement:GetQuestConfigDataByGroup(nIndex + 100)) then
|
||||
printError(string.format("当前任务组下没有任务!!! 活动id = %d, 任务组 = %s", self.nActId, nIndex))
|
||||
return
|
||||
end
|
||||
@@ -312,7 +328,7 @@ function ReengagementTaskCtrl:OnBtnClick_GroupLock()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("PerActivity_Not_Open"))
|
||||
end
|
||||
function ReengagementTaskCtrl:OnBtnClick_Detail()
|
||||
local perQuestActCfg = self.actData:GetPerQuestCfg()
|
||||
local perQuestActCfg = PlayerData.Reengagement:GetActDetail(AllEnum.ReengagementTog.Task)
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = perQuestActCfg.DesText,
|
||||
@@ -320,11 +336,16 @@ function ReengagementTaskCtrl:OnBtnClick_Detail()
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function ReengagementTaskCtrl:OnBtnClick_QuickRec()
|
||||
local callback = function()
|
||||
EventManager.Hit("RefreshPeriodicAct", self.nActId)
|
||||
PlayerData.Base:TryOpenWorldClassUpgrade()
|
||||
function ReengagementTaskCtrl:OnBtnClick_NodeItem(btn, index)
|
||||
if PlayerData.Reengagement:CheckPointRewardReceived(index) then
|
||||
UTILS.ClickItemGridWithTips(self.tbQuestActive[index].Reward1Tid, btn.transform, true, true, false)
|
||||
return
|
||||
end
|
||||
if self.nActiveCount >= self.tbQuestActive[index].Point then
|
||||
PlayerData.Reengagement:RequestReceiveQuestPointReward(index)
|
||||
else
|
||||
UTILS.ClickItemGridWithTips(self.tbQuestActive[index].Reward1Tid, btn.transform, true, true, false)
|
||||
return
|
||||
end
|
||||
PlayerData.Activity:SendReceivePerQuest(self.nActId, 0, callback)
|
||||
end
|
||||
return ReengagementTaskCtrl
|
||||
|
||||
@@ -10,9 +10,10 @@ ReengagementTaskGroupCtrl._mapNodeConfig = {
|
||||
imgComplete = {}
|
||||
}
|
||||
ReengagementTaskGroupCtrl._mapEventConfig = {}
|
||||
function ReengagementTaskGroupCtrl:Init(nActId, nGroup, nCurGroup)
|
||||
function ReengagementTaskGroupCtrl:Init(nActId, nGroup, nCurGroup, bAllReceived)
|
||||
self.nActId = nActId
|
||||
self.nGroup = nGroup
|
||||
self.nGroupId = 100 < nGroup and nGroup or nGroup + 100
|
||||
for _, v in ipairs(self._mapNode.txt_Group) do
|
||||
NovaAPI.SetTMPText(v, self.nGroup)
|
||||
end
|
||||
@@ -23,14 +24,17 @@ function ReengagementTaskGroupCtrl:Init(nActId, nGroup, nCurGroup)
|
||||
self._mapNode.redDotGroup.gameObject:SetActive(false)
|
||||
self.bUnlock = nGroup <= nCurGroup
|
||||
self:SetSelect(false)
|
||||
self._mapNode.imgComplete.gameObject:SetActive(bAllReceived)
|
||||
self._mapNode.goNormal.gameObject:SetActive(nGroup <= nCurGroup)
|
||||
self._mapNode.goLock.gameObject:SetActive(nCurGroup < nGroup)
|
||||
self:RegisterRedDot()
|
||||
if nGroup <= nCurGroup then
|
||||
self:RegisterRedDot()
|
||||
end
|
||||
end
|
||||
function ReengagementTaskGroupCtrl:RegisterRedDot()
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_Reengagement_Task_Group, {
|
||||
self.nActId,
|
||||
self.nGroup
|
||||
self.nGroupId
|
||||
}, self._mapNode.redDotGroup)
|
||||
end
|
||||
function ReengagementTaskGroupCtrl:SetTime(sTime)
|
||||
@@ -43,7 +47,7 @@ function ReengagementTaskGroupCtrl:SetSelect(bSelect)
|
||||
self._mapNode.goSelect.gameObject:SetActive(self.bSelect)
|
||||
end
|
||||
function ReengagementTaskGroupCtrl:RefreshStatus(bAllReceived)
|
||||
self._mapNode.imgComplete.gameObject:SetActive(bAllReceived and self.bUnlock)
|
||||
self._mapNode.imgComplete.gameObject:SetActive(bAllReceived)
|
||||
end
|
||||
function ReengagementTaskGroupCtrl:Awake()
|
||||
end
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
local TemplateToggleReengagementCtrl = class("TemplateToggleReengagementCtrl", BaseCtrl)
|
||||
TemplateToggleReengagementCtrl._mapNodeConfig = {
|
||||
AnimSwitch = {sComponentName = "Animator"},
|
||||
txt_Select = {sComponentName = "TMP_Text"},
|
||||
txt_unSelect = {sComponentName = "TMP_Text"},
|
||||
Select = {},
|
||||
unSelect = {},
|
||||
reddotTog = {}
|
||||
}
|
||||
TemplateToggleReengagementCtrl._mapEventConfig = {}
|
||||
function TemplateToggleReengagementCtrl:SetText(sText)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Select, sText)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_unSelect, sText)
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:SetDefault(bOn)
|
||||
if self._mapNode.AnimSwitch.enabled == true then
|
||||
self._mapNode.AnimSwitch.enabled = false
|
||||
end
|
||||
self._mapNode.Select:SetActive(bOn)
|
||||
self._mapNode.unSelect:SetActive(not bOn)
|
||||
self._mapNode.txt_Select.gameObject:SetActive(bOn)
|
||||
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_Select, White_Normal)
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_unSelect, Blue_Normal)
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:SetDefaultDorm(bOn)
|
||||
if self._mapNode.AnimSwitch.enabled == true then
|
||||
self._mapNode.AnimSwitch.enabled = false
|
||||
end
|
||||
self._mapNode.Select:SetActive(bOn)
|
||||
self._mapNode.unSelect:SetActive(not bOn)
|
||||
self._mapNode.txt_Select.gameObject:SetActive(bOn)
|
||||
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:SetDefaultAct10101(bOn)
|
||||
if self._mapNode.AnimSwitch.enabled == true then
|
||||
self._mapNode.AnimSwitch.enabled = false
|
||||
end
|
||||
self._mapNode.Select:SetActive(bOn)
|
||||
self._mapNode.unSelect:SetActive(not bOn)
|
||||
self._mapNode.txt_Select.gameObject:SetActive(bOn)
|
||||
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_Select, Color(1, 1, 1, 1))
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_unSelect, Color(0.2196078431372549, 0.1803921568627451, 0.1450980392156863, 1))
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:SetDefaultActivity(bOn, colorSelect, colorUnSelect)
|
||||
if self._mapNode.AnimSwitch.enabled == true then
|
||||
self._mapNode.AnimSwitch.enabled = false
|
||||
end
|
||||
self._mapNode.Select:SetActive(bOn)
|
||||
self._mapNode.unSelect:SetActive(not bOn)
|
||||
self._mapNode.txt_Select.gameObject:SetActive(bOn)
|
||||
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
|
||||
if colorSelect ~= nil then
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_Select, colorSelect)
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_unSelect, colorUnSelect)
|
||||
end
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:SetTrigger(bOn)
|
||||
if self._mapNode.AnimSwitch.enabled == false then
|
||||
self._mapNode.AnimSwitch.enabled = true
|
||||
end
|
||||
if bOn then
|
||||
self._mapNode.AnimSwitch:SetTrigger("tOn")
|
||||
else
|
||||
self._mapNode.AnimSwitch:SetTrigger("tOff")
|
||||
end
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:ResetTrigger()
|
||||
if self._mapNode.AnimSwitch.enabled == false then
|
||||
self._mapNode.AnimSwitch.enabled = true
|
||||
end
|
||||
self._mapNode.AnimSwitch:ResetTrigger("tOff")
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:SetReddot(sKey, param)
|
||||
self:UnRegisterReddot()
|
||||
if sKey == nil then
|
||||
return
|
||||
end
|
||||
self.sReddotKey = sKey
|
||||
self.mapReddotParam = param
|
||||
RedDotManager.RegisterNode(sKey, param, self._mapNode.reddotTog)
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:UnRegisterReddot()
|
||||
if self.sReddotKey ~= nil then
|
||||
RedDotManager.UnRegisterNode(self.sReddotKey, self.mapReddotParam, self._mapNode.reddotTog)
|
||||
end
|
||||
self.sReddotKey = nil
|
||||
self.mapReddotParam = nil
|
||||
end
|
||||
function TemplateToggleReengagementCtrl:OnEnable()
|
||||
self._mapNode.reddotTog:SetActive(false)
|
||||
end
|
||||
return TemplateToggleReengagementCtrl
|
||||
Reference in New Issue
Block a user