Files
Endfield-Data/LuaScripts/UI/Panels/DungeonRewardDetailsPopup/DungeonRewardDetailsPopupCtrl.lua
2025-12-02 20:37:18 +07:00

140 lines
4.1 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.DungeonRewardDetails
local PHASE_ID = PhaseId.DungeonRewardDetails
DungeonRewardDetailsPopupCtrl = HL.Class('DungeonRewardDetailsPopupCtrl', uiCtrl.UICtrl)
DungeonRewardDetailsPopupCtrl.m_dungeonId = HL.Field(HL.String) << ""
DungeonRewardDetailsPopupCtrl.m_firstPassRewardCellCache = HL.Field(HL.Forward("UIListCache"))
DungeonRewardDetailsPopupCtrl.m_recycleRewardCellCache = HL.Field(HL.Forward("UIListCache"))
DungeonRewardDetailsPopupCtrl.m_extraRewardCellCache = HL.Field(HL.Forward("UIListCache"))
DungeonRewardDetailsPopupCtrl.s_messages = HL.StaticField(HL.Table) << {
}
DungeonRewardDetailsPopupCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.btnClose.onClick:AddListener(function()
self:_OnBtnCloseClick()
end)
self.view.mask.onClick:AddListener(function()
self:_OnBtnCloseClick()
end)
self.m_dungeonId = arg.dungeonId
self.m_firstPassRewardCellCache = UIUtils.genCellCache(self.view.firstRewardCell)
self.m_recycleRewardCellCache = UIUtils.genCellCache(self.view.recycleRewardCell)
self.m_extraRewardCellCache = UIUtils.genCellCache(self.view.extraRewardCell)
self:_Refresh()
end
DungeonRewardDetailsPopupCtrl._Refresh = HL.Method() << function(self)
local dungeonMgr = GameInstance.dungeonManager
local gameMechanicData = Tables.gameMechanicTable[self.m_dungeonId]
local hasFirstReward = not string.isEmpty(gameMechanicData.firstPassRewardId)
if hasFirstReward then
local rewardId = gameMechanicData.firstPassRewardId
local firstRewardGained = dungeonMgr:IsDungeonFirstPassRewardGained(self.m_dungeonId)
local firstRewardsTbl = self:_ProcessRewards(rewardId, firstRewardGained)
self.m_firstPassRewardCellCache:Refresh(#firstRewardsTbl, function(cell, index)
self:_UpdateRewardCell(cell, firstRewardsTbl[index])
end)
end
self.view.firstRewardsNode.gameObject:SetActiveIfNecessary(hasFirstReward)
local hasRecycleReward = not string.isEmpty(gameMechanicData.rewardId)
if hasRecycleReward then
local recycleRewardsTbl = self:_ProcessRewards(gameMechanicData.rewardId, false)
self.m_recycleRewardCellCache:Refresh(#recycleRewardsTbl, function(cell, index)
self:_UpdateRewardCell(cell, recycleRewardsTbl[index])
end)
end
self.view.recycleRewardsNode.gameObject:SetActiveIfNecessary(hasRecycleReward)
local hasExtraReward = not string.isEmpty(gameMechanicData.extraRewardId)
if hasExtraReward then
local extraRewardId = gameMechanicData.extraRewardId
local gained = dungeonMgr:IsDungeonExtraRewardGained(self.m_dungeonId)
local extraRewardsTbl = self:_ProcessRewards(extraRewardId, gained)
self.m_extraRewardCellCache:Refresh(#extraRewardsTbl, function(cell, index)
self:_UpdateRewardCell(cell, extraRewardsTbl[index])
end)
end
self.view.extraRewardsNode.gameObject:SetActiveIfNecessary(hasExtraReward)
end
DungeonRewardDetailsPopupCtrl._OnBtnCloseClick = HL.Method() << function(self)
self:PlayAnimationOut(UIConst.PANEL_PLAY_ANIMATION_OUT_COMPLETE_ACTION_TYPE.Close)
end
DungeonRewardDetailsPopupCtrl._ProcessRewards = HL.Method(HL.String, HL.Boolean).Return(HL.Table)
<< function(self, rewardId, gained)
local rewardsTbl = {}
local rewardsCfg = Tables.rewardTable[rewardId]
for _, itemBundle in pairs(rewardsCfg.itemBundles) do
local itemCfg = Tables.itemTable[itemBundle.id]
table.insert(rewardsTbl, {
id = itemBundle.id,
count = itemBundle.count,
gained = gained,
sortId1 = itemCfg.sortId1,
sortId2 = itemCfg.sortId2,
})
end
table.sort(rewardsTbl, Utils.genSortFunction(UIConst.COMMON_ITEM_SORT_KEYS))
return rewardsTbl
end
DungeonRewardDetailsPopupCtrl._UpdateRewardCell = HL.Method(HL.Any, HL.Table) << function(self, cell, info)
cell.item:InitItem(info, true)
cell.getNode.gameObject:SetActiveIfNecessary(info.gained)
end
HL.Commit(DungeonRewardDetailsPopupCtrl)