172 lines
6.5 KiB
Lua
172 lines
6.5 KiB
Lua
|
XUiPanelCharacterList = XClass(nil, "XUiPanelCharacterList")
|
|||
|
|
|||
|
local TextManager = CS.XTextManager
|
|||
|
local tableInsert = table.insert
|
|||
|
local tableSort = table.sort
|
|||
|
|
|||
|
local Sort = function(a, b)
|
|||
|
if a.IsLocked ~= b.IsLocked then
|
|||
|
return not a.IsLocked
|
|||
|
end
|
|||
|
if a.Data.Quality ~= b.Data.Quality then
|
|||
|
return a.Data.Quality > b.Data.Quality
|
|||
|
end
|
|||
|
if a.Data.Level ~= b.Data.Level then
|
|||
|
return a.Data.Level > b.Data.Level
|
|||
|
end
|
|||
|
return a.Data.Id > b.Data.Id
|
|||
|
end
|
|||
|
|
|||
|
function XUiPanelCharacterList:Ctor(ui, rootUi)
|
|||
|
self.RootUi = rootUi
|
|||
|
self.Transform = ui.transform
|
|||
|
self.GameObject = ui.gameObject
|
|||
|
XTool.InitUiObject(self)
|
|||
|
|
|||
|
self.AllCharList = {} --全部成员
|
|||
|
self.CharacterList = {} --展示的成员
|
|||
|
self:InitDynamicTable()
|
|||
|
end
|
|||
|
|
|||
|
function XUiPanelCharacterList:InitDynamicTable()
|
|||
|
self.DynamicTable = XDynamicTableNormal.New(self.PanelCharacterList)
|
|||
|
self.DynamicTable:SetProxy(XUiPlayerInfoCharacterGrid)
|
|||
|
self.DynamicTable:SetDelegate(self)
|
|||
|
self.PlayerInfoCharacterGrid.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
function XUiPanelCharacterList:Show()
|
|||
|
self.GameObject:SetActiveEx(true)
|
|||
|
self.PanelScore.gameObject:SetActiveEx(true)
|
|||
|
self.AppearanceShowType = self.RootUi.Data.AppearanceShowType or XPlayerInfoConfigs.CharactersAppearanceType.All
|
|||
|
|
|||
|
if self.RootUi.IsOpenFromSetting then
|
|||
|
--从设置面板进入,使用预览数据
|
|||
|
for _,v in pairs(self.RootUi.Data.CharacterShow) do
|
|||
|
local temData = { Data = v, IsLocked = false }
|
|||
|
tableInsert(self.CharacterList, temData)
|
|||
|
end
|
|||
|
self:Refresh(true)
|
|||
|
else
|
|||
|
self:Refresh()
|
|||
|
if self:HasPermission() then
|
|||
|
XDataCenter.PlayerInfoManager.RequestPlayerCharacterListData(self.RootUi.Data.Id, function(data)
|
|||
|
for _,v in pairs(data) do
|
|||
|
local temData = { Data = v, IsLocked = false }
|
|||
|
tableInsert(self.CharacterList, temData)
|
|||
|
end
|
|||
|
self:Refresh(true)
|
|||
|
end)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiPanelCharacterList:Refresh(hasPermission)
|
|||
|
local hasCharacterDisplay = self:HasCharacterDisplay()
|
|||
|
self:SetupDynamicTable(hasPermission,hasCharacterDisplay)
|
|||
|
end
|
|||
|
|
|||
|
function XUiPanelCharacterList:SetupDynamicTable(hasPermission, hasCharacterDisplay, index)
|
|||
|
self.DynamicTable:SetDataSource(self:HandleData(hasPermission,hasCharacterDisplay))
|
|||
|
self.DynamicTable:ReloadDataSync(index and index or 1)
|
|||
|
end
|
|||
|
|
|||
|
--==============================--
|
|||
|
--desc: 是否拥有权限查看信息
|
|||
|
--@return: 有true,无false
|
|||
|
--==============================--
|
|||
|
function XUiPanelCharacterList:HasPermission()
|
|||
|
self.AppearanceSettingInfo = self.RootUi.Data.AppearanceSettingInfo and
|
|||
|
self.RootUi.Data.AppearanceSettingInfo.CharacterType or XUiAppearanceShowType.ToSelf
|
|||
|
|
|||
|
local isFriend = XDataCenter.SocialManager.CheckIsFriend(self.RootUi.Data.Id)
|
|||
|
local hasPermission = (self.AppearanceSettingInfo == XUiAppearanceShowType.ToAll)
|
|||
|
or (self.AppearanceSettingInfo == XUiAppearanceShowType.ToFriend and isFriend)
|
|||
|
return hasPermission
|
|||
|
end
|
|||
|
|
|||
|
--==============================--
|
|||
|
--desc: 自选成员展示时是否有设置成员
|
|||
|
--==============================--
|
|||
|
function XUiPanelCharacterList:HasCharacterDisplay()
|
|||
|
--展示类型为自选成员,没有设置成员时返回false
|
|||
|
local hasCharacterDisplay = not (self.AppearanceShowType == XPlayerInfoConfigs.CharactersAppearanceType.Select and #self.CharacterList < 1)
|
|||
|
return hasCharacterDisplay
|
|||
|
end
|
|||
|
|
|||
|
--==============================--
|
|||
|
--desc: 处理动态列表的数据源
|
|||
|
--@return: 有序的成员表,全部展示包括未拥有成员
|
|||
|
--==============================--
|
|||
|
function XUiPanelCharacterList:HandleData(hasPermission, hasCharacterDisplay)
|
|||
|
local isLoadData = hasPermission and hasCharacterDisplay
|
|||
|
|
|||
|
if not isLoadData then
|
|||
|
self.PanelScore.gameObject:SetActiveEx(false)
|
|||
|
self.PanelCharacterNone.gameObject:SetActiveEx(true)
|
|||
|
if not hasPermission then
|
|||
|
self.EmptyText.text = TextManager.GetText("PlayerInfoWithoutPermission")
|
|||
|
else
|
|||
|
self.EmptyText.text = TextManager.GetText("PlayerInfoCharacterEmpty")
|
|||
|
end
|
|||
|
return {}
|
|||
|
end
|
|||
|
|
|||
|
self.PanelCharacterNone.gameObject:SetActiveEx(false)
|
|||
|
|
|||
|
if self.AppearanceShowType == XPlayerInfoConfigs.CharactersAppearanceType.All then
|
|||
|
-- 全成员展示,数据源包括未解锁成员
|
|||
|
local score = 0
|
|||
|
local allCharList = {} --最终数据,拥有成员排在前面
|
|||
|
local characterListById = {} --拥有成员字典,Id做索引,用来查询未解锁成员
|
|||
|
|
|||
|
for _, v in ipairs(self.CharacterList) do
|
|||
|
characterListById[v.Data.Id] = v
|
|||
|
local characterShowScoreList = XPlayerInfoConfigs.GetCharacterShowScore(v.Data.Id)
|
|||
|
local addScore = characterShowScoreList[v.Data.Quality] and characterShowScoreList[v.Data.Quality] or 0
|
|||
|
score = score + addScore
|
|||
|
end
|
|||
|
self.PanelScore.gameObject:SetActiveEx(true)
|
|||
|
self.TxtScore.text = score
|
|||
|
|
|||
|
for k, v in pairs(XCharacterConfigs.GetCharacterTemplates()) do
|
|||
|
local temData = { IsLocked = true }
|
|||
|
if characterListById[k] then
|
|||
|
tableInsert(allCharList, characterListById[k])
|
|||
|
else
|
|||
|
temData.Data = v
|
|||
|
tableInsert(allCharList, temData)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
tableSort(allCharList, function(item1, item2) return Sort(item1, item2) end)
|
|||
|
|
|||
|
self.AllCharList = allCharList
|
|||
|
|
|||
|
return allCharList
|
|||
|
else
|
|||
|
-- 自选成员展示,数据源不包括未解锁成员
|
|||
|
self.PanelScore.gameObject:SetActiveEx(false)
|
|||
|
|
|||
|
return self.CharacterList
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiPanelCharacterList:OnDynamicTableEvent(event, index, grid)
|
|||
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
|||
|
grid:Init(self.RootUi.Data.Id)
|
|||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
|||
|
if self.AppearanceShowType == XPlayerInfoConfigs.CharactersAppearanceType.All then
|
|||
|
grid:UpdateGrid(self.AllCharList[index], self.AppearanceShowType, self.RootUi.Data.AssistCharacterDetail)
|
|||
|
else
|
|||
|
grid:UpdateGrid(self.CharacterList[index], self.AppearanceShowType, self.RootUi.Data.AssistCharacterDetail)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiPanelCharacterList:Close()
|
|||
|
self.AllCharList = {}
|
|||
|
self.CharacterList = {}
|
|||
|
self.AppearanceShowType = nil
|
|||
|
self.GameObject:SetActiveEx(false)
|
|||
|
end
|