local BaseCtrl = require("GameCore.UI.BaseCtrl") local DustDawnThemeCtrl = class("DustDawnThemeCtrl", BaseCtrl) local ClientManager = CS.ClientManager.Instance local TimerManager = require("GameCore.Timer.TimerManager") local LocalData = require("GameCore.Data.LocalData") local WwiseAudioMgr = CS.WwiseAudioManager.Instance DustDawnThemeCtrl._mapNodeConfig = { goBg = {sNodeName = "---Bg---"}, TopBar = { sNodeName = "TopBarPanel", sCtrlName = "Game.UI.TopBarEx.TopBarCtrl" }, btnEntrance_ = { nCount = 7, sComponentName = "UIButton", callback = "OnBtn_ClickActivityEntrance" }, imgRemaineTime = {}, txtActivityTime = {sComponentName = "TMP_Text"}, txtActivityDate = {sComponentName = "TMP_Text"}, imgEnd = {}, txtActivityEnd = { sComponentName = "TMP_Text", sLanguageId = "Activity_End" }, imgMiniGame = {}, txtMiniGame = { sComponentName = "TMP_Text", sLanguageId = "MathParkour_PlayTitle" }, imgMiniGameEnd = {}, txtMiniGameEnd = { sComponentName = "TMP_Text", sLanguageId = "MathParkour_PlayTitle" }, txtMiniGame_End = {}, txtMiniGameEndState = { sComponentName = "TMP_Text", sLanguageId = "Activity_End" }, txtMiniGameActivityUnlockTime = {sComponentName = "TMP_Text"}, imgMiniGameActivityTime = {}, txtMiniGameActivityTime = {sComponentName = "TMP_Text"}, imgMiniGameActivityUnlockTime = {}, goMiniGameEnd = { sNodeName = "goMiniGameTxtEnd" }, txtTask = { sComponentName = "TMP_Text", sLanguageId = "Activity_Task" }, txtTaskProgress = {sComponentName = "TMP_Text"}, imgTaskActivityTime = {}, txtTaskActivityTime = {sComponentName = "TMP_Text"}, TaskEndState = { sNodeName = "txtTaskProgress_End" }, txtTaskEndState = { sComponentName = "TMP_Text", sLanguageId = "Activity_End" }, imgTaskEnd = {}, bgTaskTxtEnd = {}, txtTaskEnd = { sComponentName = "TMP_Text", sLanguageId = "Activity_Task" }, txtTaskProgress_End = { sNodeName = "txtTaskProgressEnd" }, imgTaskActivityUnlockTime = {}, txtTaskActivityUnlockTime = {sComponentName = "TMP_Text"}, txtTaskProgressEnd = {sComponentName = "TMP_Text"}, imgStory = {sComponentName = "Image"}, txtStory = { sComponentName = "TMP_Text", sLanguageId = "Activity_StoryName_20104" }, txtStory2 = { sComponentName = "TMP_Text", sLanguageId = "Activity_StoryNameTips_20104" }, txtShopEndState = { sComponentName = "TMP_Text", sLanguageId = "Activity_End" }, txtShop = { sComponentName = "TMP_Text", sLanguageId = "Activity_Shop" }, imgShopActivityTime = {}, txtShopActivityTime = {sComponentName = "TMP_Text"}, imgShopActivityUnlockTime = {}, txtShopActivityUnlockTime = {sComponentName = "TMP_Text"}, txtShopEnd = { sComponentName = "TMP_Text", sLanguageId = "Activity_Shop" }, imgShopEnd = {}, txtShop_End = {}, bgShopTxtEnd = {}, txtLevel = { sComponentName = "TMP_Text", sLanguageId = "Activity_Level" }, txtLevel_End = { sComponentName = "TMP_Text", sLanguageId = "Activity_Level" }, bgLevelTxtEnd = {}, goLevelEnd = {}, txtLevelEnd = { sComponentName = "TMP_Text", sLanguageId = "Activity_End" }, imgLevelActivityUnlockTime = {}, txtLevelActivityUnlockTime = {sComponentName = "TMP_Text"}, imgLevelEnd = {}, imgLevelActivityTime = {}, txtLevelActivityTime = {sComponentName = "TMP_Text"}, txtShow = { sComponentName = "TMP_Text", sLanguageId = "TravelerDuel_ChallengeTitle" }, imgShowEnd = {}, imgShowActivityTime = {}, txtShowActivityTime = {sComponentName = "TMP_Text"}, goShowEnd = {}, bgShowTxt_End = {}, txtShow_End = { sComponentName = "TMP_Text", sLanguageId = "TravelerDuel_ChallengeTitle" }, txtShowEnd = { sComponentName = "TMP_Text", sLanguageId = "Activity_End" }, imgShowActivityUnlockTime = {}, txtShowActivityUnlockTime = {sComponentName = "TMP_Text"}, imgShowLock = {}, txtLock = {sComponentName = "TMP_Text"}, imgFateCard = {sComponentName = "Image"}, txtFateCard = { sComponentName = "TMP_Text", sLanguageId = "Activity_Fate_Card_20104" }, imgFateCardEnd = {}, txtFateCardEnd = { sComponentName = "TMP_Text", sLanguageId = "Activity_Fate_Card_20104" }, txtFateCard_End = {}, goFateCardEnd = {}, txtFateCardEndState = { sComponentName = "TMP_Text", sLanguageId = "Activity_End" }, imgFateCardActivityUnlockTime = {}, txtFateCardActivityUnlockTime = {sComponentName = "TMP_Text"}, imgFateCardActivityTime = {}, txtFateCardActivityTime = {sComponentName = "TMP_Text"}, dbFateCardEnd = {}, miniGameRedDot = {}, redDotEntrance2 = {}, storyRedDot = {}, reddotLevel = {}, reddotShow = {}, reddotFatecard = {} } DustDawnThemeCtrl._mapEventConfig = {} local ActivityState = { NotOpen = 1, Open = 2, Closed = 3 } function DustDawnThemeCtrl:Awake() local param = self:GetPanelParam() if type(param) == "table" then self.nActId = param[1] end self.ActData = PlayerData.Activity:GetActivityGroupDataById(self.nActId) if self.ActData ~= nil then self.ActivityGroupCfg = self.ActData.actGroupConfig end self.tbBtnAnimator = {} end function DustDawnThemeCtrl:OnEnable() if #self.tbBtnAnimator == 0 then for k, v in pairs(self._mapNode.btnEntrance_) do local anim = v.transform:GetChild(0):GetComponent("Animator") if anim ~= nil and anim:IsNull() == false then table.insert(self.tbBtnAnimator, anim) end end end self:RefreshPanel() self:RegisterReddot() self:SetEnterState() end function DustDawnThemeCtrl:OnDisable() if nil ~= self.minigameRemainTimer then TimerManager.Remove(self.minigameRemainTimer) self.minigameRemainTimer = nil end if nil ~= self.remainTimer then TimerManager.Remove(self.remainTimer) self.remainTimer = nil end if nil ~= self.shopRemainTimer then TimerManager.Remove(self.shopRemainTimer) self.shopRemainTimer = nil end if nil ~= self.levelRemainTimer then TimerManager.Remove(self.levelRemainTimer) self.levelRemainTimer = nil end if nil ~= self.taskRemainTimer then TimerManager.Remove(self.taskRemainTimer) self.taskRemainTimer = nil end if nil ~= self.showRemainTimer then TimerManager.Remove(self.showRemainTimer) self.showRemainTimer = nil end if nil ~= self.fateCardRemainTimer then TimerManager.Remove(self.fateCardRemainTimer) self.fateCardRemainTimer = nil end for i = 1, #self.tbBtnAnimator do self.tbBtnAnimator[i] = nil end end function DustDawnThemeCtrl:RegisterReddot() for i = 1, 7 do local actData = self.ActData:GetActivityDataByIndex(i) local nActId = actData ~= nil and actData.ActivityId or 0 local state = self.tbActState[nActId] if nActId ~= nil and 0 < nActId and state ~= nil then if i == AllEnum.ActivityThemeFuncIndex.Task then if state == ActivityState.Closed then self._mapNode.redDotEntrance2:SetActive(false) else RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task, { self.nActId, nActId }, self._mapNode.redDotEntrance2) end elseif i == AllEnum.ActivityThemeFuncIndex.Level then RedDotManager.RegisterNode(RedDotDefine.ActivityLevel, { self.nActId, nActId }, self._mapNode.reddotLevel) elseif i == AllEnum.ActivityThemeFuncIndex.TrekkerVersus then local activityData = ConfigTable.GetData("Activity", actData.ActivityId) local nNeedWorldLevel = tonumber(activityData.LimitParam) or 0 if nNeedWorldLevel > PlayerData.Base:GetWorldClass() then self._mapNode.reddotShow:SetActive(false) else RedDotManager.RegisterNode(RedDotDefine.TrekkerVersus, { self.nActId, nActId }, self._mapNode.reddotShow) end elseif i == AllEnum.ActivityThemeFuncIndex.FateCard then if state == ActivityState.Closed then self._mapNode.reddotFatecard:SetActive(false) else RedDotManager.RegisterNode(RedDotDefine.Activity_Group_PenguinCard_Level, { self.nActId }, self._mapNode.reddotFatecard) end elseif i == AllEnum.ActivityThemeFuncIndex.MiniGame then if state == ActivityState.Closed then self._mapNode.miniGameRedDot:SetActive(false) else RedDotManager.RegisterNode(RedDotDefine.Activity_MathParkour_New, { actData.ActivityId }, self._mapNode.miniGameRedDot) end end end end end function DustDawnThemeCtrl:SetEnterState() local sAnimName = "DustDawnPanel_Pullback" local sAnimName_Bt = "btnEntrance_Full_in" local sAudioName = "Mode_20104_activity" local nAnimLength = 0.1 if self.bFirstEnter then sAnimName = "" if self.nEnterType ~= nil then if self.nEnterType == AllEnum.ActivityThemeFuncIndex.Level or self.nEnterType == AllEnum.ActivityThemeFuncIndex.TrekkerVersus or self.nEnterType == AllEnum.ActivityThemeFuncIndex.Task then sAnimName = "DustDawnPanel_Full_Right" elseif self.nEnterType == AllEnum.ActivityThemeFuncIndex.Story or self.nEnterType == AllEnum.ActivityThemeFuncIndex.MiniGame or self.nEnterType == AllEnum.ActivityThemeFuncIndex.FateCard or self.nEnterType == AllEnum.ActivityThemeFuncIndex.Shop then sAnimName = "DustDawnPanel_Full_Left" end end sAnimName_Bt = "btnEntrance_in" sAudioName = "Mode_20104_activity_01" end self.bFirstEnter = true self.animRoot = self.gameObject:GetComponent("Animator") if sAnimName ~= "" then self.animRoot:Play(sAnimName, 0, 0) nAnimLength = NovaAPI.GetAnimClipLength(self.animRoot, {sAnimName}) end WwiseAudioMgr:PostEvent(sAudioName) EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength) for k, v in pairs(self.tbBtnAnimator) do v.enabled = true if k ~= AllEnum.ActivityThemeFuncIndex.Story then local actData = self.ActData:GetActivityDataByIndex(k) if actData == nil then v:Play(sAnimName_Bt) else local state = self.ActData:GetActivityEntranceState(actData.ActivityId) if state == ActivityState.Closed then v:Play(sAnimName_Bt .. "_lock") else v:Play(sAnimName_Bt) end end else v:Play(sAnimName_Bt) end end end function DustDawnThemeCtrl:RefreshPanel() if self.ActData == nil or self.ActivityGroupCfg == nil then return end self:RefreshTime() self:RefreshButtonState() end function DustDawnThemeCtrl:RefreshTime() local bOpen = self.ActData:CheckActivityGroupOpen() if bOpen then self:RefreshRemainTime(self.ActData:GetActGroupEndTime(), self._mapNode.txtActivityTime) if nil == self.remainTimer then self.remainTimer = self:AddTimer(0, 1, function() local remainTime = self:RefreshRemainTime(self.ActData:GetActGroupEndTime(), self._mapNode.txtActivityTime) if remainTime <= 0 then TimerManager.Remove(self.remainTimer) self.remainTimer = nil end end, true, true, false) end end self._mapNode.imgRemaineTime:SetActive(bOpen) self._mapNode.imgEnd:SetActive(not bOpen) local nOpenMonth, nOpenDay, nEndMonth, nEndDay, nOpenYear, nEndYear = self.ActData:GetActGroupDate() local strOpenDay = string.format("%d", nOpenDay) local strEndDay = string.format("%d", nEndDay) local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay) NovaAPI.SetTMPText(self._mapNode.txtActivityDate, dateStr) end function DustDawnThemeCtrl:RefreshRemainTime(endTime, txtComp) local curTime = ClientManager.serverTimeStamp local remainTime = endTime - curTime 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(txtComp, sTimeStr) return remainTime end function DustDawnThemeCtrl:RefreshRemainOpenTime(openTime) local curTime = ClientManager.serverTimeStamp local remainTime = openTime - curTime local sTimeStr = "" if remainTime <= 60 then local sec = math.floor(remainTime) sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Sec") or "", sec) elseif 60 < remainTime and remainTime <= 3600 then local min = math.floor(remainTime / 60) sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Min") or "", min) elseif 3600 < remainTime and remainTime <= 86400 then local hour = math.floor(remainTime / 3600) sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time") or "", hour) elseif 86400 < remainTime then local day = math.floor(remainTime / 86400) sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Open_Time_Day") or "", day) end return sTimeStr end function DustDawnThemeCtrl:RefreshButtonState() self.tbActState = {} for i = 1, 7 do local actData = self.ActData:GetActivityDataByIndex(i) if i == AllEnum.ActivityThemeFuncIndex.MiniGame then self:RefreshMiniGameButtonState(actData) elseif i == AllEnum.ActivityThemeFuncIndex.Task then self:RefreshTaskButtonState(actData) elseif i == AllEnum.ActivityThemeFuncIndex.Level then self:RefreshLevelButtonState(actData) elseif i == AllEnum.ActivityThemeFuncIndex.Shop then self:RefreshShopButtonState(actData) elseif i == AllEnum.ActivityThemeFuncIndex.TrekkerVersus then self:RefreshOtherButtonState(actData) elseif i == AllEnum.ActivityThemeFuncIndex.FateCard then self:RefreshFateCardButtonState(actData) end end self:RefreshStoryButtonState_special() end function DustDawnThemeCtrl:RefreshButtonTimer(actData, timer, txtTrans, imgTrans, refreshFunc) local countDownTimer local activityId = actData.ActivityId local state, bShowCountDown, openTime, endTime = self.ActData:GetActivityEntranceTimerData(activityId) if state == ActivityState.NotOpen then if nil == timer and openTime ~= nil then local fcTimer = function() local curTime = ClientManager.serverTimeStamp local remainTime = openTime - curTime if 0 < remainTime then local sTimeStr = self:RefreshRemainOpenTime(openTime) local txtUnlock = imgTrans:GetComponentInChildren(typeof(CS.TMPro.TMP_Text)) if txtUnlock ~= nil then NovaAPI.SetTMPText(txtUnlock, sTimeStr) end else imgTrans:SetActive(false) TimerManager.Remove(countDownTimer) countDownTimer = nil self.tbActState[activityId] = ActivityState.Open refreshFunc(actData) self:RefreshActivityData() end end fcTimer() countDownTimer = self:AddTimer(0, 1, fcTimer, true, true, false) end elseif state == ActivityState.Open and endTime ~= nil and timer == nil and bShowCountDown then self:RefreshRemainTime(endTime, txtTrans) local fcTimer = function() local remainTime = self:RefreshRemainTime(endTime, txtTrans) if remainTime <= 0 then TimerManager.Remove(countDownTimer) countDownTimer = nil refreshFunc(actData) end end fcTimer() countDownTimer = self:AddTimer(0, 1, fcTimer, true, true, false) end return state, bShowCountDown, countDownTimer end function DustDawnThemeCtrl:RefreshMiniGameButtonState(actData) local activityId = actData.ActivityId local activityData = ConfigTable.GetData("Activity", activityId) if activityData ~= nil then local refreshFunc = function(actData) self:RefreshMiniGameButtonState(actData) end local state, bShowCountDown, countDownTimer = self:RefreshButtonTimer(actData, self.minigameRemainTimer, self._mapNode.txtMiniGameActivityTime, self._mapNode.imgMiniGameActivityUnlockTime, refreshFunc) if self.minigameRemainTimer == nil then self.minigameRemainTimer = countDownTimer end self._mapNode.imgMiniGameActivityUnlockTime:SetActive(state == ActivityState.NotOpen) self._mapNode.imgMiniGameActivityTime.gameObject:SetActive(state == ActivityState.Open and bShowCountDown) self._mapNode.imgMiniGameEnd:SetActive(state == ActivityState.Closed) self._mapNode.txtMiniGame_End:SetActive(state == ActivityState.Closed) self._mapNode.txtMiniGameEnd.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.goMiniGameEnd.gameObject:SetActive(state == ActivityState.Closed) self.tbActState[activityId] = state end end function DustDawnThemeCtrl:RefreshTaskButtonState(actData) local activityId = actData.ActivityId local actInsData = PlayerData.Activity:GetActivityDataById(activityId) local activityData = ConfigTable.GetData("Activity", activityId) if activityData ~= nil then local refreshFunc = function(actData) if actInsData ~= nil then actInsData:RefreshTaskRedDot() end self:RefreshTaskButtonState(actData) end local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.taskRemainTimer, self._mapNode.txtTaskActivityTime, self._mapNode.imgTaskActivityUnlockTime, refreshFunc) if self.taskRemainTimer == nil then self.taskRemainTimer = countDowmTimer end if state == ActivityState.Closed and actInsData ~= nil then actInsData:RefreshTaskRedDot() end self._mapNode.imgTaskActivityTime:SetActive(state == ActivityState.Open and bShowCountDown) self._mapNode.txtTaskProgress_End:SetActive(state == ActivityState.Closed) self._mapNode.imgTaskEnd.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.bgTaskTxtEnd.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.TaskEndState.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.txtTaskEnd.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.imgTaskActivityUnlockTime:SetActive(state == ActivityState.NotOpen) self.tbActState[activityId] = state local ActivityTaskData = PlayerData.Activity:GetActivityDataById(activityId) local nDone, nTotal = 0, 0 if ActivityTaskData ~= nil then nDone, nTotal = ActivityTaskData:CalcTotalProgress() end local progress = string.format("%d/%d", nDone, nTotal) NovaAPI.SetTMPText(self._mapNode.txtTaskProgress, progress) NovaAPI.SetTMPText(self._mapNode.txtTaskProgressEnd, progress) end end function DustDawnThemeCtrl:RefreshStoryButtonState_special() if self:IsStoryRefresh() then self:CheckStoryRedNode() self._mapNode.txtStory2.gameObject:SetActive(false) else self._mapNode.storyRedDot.gameObject:SetActive(false) self._mapNode.txtStory2.gameObject:SetActive(true) end end function DustDawnThemeCtrl:IsStoryRefresh() local curTime = CS.ClientManager.Instance.serverTimeStamp local time = ConfigTable.GetConfigValue("StoryUnlockTime", "") local openTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(time) return curTime > openTime end function DustDawnThemeCtrl:RefreshLevelButtonState(actData) local activityId = actData.ActivityId local activityData = ConfigTable.GetData("Activity", activityId) if activityData ~= nil then local refreshFunc = function(actData) local activityLevelsData = PlayerData.Activity:GetActivityDataById(activityId) if nil ~= activityLevelsData then activityLevelsData:ChangeAllRedHot() end self:RefreshLevelButtonState(actData) end local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.levelRemainTimer, self._mapNode.txtLevelActivityTime, self._mapNode.imgLevelActivityUnlockTime, refreshFunc) if self.levelRemainTimer == nil then self.levelRemainTimer = countDowmTimer end if state == ActivityState.Closed then local activityLevelsData = PlayerData.Activity:GetActivityDataById(activityId) if nil ~= activityLevelsData then activityLevelsData:ChangeAllRedHot() end end self._mapNode.imgLevelActivityTime:SetActive(state == ActivityState.Open and bShowCountDown) self._mapNode.imgLevelActivityUnlockTime:SetActive(state == ActivityState.NotOpen) self._mapNode.imgLevelEnd:SetActive(state == ActivityState.Closed) self._mapNode.bgLevelTxtEnd:SetActive(state == ActivityState.Closed) self._mapNode.goLevelEnd:SetActive(state == ActivityState.Closed) self._mapNode.txtLevel_End.gameObject:SetActive(state == ActivityState.Closed) self.tbActState[activityId] = state end end function DustDawnThemeCtrl:RefreshShopButtonState(actData) local activityId = actData.ActivityId local activityData = ConfigTable.GetData("Activity", activityId) if activityData ~= nil then local refreshFunc = function(actData) self:RefreshShopButtonState(actData) end local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.shopRemainTimer, self._mapNode.txtShopActivityTime, self._mapNode.imgShopActivityUnlockTime, refreshFunc) if self.shopRemainTimer == nil then self.shopRemainTimer = countDowmTimer end self._mapNode.imgShopActivityTime:SetActive(state == ActivityState.Open and bShowCountDown) self._mapNode.imgShopActivityUnlockTime:SetActive(state == ActivityState.NotOpen) self._mapNode.txtShopEnd.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.imgShopEnd:SetActive(state == ActivityState.Closed) self._mapNode.txtShop_End:SetActive(state == ActivityState.Closed) self._mapNode.bgShopTxtEnd:SetActive(state == ActivityState.Closed) self.tbActState[activityId] = state end end function DustDawnThemeCtrl:RefreshOtherButtonState(actData) local activityId = actData.ActivityId local activityData = ConfigTable.GetData("Activity", activityId) if activityData ~= nil then local nNeedWorldLevel = tonumber(activityData.LimitParam) or 0 local bNeedLv = nNeedWorldLevel <= PlayerData.Base:GetWorldClass() local refreshFunc = function(actData) self:RefreshOtherButtonState(actData) end local state, bShowCountDown, countDowmTimer if bNeedLv then state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.showRemainTimer, self._mapNode.txtShowActivityTime, self._mapNode.imgShowActivityUnlockTime, refreshFunc) if self.showRemainTimer == nil then self.showRemainTimer = countDowmTimer end else state = ActivityState.NotOpen end self._mapNode.imgShowActivityTime:SetActive(state == ActivityState.Open and bShowCountDown) self._mapNode.imgShowActivityUnlockTime:SetActive(state == ActivityState.NotOpen and bNeedLv) self._mapNode.imgShowEnd:SetActive(state == ActivityState.Closed or not bNeedLv) self._mapNode.txtShow.gameObject:SetActive(state ~= ActivityState.Closed and bNeedLv) self._mapNode.bgShowTxt_End.gameObject:SetActive(state == ActivityState.Closed or not bNeedLv) self._mapNode.txtShowEnd.gameObject:SetActive(state == ActivityState.Closed or not bNeedLv) self._mapNode.goShowEnd:SetActive(state == ActivityState.Closed) self._mapNode.imgShowLock:SetActive(state == ActivityState.NotOpen and not bNeedLv) local txtLock = orderedFormat(ConfigTable.GetUIText("ActivityEnter_Lock"), nNeedWorldLevel) NovaAPI.SetTMPText(self._mapNode.txtLock, txtLock) self.tbActState[activityId] = state end end function DustDawnThemeCtrl:RefreshFateCardButtonState(actData) local activityId = actData.ActivityId local activityData = ConfigTable.GetData("Activity", activityId) if activityData ~= nil then local refreshFunc = function(actData) self:RefreshFateCardButtonState(actData) end local state, bShowCountDown, countDowmTimer = self:RefreshButtonTimer(actData, self.fateCardRemainTimer, self._mapNode.txtFateCardActivityTime, self._mapNode.imgFateCardActivityUnlockTime, refreshFunc) if self.fateCardRemainTimer == nil then self.fateCardRemainTimer = countDowmTimer end self._mapNode.imgFateCardActivityUnlockTime:SetActive(state == ActivityState.NotOpen) self._mapNode.imgFateCardActivityTime.gameObject:SetActive(state == ActivityState.Open and bShowCountDown) self._mapNode.imgFateCardEnd:SetActive(state == ActivityState.Closed) self._mapNode.txtFateCard_End:SetActive(state == ActivityState.Closed) self._mapNode.txtFateCardEnd.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.goFateCardEnd.gameObject:SetActive(state == ActivityState.Closed) self._mapNode.dbFateCardEnd:SetActive(state == ActivityState.Closed) self.tbActState[activityId] = state end end function DustDawnThemeCtrl:RequireActivityData() if self.bRequiredActData then return end local callFunc = function() self.bRequireSucc = true self:RefreshPanel() end HttpNetHandler.SendMsg(NetMsgId.Id.activity_detail_req, {}, nil, callFunc) self.bRequiredActData = true self:AddTimer(1, 1, function() self.bRequiredActData = false end, true, true, true) end function DustDawnThemeCtrl:RefreshActivityData() if self.bRequiredActData then return end self:AddTimer(1, 3, function() self:RequireActivityData() end, true, true, true) end function DustDawnThemeCtrl:OnBtn_ClickActivityEntrance(btn, nIndex) self.nEnterType = nIndex if nIndex == AllEnum.ActivityThemeFuncIndex.Story then if self:IsStoryRefresh() then local sKey = "20104_StoryNewRedNode" LocalData.SetPlayerLocalData(sKey, false) self:CheckStoryRedNode() end local chapterId = 11 local isUnlock = PlayerData.Avg:IsStoryChapterUnlock(chapterId) if isUnlock then WwiseAudioMgr:PostEvent("Mode_20104_story_01") self.animRoot:Play("DustDawnPanel_Out_Left", 0, 0) local OutAnimFinish = function() EventManager.Hit(EventId.OpenPanel, PanelId.DustDawnStory, chapterId) end self:SetAnimationCallback(self.animRoot, OutAnimFinish) else local sLockReadTipsKey = "Mainline_Preview_Lock_Read_" .. chapterId if LocalData.GetPlayerLocalData(sLockReadTipsKey) then self.animRoot:Play("DustDawnPanel_Out_Left", 0, 0) WwiseAudioMgr:PostEvent("Mode_20104_story_01") local OutAnimFinish = function() EventManager.Hit(EventId.OpenPanel, PanelId.DustDawnStory, chapterId) end self:SetAnimationCallback(self.animRoot, OutAnimFinish) return end local sTip = ConfigTable.GetUIText("Mainline_Preview_Lock_Read") local msg = { nType = AllEnum.MessageBox.Confirm, sContent = sTip, callbackConfirm = function() self.animRoot:Play("DustDawnPanel_Out_Left", 0, 0) WwiseAudioMgr:PostEvent("Mode_20104_story_01") local OutAnimFinish = function() LocalData.SetPlayerLocalData(sLockReadTipsKey, true) EventManager.Hit(EventId.OpenPanel, PanelId.DustDawnStory, chapterId) end self:SetAnimationCallback(self.animRoot, OutAnimFinish) end } EventManager.Hit(EventId.OpenMessageBox, msg) end return end local actData = self.ActData:GetActivityDataByIndex(nIndex) if actData == nil then return end local bOpen, _state, _sTips, bNeedRefreshData = self.ActData:CheckActivityEntranceOpen(actData.ActivityId, actData.PanelId, true, self.bRequiredActData) if not bOpen then if bNeedRefreshData then self:RequireActivityData() end return end if nIndex == AllEnum.ActivityThemeFuncIndex.Level then self.animRoot:Play("DustDawnPanel_Out_Right", 0, 0) local OutAnimFinish = function() self.ActData:OpenActivityEntrance(actData.ActivityId, actData.PanelId) end self:SetAnimationCallback(self.animRoot, OutAnimFinish) end self.ActData:OpenActivityEntrance(actData.ActivityId, actData.PanelId) end function DustDawnThemeCtrl:CheckStoryRedNode() local sKey = "20104_StoryNewRedNode" local bIsFirst = LocalData.GetPlayerLocalData(sKey) if bIsFirst == nil then bIsFirst = true else bIsFirst = false end self._mapNode.storyRedDot.gameObject:SetActive(bIsFirst) end return DustDawnThemeCtrl