120 lines
3.8 KiB
Lua
120 lines
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
|