PGRData/Resources/Scripts/XUi/XUiEquipAwarenessReplace/XUiPanelEquipScroll.lua
2022-12-26 14:06:01 +05:30

120 lines
No EOL
3.8 KiB
Lua

local XUiGridEquip = require("XUi/XUiEquipAwarenessReplace/XUiGridEquip")
local XUiPanelEquipScroll = XClass(nil, "XUiPanelEquipScroll")
--multiSelect复用
function XUiPanelEquipScroll:Ctor(rootUi, ui, gridTouchCb, gridReloadCb, multiSelect, gridSelectCheckCb)
self.RootUi = rootUi
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.GridTouchCb = gridTouchCb
self.GridReloadCb = gridReloadCb
self.MultiSelect = multiSelect
self.GridSelectCheckCb = gridSelectCheckCb
self:InitDynamicTable()
end
function XUiPanelEquipScroll:InitDynamicTable()
self.DynamicTable = XDynamicTableNormal.New(self.GameObject)
self.DynamicTable:SetDelegate(self)
self.DynamicTable:SetProxy(XUiGridEquip)
self.LastSelectIds = {}
end
function XUiPanelEquipScroll:UpdateEquipGridList(equipIdList, notResetSelect)
if not notResetSelect then
self.LastSelectIds = {}
end
self.EquipIdList = equipIdList or {}
self.DynamicTable:UpdateViewSize()
self.DynamicTable:SetDataSource(self.EquipIdList)
self.DynamicTable:ReloadDataSync(#self.EquipIdList > 0 and not notResetSelect and 1 or -1)
end
function XUiPanelEquipScroll:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:InitRootUi(self.RootUi)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local equipId = self.EquipIdList[index]
grid:Refresh(equipId, self.RootUi.SelectedEquipIdList)
if self.LastSelectIds[equipId] then
grid:SetSelected(true)
self.LastSelectGrid = grid
else
grid:SetSelected(false)
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local equipId = self.EquipIdList[index]
--不是多选
if not self.MultiSelect and self.LastSelectGrid then
self.LastSelectGrid:SetSelected(false)
end
local isSelected = grid:IsSelected()
--不能选中return
if not isSelected and self.GridSelectCheckCb and not self.GridSelectCheckCb() then
return
end
--复选取消
if self.MultiSelect then
isSelected = not isSelected
else
isSelected = true
end
--普通选中时清除上一条记录
if not self.MultiSelect and self.LastSelectId then
self.LastSelectIds[self.LastSelectId] = nil
end
self.LastSelectId = equipId
self.LastSelectIds[self.LastSelectId] = isSelected
self.LastSelectGrid = grid
self.LastSelectGrid:SetSelected(isSelected)
if self.GridTouchCb then
self.GridTouchCb(equipId, isSelected)
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RELOAD_COMPLETED then
if self.GridReloadCb then
self.GridReloadCb()
end
end
end
function XUiPanelEquipScroll:SelectGrids(equipIds)
self.LastSelectIds = equipIds
self.DynamicTable:ReloadDataSync(#self.EquipIdList > 0 and 1 or -1)
end
function XUiPanelEquipScroll:ResetSelectGrids()
self.LastSelectIds = {}
self.LastSelectGrid = nil
self.LastSelectId = nil
self.DynamicTable:ReloadDataSync(#self.EquipIdList > 0 and 1 or -1)
end
function XUiPanelEquipScroll:ResetSelectGrid()
if self.LastSelectGrid then
self.LastSelectGrid:SetSelected(false)
self.LastSelectGrid = nil
self.LastSelectIds[self.LastSelectId] = nil
self.LastSelectId = nil
end
end
function XUiPanelEquipScroll:GuideGetDynamicTableIndex(id)
for i, v in ipairs(self.EquipIdList) do
local equip = XDataCenter.EquipManager.GetEquip(v)
if tostring(equip.TemplateId) == id then
return i
end
end
return -1
end
return XUiPanelEquipScroll