local DoubleDropActQuestCtrl = class("DoubleDropActQuestCtrl", BaseCtrl) DoubleDropActQuestCtrl._mapNodeConfig = { goBlur = { sNodeName = "t_fullscreen_blur_blue" }, aniBlur = { sNodeName = "t_fullscreen_blur_blue", sComponentName = "Animator" }, goRoot = { sNodeName = "----SafeAreaRoot----", sComponentName = "Transform" }, btnFullClose = { sComponentName = "UIButton", callback = "OnBtnClick_Close" }, aniWindow = {sNodeName = "questPopup", sComponentName = "Animator"}, txtWindowTitle = { sComponentName = "TMP_Text", sLanguageId = "Double_Drops_Quest_Reward_Title" }, btnClose = { sComponentName = "UIButton", callback = "OnBtnClick_Close" }, sv = { sComponentName = "LoopScrollView" }, btn_GetAllReward = { sComponentName = "UIButton", callback = "OnBtnClick_GetAllReward" }, btn_GetAllReward_None = { sComponentName = "UIButton", callback = "OnBtnClick_GetAllReward" }, txt_GetAll = { nCount = 2, sComponentName = "TMP_Text", sLanguageId = "Double_Drops_Quest_Reward_Receive" } } DoubleDropActQuestCtrl._mapEventConfig = {} DoubleDropActQuestCtrl._mapRedDotConfig = {} local nQuestItemWidth = 756 local nMinWidth = 32 function DoubleDropActQuestCtrl:ShowQuestList() self.actData = PlayerData.Activity:GetActivityDataById(self.nActId) if self.actData == nil then return end self.tbItemCtrl = {} self:RefreshQuestList() self._mapNode.goRoot.gameObject:SetActive(false) self._mapNode.goBlur:SetActive(true) local wait = function() coroutine.yield(CS.UnityEngine.WaitForEndOfFrame()) self._mapNode.goRoot.gameObject:SetActive(true) self._mapNode.aniWindow:Play("t_window_04_t_in") EventManager.Hit(EventId.TemporaryBlockInput, 0.3) end cs_coroutine.start(wait) end function DoubleDropActQuestCtrl:RefreshQuestList() self.tbQuest = self.actData:GetAllQuests() table.sort(self.tbQuest, function(a, b) if a.nStatus == b.nStatus then return a.nId < b.nId end return a.nStatus < b.nStatus end) self._mapNode.sv:SetAnim(0.08) self._mapNode.sv:Init(#self.tbQuest, self, self.OnGridQuestRefresh, nil, false) self.bHasComQuest = false for _, v in ipairs(self.tbQuest) do if v.nStatus == AllEnum.ActQuestStatus.Complete then self.bHasComQuest = true break end end self._mapNode.btn_GetAllReward.gameObject:SetActive(self.bHasComQuest) self._mapNode.btn_GetAllReward_None.gameObject:SetActive(not self.bHasComQuest) end function DoubleDropActQuestCtrl:OnGridQuestRefresh(goGrid, gridIndex) local nIndex = gridIndex + 1 local instanceId = goGrid:GetInstanceID() local questData = self.tbQuest[nIndex] local goRoot = goGrid.transform:Find("btnGrid/AnimRoot/Root") local img_Received = goRoot.transform:Find("img_Received") local btn_item = goRoot.transform:Find("btn_item"):GetComponent("UIButton") local item = goRoot.transform:Find("btn_item/AnimRoot/item") if self.tbItemCtrl[instanceId] == nil then self.tbItemCtrl[instanceId] = self:BindCtrlByNode(item, "Game.UI.TemplateEx.TemplateItemCtrl") end local txtTarget = goRoot.transform:Find("txt_target"):GetComponent("TMP_Text") local txt_com1 = goRoot.transform:Find("txt_com1"):GetComponent("TMP_Text") local txt_com2 = goRoot.transform:Find("txt_com2"):GetComponent("TMP_Text") local bar = goRoot.transform:Find("imgBarBg/rtBarFill/imgMainBarFill"):GetComponent("RectTransform") local img_state1 = goRoot.transform:Find("img_state1").gameObject local img_state2 = goRoot.transform:Find("img_state2").gameObject local img_state3 = goRoot.transform:Find("img_state3").gameObject img_state1:SetActive(questData.nStatus == AllEnum.ActQuestStatus.Complete) img_state2:SetActive(questData.nStatus == AllEnum.ActQuestStatus.Received) img_state3:SetActive(questData.nStatus == AllEnum.ActQuestStatus.UnComplete) img_Received.gameObject:SetActive(questData.nStatus == AllEnum.ActQuestStatus.Received) btn_item.onClick:RemoveAllListeners() local questConfig = ConfigTable.GetData("ActivityDoubleQuest", questData.nId) if questConfig == nil then return end local itemId = questConfig.ItemId local itemCount = questConfig.ItemQty btn_item.onClick:AddListener(function() UTILS.ClickItemGridWithTips(itemId, btn_item.transform, true, true, false) end) self.tbItemCtrl[instanceId]:SetItem(itemId, nil, itemCount, false, questData.nStatus == AllEnum.ActQuestStatus.Received, false, false) NovaAPI.SetTMPText(txtTarget, questConfig.Desc) if questData.nStatus == AllEnum.ActQuestStatus.UnComplete then NovaAPI.SetTMPText(txt_com1, tostring(questData.progress.Cur) .. "/" .. tostring(questData.progress.Max)) NovaAPI.SetTMPText(txt_com2, tostring(questData.progress.Cur) .. "/" .. tostring(questData.progress.Max)) local nWidth = 0 if questData.progress.Cur > 0 then nWidth = math.max(nQuestItemWidth * (questData.progress.Cur / questData.progress.Max), nMinWidth) end bar.sizeDelta = Vector2(nWidth, bar.sizeDelta.y) else NovaAPI.SetTMPText(txt_com1, ConfigTable.GetUIText("BdConvert_QuestFinish")) NovaAPI.SetTMPText(txt_com2, ConfigTable.GetUIText("BdConvert_QuestFinish")) bar.sizeDelta = Vector2(nQuestItemWidth, bar.sizeDelta.y) end txt_com1.gameObject:SetActive(questData.nStatus ~= AllEnum.ActQuestStatus.Received) txt_com2.gameObject:SetActive(questData.nStatus == AllEnum.ActQuestStatus.Received) end function DoubleDropActQuestCtrl:Awake() end function DoubleDropActQuestCtrl:OnEnable() self.tbItemCtrl = {} local param = self:GetPanelParam() if type(param) == "table" then self.nActId = param[1] end if self.nActId then self:ShowQuestList() end end function DoubleDropActQuestCtrl:OnDisable() if self.tbItemCtrl ~= nil then for _, ctrl in pairs(self.tbItemCtrl) do self:UnbindCtrlByNode(ctrl) end end end function DoubleDropActQuestCtrl:OnDestroy() end function DoubleDropActQuestCtrl:OnBtnClick_Close() self._mapNode.aniBlur:SetTrigger("tOut") self._mapNode.aniWindow:Play("t_window_04_t_out") self:AddTimer(1, 0.2, function() EventManager.Hit(EventId.ClosePanel, PanelId.DoubleDropActQuestPanel_103001) end, true, true, true) EventManager.Hit(EventId.TemporaryBlockInput, 0.2) end function DoubleDropActQuestCtrl:OnBtnClick_GetAllReward() if self.actData == nil then return end if not self.bHasComQuest then EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("DoubleDrop_Reward_Receive_Tip")) return end local callback = function() self:RefreshQuestList() end self.actData:SendReceiveQuestReward(0, callback) end return DoubleDropActQuestCtrl