162 lines
No EOL
5.8 KiB
Lua
162 lines
No EOL
5.8 KiB
Lua
local XUiCollectionWallView = XLuaUiManager.Register(XLuaUi, "UiCollectionWallView")
|
||
local XUiGridViewCollection = require("XUi/XUiCollectionWall/XUiCollectionWallGrid/XUiGridViewCollection")
|
||
|
||
local DEFAULT_INDEX = 1
|
||
|
||
function XUiCollectionWallView:OnStart(wallDataList, inType, otherPlayerCollectionList)
|
||
if wallDataList == nil or next(wallDataList) == nil then
|
||
XLog.Error("XUiCollectionWallView:OnStart函数错误,wallDataList参数没有数据")
|
||
return
|
||
end
|
||
|
||
self.InType = inType
|
||
self.WallDataList = wallDataList
|
||
self.OtherPlayerCollectionList = otherPlayerCollectionList
|
||
|
||
XDataCenter.CollectionWallManager.SortWallEntityByRank(self.WallDataList)
|
||
|
||
self.CollectionPool = {} -- 收藏品GameObject
|
||
self.CurrentCollection = {} -- 当前墙面的收藏品格子脚本
|
||
|
||
self.Min = 1
|
||
self.Max = #wallDataList
|
||
self.Index = DEFAULT_INDEX
|
||
|
||
self.BaseItem = {} -- 底座Id做索引,保存对应的ui物体模板
|
||
|
||
self:AddListener()
|
||
end
|
||
|
||
function XUiCollectionWallView:OnEnable()
|
||
self:Refresh()
|
||
end
|
||
|
||
function XUiCollectionWallView:Refresh()
|
||
self:RecoverCollection()
|
||
|
||
self.BtnLeft.gameObject:SetActiveEx(self.Index ~= self.Min)
|
||
self.BtnRight.gameObject:SetActiveEx(self.Index ~= self.Max)
|
||
|
||
local wallData = self.WallDataList[self.Index]
|
||
if wallData then
|
||
local pedestalId = wallData:GetPedestalId()
|
||
|
||
for i, collectionInfo in pairs(wallData:GetCollectionSetInfos()) do
|
||
self.CollectionPool[pedestalId] = self.CollectionPool[pedestalId] or {}
|
||
|
||
local grid = self.CollectionPool[pedestalId][i]
|
||
if not grid then
|
||
grid = self:GenerateCollection(collectionInfo,pedestalId)
|
||
table.insert(self.CollectionPool[pedestalId], grid)
|
||
else
|
||
local scale = XCollectionWallConfigs.GetCollectionScale(collectionInfo.SizeId)
|
||
grid.transform.localScale = CS.UnityEngine.Vector3(scale, scale, scale)
|
||
end
|
||
|
||
grid.gameObject:SetActiveEx(true)
|
||
if self.InType == XDataCenter.MedalManager.InType.Normal then
|
||
self.CurrentCollection[collectionInfo.Id] = XUiGridViewCollection.New(grid, collectionInfo, self.InType)
|
||
else
|
||
if not self.OtherPlayerCollectionList then
|
||
XLog.Error("XUiCollectionWallView:Refresh函数错误,查看他人信息时,没有OtherPlayerCollectionList数据")
|
||
return
|
||
end
|
||
|
||
-- 找到对应收藏品的数据
|
||
local hasCollection = false
|
||
|
||
for _, otherCollection in pairs(self.OtherPlayerCollectionList) do
|
||
if otherCollection.Id == collectionInfo.Id then
|
||
hasCollection = true
|
||
self.CurrentCollection[collectionInfo.Id] = XUiGridViewCollection.New(grid, collectionInfo, self.InType, otherCollection)
|
||
end
|
||
end
|
||
|
||
if not hasCollection then
|
||
XLog.Error(string.format("XUiCollectionWallView:Refresh函数错误,未其他玩家信息中没有Id:%s的收藏品数据", collectionInfo.Id))
|
||
grid.gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
end
|
||
|
||
local bgPath = XCollectionWallConfigs.GetColDecPath(wallData:GetBackgroundId())
|
||
self.RImgWallBg:SetRawImage(bgPath)
|
||
else
|
||
XLog.Error("XUiCollectionWallView:Refresh函数错误,wallData为 nil")
|
||
end
|
||
end
|
||
|
||
function XUiCollectionWallView:GenerateCollection(collectionInfo, pedestalId)
|
||
if not collectionInfo then
|
||
XLog.Error("XUiCollectionWallView:GenerateCollection函数错误,参数collectionInfo为 nil")
|
||
return
|
||
end
|
||
|
||
if not self.BaseItem[pedestalId] then
|
||
local baseItemPath = XCollectionWallConfigs.GetColDecPath(pedestalId)
|
||
|
||
self.Resource = CS.XResourceManager.Load(baseItemPath)
|
||
local baseItem = CS.UnityEngine.Object.Instantiate(self.Resource.Asset)
|
||
if baseItem == nil or not baseItem:Exist() then
|
||
return
|
||
end
|
||
baseItem.transform:SetParent(self.PanelWall, false)
|
||
baseItem.gameObject:SetLayerRecursively(self.PanelWall.gameObject.layer)
|
||
baseItem.gameObject:SetActiveEx(false)
|
||
|
||
self.BaseItem[pedestalId] = baseItem
|
||
end
|
||
|
||
local obj = CS.UnityEngine.Object.Instantiate(self.BaseItem[pedestalId])
|
||
local scale = XCollectionWallConfigs.GetCollectionScale(collectionInfo.SizeId)
|
||
|
||
obj.transform:SetParent(self.PanelWall, false)
|
||
obj.transform.localScale = CS.UnityEngine.Vector3(scale, scale, scale)
|
||
obj.gameObject:SetActiveEx(true)
|
||
|
||
return obj
|
||
end
|
||
|
||
function XUiCollectionWallView:RecoverCollection()
|
||
for _, collection in pairs(self.CurrentCollection) do
|
||
collection.GameObject:SetActiveEx(false)
|
||
collection:Destroy()
|
||
end
|
||
self.CurrentCollection = {}
|
||
end
|
||
|
||
function XUiCollectionWallView:AddListener()
|
||
self.BtnBack.CallBack = function()
|
||
self:OnBtnBackClick()
|
||
end
|
||
self.BtnRight.CallBack = function()
|
||
self:OnBtnRightClick()
|
||
end
|
||
self.BtnLeft.CallBack = function()
|
||
self:OnBtnLeftClick()
|
||
end
|
||
end
|
||
|
||
function XUiCollectionWallView:OnBtnRightClick()
|
||
self.Index = self.Index + 1
|
||
if self.Index > self.Max then
|
||
XLog.Error("XUiCollectionWallView:OnRightClick函数错误,Index大于最大值")
|
||
self.Index = self.Max
|
||
end
|
||
self:PlayAnimation("QieHuan")
|
||
self:Refresh()
|
||
end
|
||
|
||
function XUiCollectionWallView:OnBtnLeftClick()
|
||
self.Index = self.Index - 1
|
||
if self.Index < self.Min then
|
||
XLog.Error("XUiCollectionWallView:OnBtnLeftClick,Index小于最小值")
|
||
self.Index = self.Min
|
||
end
|
||
self:PlayAnimation("QieHuan")
|
||
self:Refresh()
|
||
end
|
||
|
||
function XUiCollectionWallView:OnBtnBackClick()
|
||
self:Close()
|
||
end |