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

80 lines
2.9 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.SceneGradeDifferenceItemPopUp
local PHASE_ID = PhaseId.SceneGradeDifferenceItemPopUp
SceneGradeDifferenceItemPopUpCtrl = HL.Class('SceneGradeDifferenceItemPopUpCtrl', uiCtrl.UICtrl)
SceneGradeDifferenceItemPopUpCtrl.s_messages = HL.StaticField(HL.Table) << {
}
SceneGradeDifferenceItemPopUpCtrl.m_sceneGradeCellList = HL.Field(HL.Forward('UIListCache'))
SceneGradeDifferenceItemPopUpCtrl.OnCreate = HL.Override(HL.Any) << function(self, args)
self.view.fullScreenCloseBtn.onClick:AddListener(function()
PhaseManager:PopPhase(PhaseId.SceneGradeDifferenceItemPopUp)
end)
self.view.closeButton.onClick:AddListener(function()
PhaseManager:PopPhase(PhaseId.SceneGradeDifferenceItemPopUp)
end)
local curLevelGrade = args.sceneGrade
self.view.titleText.text = args.titleText
local itemLists = args.itemLists
self.m_sceneGradeCellList = UIUtils.genCellCache(self.view.singleSceneGrade)
self.m_sceneGradeCellList:Refresh(#itemLists, function(sceneGradeCell, sceneGrade)
sceneGradeCell.normalRoot.gameObject:SetActive(sceneGrade ~= curLevelGrade)
sceneGradeCell.nowRoot.gameObject:SetActive(sceneGrade == curLevelGrade)
sceneGradeCell.normalTitleText.text = Language[string.format("ui_maplevel_level%d", sceneGrade)]
sceneGradeCell.nowTitleText.text = Language[string.format("ui_maplevel_level%d", sceneGrade)]
self:_FillSceneGradeCellItem(sceneGradeCell, itemLists[sceneGrade])
end)
local targetScrollToCell = self.m_sceneGradeCellList:Get(curLevelGrade)
LayoutRebuilder.ForceRebuildLayoutImmediate(self.view.scrollRect.content)
self.view.scrollRect:ScrollToRectTransform(targetScrollToCell.gameObject.transform, true)
end
SceneGradeDifferenceItemPopUpCtrl._FillSceneGradeCellItem = HL.Method(HL.Any, HL.Any)
<< function(self, sceneGradeCell, displayList)
local itemCount = #displayList
local rowNeedCount = itemCount / self.view.config.maxItemPerRow
if (itemCount % self.view.config.maxItemPerRow) >= 1 then
rowNeedCount = rowNeedCount + 1
end
sceneGradeCell.rowList = UIUtils.genCellCache(sceneGradeCell.singleItemRow)
sceneGradeCell.rowList:Refresh(rowNeedCount, function(row, rowIndex)
local itemIndexLowNotIncluded = (rowIndex - 1) * self.view.config.maxItemPerRow
local itemIndexHighIncluded = rowIndex * self.view.config.maxItemPerRow
itemIndexHighIncluded = math.min(itemIndexHighIncluded, itemCount)
row.itemListCache = UIUtils.genCellCache(row.item)
row.itemListCache:Refresh(itemIndexHighIncluded - itemIndexLowNotIncluded, function(item, indexOffset)
local itemInfoPack = displayList[indexOffset + itemIndexLowNotIncluded]
item:InitItem(itemInfoPack, true)
end)
end)
end
HL.Commit(SceneGradeDifferenceItemPopUpCtrl)