local RewardListCtrl = class("RewardListCtrl", BaseCtrl) RewardListCtrl._mapNodeConfig = { txtWindowTitle = { sComponentName = "TMP_Text", sLanguageId = "Instance_Reward_Preview_Title" }, rewardList = { sComponentName = "LoopScrollView" }, btnCloseRewardList = { sComponentName = "UIButton", callback = "OnBtnClickClose" }, btnBlur = { sNodeName = "snapshot", sComponentName = "Button", callback = "OnBtnClickClose" }, animWindow = {sNodeName = "t_window", sComponentName = "Animator"}, goWindow = {sNodeName = "t_window"} } RewardListCtrl._mapEventConfig = {} function RewardListCtrl:Awake() self._mapNode.goWindow:SetActive(false) end function RewardListCtrl:FadeOut() end function RewardListCtrl:OnEnable() end function RewardListCtrl:OnDisable() end function RewardListCtrl:OnDestroy() end function RewardListCtrl:OnRelease() end function RewardListCtrl:OpenPanel(tbReward, tbExtraDropReward) self._mapNode.goWindow:SetActive(false) self._mapNode.btnBlur.gameObject:SetActive(true) self.gameObject:SetActive(true) self._mapGrid = {} self.tbReward = {} local extraDropRewardCount = 0 if tbExtraDropReward ~= nil then for k, v in pairs(tbExtraDropReward) do extraDropRewardCount = extraDropRewardCount + 1 end end local needEx = tbExtraDropReward ~= nil and 0 < extraDropRewardCount local bBeforebFirstPass = true for i = 1, #tbReward do local bCurFirstPass = tbReward[i][3] ~= nil and tbReward[i][3] == 1 if not bCurFirstPass and bBeforebFirstPass and needEx then tbExtraDropReward[6] = true table.insert(self.tbReward, tbExtraDropReward) needEx = false end bBeforebFirstPass = bCurFirstPass table.insert(self.tbReward, tbReward[i]) end if needEx then tbExtraDropReward[6] = true table.insert(self.tbReward, tbExtraDropReward) end local wait = function() coroutine.yield(CS.UnityEngine.WaitForEndOfFrame()) self._mapNode.goWindow:SetActive(true) self._mapNode.animWindow:Play("t_window_04_t_in") self._mapNode.rewardList:SetAnim(0.04) self._mapNode.rewardList:Init(#self.tbReward, self, self.OnGridRefresh, self.OnGridBtnClick) end cs_coroutine.start(wait) end function RewardListCtrl:OnGridRefresh(goGrid, gridIndex) local nIdx = gridIndex + 1 if self._mapGrid[goGrid] == nil then local goItem = goGrid.transform:Find("btnGrid/AnimRoot/gridRt/Item").gameObject self._mapGrid[goGrid] = self:BindCtrlByNode(goItem, "Game.UI.TemplateEx.TemplateItemCtrl") end local tbItem = self.tbReward[nIdx] local nRewardTypeIndex, nReceiveIndex, nShowCountIndex, nExtraDropIndex = 3, 4, 5, 6 local bFloatCount = type(tbItem[4]) == "number" if bFloatCount then nRewardTypeIndex = 4 nReceiveIndex = 5 nShowCountIndex = 6 nExtraDropIndex = 7 end local bReceived = tbItem[nReceiveIndex] == true local nRewardType = tbItem[nRewardTypeIndex] or 0 local bExtraDrop = tbItem[nExtraDropIndex] == true local nCount = -1 if tbItem[nShowCountIndex] ~= false then local tbItemCount = bFloatCount and { tbItem[1], tbItem[2], tbItem[3], tbItem[4] } or { tbItem[1], tbItem[2], tbItem[3] } nCount = UTILS.ParseRewardItemCount(tbItemCount) end self._mapGrid[goGrid]:SetItem(tbItem[1], nil, nCount, nil, bReceived, nRewardType == 1, nRewardType == 2, false, false, false, bExtraDrop == true) end function RewardListCtrl:OnGridBtnClick(goGrid, gridIndex) local nIdx = gridIndex + 1 local rtItem = goGrid.transform:Find("btnGrid/AnimRoot/gridRt/Item") local nTid = self.tbReward[nIdx][1] UTILS.ClickItemGridWithTips(nTid, rtItem, true, true, false) end function RewardListCtrl:OnBtnClickClose(btn) self._mapNode.btnBlur.gameObject:SetActive(false) local nAnimTime = NovaAPI.GetAnimClipLength(self._mapNode.animWindow, { "t_window_04_t_out" }) self._mapNode.animWindow:Play("t_window_04_t_out") self:AddTimer(1, nAnimTime, function() self.gameObject:SetActive(false) for goGrid, itemCtrl in pairs(self._mapGrid) do self:UnbindCtrlByNode(itemCtrl) end self._mapGrid = {} end) EventManager.Hit(EventId.TemporaryBlockInput, nAnimTime) end return RewardListCtrl