local StarTowerQuestGridCtrl = class("StarTowerQuestGridCtrl", BaseCtrl) local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder local totalLength = 472 local totalHeight = 37 local JumpUtil = require("Game.Common.Utils.JumpUtil") StarTowerQuestGridCtrl._mapNodeConfig = { rtTitle = { sComponentName = "RectTransform" }, btnGrid = {}, TMPTitle = {sComponentName = "TMP_Text"}, TMPProcess = {sComponentName = "TMP_Text"}, rtBarFill = { sComponentName = "RectTransform" }, btnReceive = { sComponentName = "UIButton", callback = "OnBtnClick_Receive" }, btnJump = { sComponentName = "UIButton", callback = "OnBtnClick_JumpTo" }, txtBtnReceive = { sComponentName = "TMP_Text", sLanguageId = "Quest_Receive" }, txtBtnJump = { sComponentName = "TMP_Text", sLanguageId = "Quest_JumpTo" }, TMPUncomplete = { sComponentName = "TMP_Text", sLanguageId = "Quest_undone" }, imgComplete = {}, imgCompleteMask = {}, btnReward = { nCount = 2, sComponentName = "UIButton", callback = "OnBtnClick_Reward" }, goItem = { nCount = 2, sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl" } } StarTowerQuestGridCtrl._mapEventConfig = {} function StarTowerQuestGridCtrl:OnEnable() self._mapNode.btnGrid:SetActive(false) local waitOpen = function() coroutine.yield(CS.UnityEngine.WaitForEndOfFrame()) if self._mapNode == nil then return end self._mapNode.btnGrid:SetActive(true) LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtTitle) end cs_coroutine.start(waitOpen) end function StarTowerQuestGridCtrl:Refresh(nQuestId, nState, nCur, nTotal, gridIndex) self.nQusetId = nQuestId self.gridIndex = gridIndex local mapQuest = ConfigTable.GetData("StarTowerQuest", nQuestId) if mapQuest == nil then printError("QuestData missing:" .. nQuestId) return end NovaAPI.SetTMPText(self._mapNode.TMPTitle, mapQuest.Title) if nState ~= 2 then NovaAPI.SetTMPText(self._mapNode.TMPProcess, string.format("%d/%d", nCur, nTotal)) else NovaAPI.SetTMPText(self._mapNode.TMPProcess, ConfigTable.GetUIText("Quest_Complete")) end self.mapQuset = mapQuest self._mapNode.rtBarFill.sizeDelta = Vector2(nCur / nTotal * totalLength, totalHeight) self._mapNode.btnReceive.gameObject:SetActive(nState == 1) self._mapNode.btnJump.gameObject:SetActive(nState == 0 and 0 < mapQuest.JumpTo) self._mapNode.TMPUncomplete.gameObject:SetActive(nState == 0 and mapQuest.JumpTo == 0) self._mapNode.imgComplete:SetActive(nState == 2) self._mapNode.imgCompleteMask:SetActive(nState == 2) for i = 1, 2 do self._mapNode.btnReward[i].gameObject:SetActive(0 < mapQuest["Reward" .. i]) if 0 < mapQuest["Reward" .. i] then self._mapNode.goItem[i]:SetItem(mapQuest["Reward" .. i], nil, mapQuest["RewardQty" .. i], nil, nil, nil, nil, true) end end LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtTitle) end function StarTowerQuestGridCtrl:OnBtnClick_Receive() PlayerData.Quest:ReceiveStarTowerReward(self.nQusetId) end function StarTowerQuestGridCtrl:OnBtnClick_JumpTo() local nJumptoId = self.mapQuset.JumpTo JumpUtil.JumpTo(nJumptoId) end function StarTowerQuestGridCtrl:OnBtnClick_Reward(btn, nIndex) local callback = function() local mapData = { nTid = self.mapQuset["Reward" .. nIndex], bShowDepot = true, bShowJumpto = true } EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData) end EventManager.Hit("StarTowerQuestClickGrid", self.gridIndex, callback) end return StarTowerQuestGridCtrl