PGRData/Script/matrix/xui/xuisupersmashbros/character/dtables/XUiSSBCharacterList.lua

124 lines
4.6 KiB
Lua
Raw Normal View History

--================
--角色页面角色动态列表
--================
local XUiSSBCharacterList = XClass(nil, "XUiSSBCharacterList")
function XUiSSBCharacterList:Ctor(ui, teamIds, pickOrReady, onSelectCb)
self.GameObject = ui.gameObject
self.TeamIds = teamIds
self.PickOrReady = pickOrReady
self.OnSelectCb = onSelectCb
self:InitDynamicTable()
end
function XUiSSBCharacterList:InitDynamicTable()
self.DynamicTable = XDynamicTableNormal.New(self.GameObject)
local gridProxy = require("XUi/XUiSuperSmashBros/Character/Grids/XUiSSBCharacterGrid")
self.DynamicTable:SetProxy(gridProxy)
self.DynamicTable:SetDelegate(self)
end
--================
--动态列表事件
--================
function XUiSSBCharacterList:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(grid.DynamicGrid.gameObject, self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:RefreshData(self.DataList[index], index, self.InTeamIndex[index])
if self.CurrentIndex == index then
self:SelectGrid(grid, index)
else
grid:SetSelect(false)
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
self:SelectGrid(grid, index)
end
end
--================
--刷新动态列表
--================
function XUiSSBCharacterList:Refresh(dataList)
self.DataList = dataList
self:SortDataList()
self.CurrentIndex = 1
self.DynamicTable:SetDataSource(self.DataList)
self.DynamicTable:ReloadDataASync(1)
end
function XUiSSBCharacterList:SortDataList()
local result = {}
local teamIdDic = {} -- 临时队伍列表
local indexCount = 1
self.InTeamIndex = {}
for _, teamId in pairs(self.TeamIds) do
if teamId > 0 then
teamIdDic[teamId] = true
end
end
-- 先处理队伍内彩蛋角色, 因为彩蛋角色一定在队伍里
-- 如果是彩蛋机器人 cxldV2
-- 1.彩蛋机器人未被roll出 没有绑定原始的被替换的角色,或者为强制随机角色未知状态 不显示,从列表里删除 (彩蛋机器人一定要通过服务器验证才会绑定, 强随机的未知状态出现的彩蛋可能会出现没有orgId的问题)
-- 2.彩蛋机器人已被roll出 绑定了原始角色,但没有揭开,显示原始角色
-- 3.彩蛋机器人已被roll出 绑定了原始角色,且已经揭开,显示真实彩蛋机器人角色
-- ↓总结出:如果是 非彩蛋机器人且没被roll过 且为未知),则正常加入队伍列表,且如果是 被roll过但没揭开彩蛋 则替换初始角色来显示
local replaceOrgChars = {}
for charaId, _ in pairs(teamIdDic) do
local chara = XDataCenter.SuperSmashBrosManager.GetRoleById(charaId)
if chara:GetEggRobotOrgId() ~= 0 and not chara:GetIsEggOpen() and not chara:GetIsUnknown() then
replaceOrgChars[charaId] = true
teamIdDic[chara:GetEggRobotOrgId()] = true
end
if chara:GetIsUnknown() then
teamIdDic[charaId] = nil
end
end
for charaId, value in pairs(replaceOrgChars) do
teamIdDic[charaId] = nil
end
-- 再将列表里没有揭开彩蛋角色排除 (没揭开彩蛋的机器人不在角色列表,没揭开未知的角色不在队伍列表但在角色列表)
local dataList = {} -- 最后处理彩蛋角色
for key, chara in pairs(self.DataList) do
if not ((chara:IsSmashEggRobot() and not chara:GetIsEggOpen())) then
table.insert(dataList, chara)
end
end
-- 将在队伍里的角色排在前面
for _, chara in pairs(dataList) do
if teamIdDic[chara:GetId()] then
table.insert(result, chara)
self.InTeamIndex[indexCount] = true
indexCount = indexCount + 1
end
end
-- 再将不在队伍的角色插入
for _, chara in pairs(dataList) do
if not teamIdDic[chara:GetId()] then
table.insert(result, chara)
end
end
self.DataList = result
end
function XUiSSBCharacterList:OnRefresh()
self.DynamicTable:SetDataSource(self.DataList)
self.DynamicTable:ReloadDataASync(1)
end
--================
--选择角色
--================
function XUiSSBCharacterList:SelectGrid(grid, index)
if self.CurrentIndex ~= index and self.CurrentGrid then
self.CurrentGrid:SetSelect(false)
end
self.CurrentGrid = grid
self.CurrentIndex = self.CurrentGrid:GetIndex()
self.CurrentGrid:SetSelect(true)
if self.OnSelectCb then
self.OnSelectCb(self.CurrentGrid:GetChara())
end
end
return XUiSSBCharacterList