Files
Endfield-Data/LuaScripts/UI/Widgets/DungeonRewardSelectCell.lua
2025-12-02 20:37:18 +07:00

113 lines
3.0 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
DungeonRewardSelectCell = HL.Class('DungeonRewardSelectCell', UIWidgetBase)
DungeonRewardSelectCell.m_index = HL.Field(HL.Number) << 0
DungeonRewardSelectCell.m_rewardId = HL.Field(HL.String) << ""
DungeonRewardSelectCell.m_rewardList = HL.Field(HL.Table)
DungeonRewardSelectCell.m_currSelected = HL.Field(HL.Boolean) << false
DungeonRewardSelectCell.m_clickCallback = HL.Field(HL.Function)
DungeonRewardSelectCell.m_rewardCells = HL.Field(HL.Forward("UIListCache"))
DungeonRewardSelectCell._OnFirstTimeInit = HL.Override() << function(self)
self.m_rewardCells = UIUtils.genCellCache(self.view.itemBig)
self.view.btnCommonSecondary.onClick:AddListener(function()
self:m_clickCallback()
end)
self.view.rewardList.onIsFocusedChange:AddListener(function(isFocused)
if not isFocused then
Notify(MessageConst.HIDE_ITEM_TIPS)
end
end)
end
DungeonRewardSelectCell.InitDungeonRewardSelectCell = HL.Method(HL.String, HL.Boolean, HL.Function)
<< function(self, rewardId, isSelected, clickCallback)
self.m_rewardId = rewardId
self.m_currSelected = isSelected
self.m_clickCallback = clickCallback
self:_FirstTimeInit()
self:_InitRewardData()
self.m_rewardCells:Refresh(#self.m_rewardList, function(cell, index)
local rewardInfo = self.m_rewardList[index]
cell:InitItem(rewardInfo, function()
UIUtils.showItemSideTips(cell)
end)
cell:SetExtraInfo({ isSideTips = DeviceInfo.usingController })
end)
InputManagerInst:ToggleGroup(self.view.rewardTitleNode.groupId, not self.m_currSelected)
local btnStateCtrl = self.view.root
btnStateCtrl:SetState(self.m_currSelected and "DisableState" or "YellowState")
end
DungeonRewardSelectCell._InitRewardData = HL.Method() << function(self)
local hasCfg, rewardsCfg = Tables.rewardTable:TryGetValue(self.m_rewardId)
if not hasCfg then
logger.error("[Reward Table] missing, id = "..self.m_rewardId)
return
end
local rewards = {}
for _, itemBundle in pairs(rewardsCfg.itemBundles) do
local reward = rewards[itemBundle.id]
if not reward then
local itemCfg
hasCfg, itemCfg = Tables.itemTable:TryGetValue(itemBundle.id)
if hasCfg then
reward = {
id = itemBundle.id,
count = itemBundle.count,
rarity = itemCfg.rarity,
type = itemCfg.type:ToInt(),
}
rewards[itemBundle.id] = reward
else
logger.error("[Item Table] missing, id = "..itemBundle.id)
return
end
end
end
local rewardList = {}
for _, v in pairs(rewards) do
table.insert(rewardList, v)
end
table.sort(rewardList, Utils.genSortFunction({ "rarity", "type" }))
self.m_rewardList = rewardList
end
HL.Commit(DungeonRewardSelectCell)
return DungeonRewardSelectCell