PGRData/Script/matrix/xui/xuiplayerinfo/XUiPanelFashionPlayerInfo.lua

206 lines
7.4 KiB
Lua
Raw Normal View History

XUiPanelFashionPlayerInfo = XClass(nil, "XUiPanelFashionPlayerInfo")
local FASHION_QUALITY_LIMIT = 2
local TextManager = CS.XTextManager
local tableInsert = table.insert
local tableSort = table.sort
local Sort = function(a, b, fashionType)
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 fashionType == XPlayerInfoConfigs.FashionType.Character then
return a.Data.CharacterId > b.Data.CharacterId
else
return a.Data.Id > b.Data.Id
end
end
function XUiPanelFashionPlayerInfo:Ctor(ui, rootUi)
self.RootUi = rootUi
self.Transform = ui.transform
self.GameObject = ui.gameObject
self.FashionType = XPlayerInfoConfigs.FashionType.Character
XTool.InitUiObject(self)
self.FashionList = {} --拥有的成员涂装
self.WeaponFashionList = {} --拥有的武器涂装
self.AllFashionList = {} --全部成员涂装信息
self.AllWeaponFashionList = {} --全部武器涂装信息
self:AutoAddListener()
self:InitDynamicTable()
end
function XUiPanelFashionPlayerInfo:AutoAddListener()
self.BtnDropDown.onValueChanged:AddListener(function()
self.FashionList = {}
self.WeaponFashionList = {}
self.AllFashionList = {}
self.AllWeaponFashionList = {}
self.AppearanceSettingInfo = nil
self.FashionType = self.BtnDropDown.value
if self.RootUi.IsOpenFromSetting then
--从设置面板进入,使用预览数据
self.FashionList = self.RootUi.Data.FashionShow
self.WeaponFashionList = self.RootUi.Data.WeaponFashionShow
self:Refresh(true)
else
self:Refresh()
if self:HasPermission() then
self:RequestData()
end
end
end)
end
function XUiPanelFashionPlayerInfo:InitDynamicTable()
self.DynamicTable = XDynamicTableNormal.New(self.FashionDynamicTable)
self.DynamicTable:SetProxy(XUiPlayerInfoClothGrid)
self.DynamicTable:SetDelegate(self)
self.ClothGrid.gameObject:SetActiveEx(false)
end
function XUiPanelFashionPlayerInfo:Show()
self.GameObject:SetActiveEx(true)
if self.RootUi.IsOpenFromSetting then
--从设置面板进入,使用预览数据
self.FashionList = self.RootUi.Data.FashionShow
self.WeaponFashionList = self.RootUi.Data.WeaponFashionShow
self:Refresh(true)
else
self:Refresh()
if self:HasPermission() then
self:RequestData()
end
end
end
function XUiPanelFashionPlayerInfo:RequestData()
if self.FashionType == XPlayerInfoConfigs.FashionType.Character then
--请求成员涂装数据
XDataCenter.PlayerInfoManager.RequestPlayerFashionData(self.RootUi.Data.Id, function(data)
self.FashionList = data
self:Refresh(true)
end)
else
--请求武器涂装数据
XDataCenter.PlayerInfoManager.RequestPlayerWeaponFashionData(self.RootUi.Data.Id, function(data)
self.WeaponFashionList = data
self:Refresh(true)
end)
end
end
function XUiPanelFashionPlayerInfo:Refresh(hasPermission)
self:SetupDynamicTable(hasPermission)
end
function XUiPanelFashionPlayerInfo:SetupDynamicTable(hasPermission,index)
if self.FashionType == XPlayerInfoConfigs.FashionType.Character then
self.AllFashionList = self:HandleData(XDataCenter.FashionManager.GetAllFashionTemplateInTime(), self.FashionList, XPlayerInfoConfigs.FashionType.Character, hasPermission)
self.DynamicTable:SetDataSource(self.AllFashionList)
else
self.AllWeaponFashionList = self:HandleData(XWeaponFashionConfigs.GetWeaponFashionResTemplatesInTime(), self.WeaponFashionList, XPlayerInfoConfigs.FashionType.Weapon, hasPermission)
self.DynamicTable:SetDataSource(self.AllWeaponFashionList)
end
self.DynamicTable:ReloadDataSync(index and index or 1)
end
--==============================--
--desc: 是否拥有权限查看信息
--@return: 有true无false
--==============================--
function XUiPanelFashionPlayerInfo:HasPermission()
local isFriend = XDataCenter.SocialManager.CheckIsFriend(self.RootUi.Data.Id)
if self.FashionType == XPlayerInfoConfigs.FashionType.Character then
self.AppearanceSettingInfo = self.RootUi.Data.AppearanceSettingInfo
and self.RootUi.Data.AppearanceSettingInfo.FashionType or XUiAppearanceShowType.ToSelf
else
self.AppearanceSettingInfo = self.RootUi.Data.AppearanceSettingInfo
and self.RootUi.Data.AppearanceSettingInfo.WeaponFashionType or XUiAppearanceShowType.ToSelf
end
local hasPermission = (self.AppearanceSettingInfo == XUiAppearanceShowType.ToAll)
or (self.AppearanceSettingInfo == XUiAppearanceShowType.ToFriend and isFriend)
return hasPermission
end
--==============================--
--desc: 获得涂装数据
--@allFashion: 配置表得到的全部涂装数据
--@ownFashion: 服务器返回的已拥有涂装
--@fashionType: 涂装类型,成员涂装需要过滤泛用式涂装
--@return: 有序的涂装数据
--==============================--
function XUiPanelFashionPlayerInfo:HandleData(allFashion, ownFashion, fashionType, hasPermission)
if not hasPermission then
self.PanelScore.gameObject:SetActiveEx(false)
self.PanelFashionNone.gameObject:SetActiveEx(true)
self.EmptyText.text = TextManager.GetText("PlayerInfoWithoutPermission")
return {}
end
self.PanelScore.gameObject:SetActiveEx(true)
self.PanelFashionNone.gameObject:SetActiveEx(false)
local ownCount = 0
local allFashionList = {} --最终数据,拥有涂装排在前面
local fashionListById = {} --拥有涂装字典,Id做索引用来查询未解锁成员
for _, v in ipairs(ownFashion) do
fashionListById[v] = v
end
for k, v in pairs(allFashion) do
-- 成员涂装需要去除泛用式涂装
local isWeaponFashion = fashionType ~= XPlayerInfoConfigs.FashionType.Character
if isWeaponFashion or v.Quality > FASHION_QUALITY_LIMIT then
local temData = { Data = v, IsLocked = true }
if fashionListById[k] then
temData.IsLocked = false
ownCount = ownCount + 1
end
tableInsert(allFashionList, temData)
end
end
tableSort(allFashionList, function(item1, item2)
return Sort(item1, item2, self.FashionType)
end)
-- 计算收集率
local score = string.format("%.1f", (ownCount / #allFashionList) * 100)
self.TxtShouJiLv.text = score .. "%"
return allFashionList
end
function XUiPanelFashionPlayerInfo:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
if self.FashionType == XPlayerInfoConfigs.FashionType.Character then
grid:UpdateGrid(self.AllFashionList[index], self.FashionType)
else
grid:UpdateGrid(self.AllWeaponFashionList[index], self.FashionType)
end
end
end
function XUiPanelFashionPlayerInfo:Close()
self.FashionList = {}
self.WeaponFashionList = {}
self.AllFashionList = {}
self.AllWeaponFashionList = {}
self.AppearanceSettingInfo = nil
self.GameObject:SetActiveEx(false)
end