PGRData/Script/matrix/xui/xuiareawar/XUiAreaWarInformation.lua

256 lines
8.3 KiB
Lua
Raw Normal View History

local XUiGridAreaWarRank = require("XUi/XUiAreaWar/XUiGridAreaWarRank")
local stringFormat = string.format
--侧边栏按钮
local TabBtnIndex = {
Information = 1, --战况总览
Rank = 2 --小地图
}
local XUiAreaWarInformation = XLuaUiManager.Register(XLuaUi, "UiAreaWarInformation")
function XUiAreaWarInformation:OnAwake()
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
XDataCenter.ItemManager.AddCountUpdateListener(
{
XDataCenter.ItemManager.ItemId.AreaWarCoin,
XDataCenter.ItemManager.ItemId.AreaWarActionPoint
},
handler(self, self.UpdateAssets),
self.AssetActivityPanel
)
self.GridMyRank.gameObject:SetActiveEx(false)
self.GridBossRank.gameObject:SetActiveEx(false)
self.GridExamples.gameObject:SetActiveEx(false)
self.GridInformation.gameObject:SetActiveEx(false)
self.DynamicTable = XDynamicTableNormal.New(self.PanelRankList)
self.DynamicTable:SetProxy(XUiGridAreaWarRank)
self.DynamicTable:SetDelegate(self)
self:InitTabGroup()
self:AutoAddListener()
end
function XUiAreaWarInformation:OnStart()
self.SelectIndex = 1
self.ShowTypeGrids = {}
self.BlockGrids = {}
self:InitView()
end
function XUiAreaWarInformation:OnEnable()
if self.IsEnd then
return
end
if XDataCenter.AreaWarManager.OnActivityEnd() then
self.IsEnd = true
return
end
self:UpdateAssets()
self.PanelTab:SelectIndex(self.SelectIndex)
end
function XUiAreaWarInformation:OnGetEvents()
return {
XEventId.EVENT_AREA_WAR_ACTIVITY_END
}
end
function XUiAreaWarInformation:OnNotify(evt, ...)
if self.IsEnd then
return
end
local args = {...}
if evt == XEventId.EVENT_AREA_WAR_ACTIVITY_END then
if XDataCenter.AreaWarManager.OnActivityEnd() then
self.IsEnd = true
return
end
end
end
function XUiAreaWarInformation:AutoAddListener()
self.BtnBack.CallBack = function()
self:Close()
end
self.BtnMainUi.CallBack = function()
XLuaUiManager.RunMain()
end
end
function XUiAreaWarInformation:InitTabGroup()
local btns = {}
for _, index in pairs(TabBtnIndex) do
btns[tonumber(index)] = self["BtnTab" .. index]
end
self.PanelTab:Init(
btns,
function(index)
self:OnClickTabBtn(index)
end
)
self.Btns = btns
end
function XUiAreaWarInformation:InitView()
--区块类型图例
local showTypes = XAreaWarConfigs.GetAllBlockShowTypes()
for index, showType in ipairs(showTypes) do
local grid = self.ShowTypeGrids[index]
if not grid then
local go = index == 1 and self.GridExamples or CSObjectInstantiate(self.GridExamples, self.PanelExamples)
grid = XTool.InitUiObjectByUi({}, go)
self.ShowTypeGrids[index] = grid
end
grid.ImgIcon:SetSprite(XAreaWarConfigs.GetBlockShowTypeIcon(showType))
grid.TxtExamples.text = XAreaWarConfigs.GetBlockShowTypeName(showType)
grid.GameObject:SetActiveEx(true)
end
for index = #showTypes + 1, #self.ShowTypeGrids do
self.ShowTypeGrids[index].GameObject:SetActiveEx(false)
end
end
function XUiAreaWarInformation:UpdateAssets()
self.AssetActivityPanel:Refresh(
{
XDataCenter.ItemManager.ItemId.AreaWarCoin,
XDataCenter.ItemManager.ItemId.AreaWarActionPoint
},
{
XDataCenter.ItemManager.ItemId.AreaWarActionPoint
}
)
end
function XUiAreaWarInformation:OnClickTabBtn(index)
self.SelectIndex = index
if index == TabBtnIndex.Information then
self:UpdateInformation()
self.PanelRanking.gameObject:SetActiveEx(false)
self.PanelInformation.gameObject:SetActiveEx(true)
elseif index == TabBtnIndex.Rank then
local openUiCb = function()
self:UpdateRank()
self.PanelInformation.gameObject:SetActiveEx(false)
self.PanelRanking.gameObject:SetActiveEx(true)
end
XDataCenter.AreaWarManager.OpenUiWorldRank(openUiCb)
end
end
--全服战况
function XUiAreaWarInformation:UpdateInformation()
--净化区块进度
local clearCount, totalCount = XDataCenter.AreaWarManager.GetBlockProgress()
self.TxtClearCount.text = stringFormat("%d/%d", clearCount, totalCount)
--特攻角色解锁进度
local unlockCount, totalRoleCount = XDataCenter.AreaWarManager.GetSpecialRoleProgress()
self.TxtSpecialRole.text = stringFormat("%d/%d", unlockCount, totalRoleCount)
--净化经验进度
local curExp, totalExp = XDataCenter.AreaWarManager.GetSelfPurificationProgress()
self.TxtExp.text = stringFormat("%d/%d", curExp, totalExp)
--小地图
local blockIds = XAreaWarConfigs.GetAllBlockIds()
for index, blockId in pairs(blockIds) do
local parent = self["Stage" .. blockId]
if not parent then
XLog.Error(
"XUiAreaWarInformation:UpdateInformation error: 地图信息错误UiAreaWarInformation上找不到对应的Stage节点blockId",
blockId
)
goto CONTINUE
end
--不可见区块不做更新
if not XDataCenter.AreaWarManager.IsBlockVisible(blockId) then
parent.gameObject:SetActiveEx(false)
goto CONTINUE
end
parent.gameObject:SetActiveEx(true)
--区块信息
local grid = self.BlockGrids[index]
if not grid then
local go = CSObjectInstantiate(self.GridInformation, parent)
grid = XTool.InitUiObjectByUi({}, go)
self.BlockGrids[index] = grid
end
if XAreaWarConfigs.CheckBlockShowType(blockId, XAreaWarConfigs.BlockShowType.NormalCharacter) then
grid.ImgRole:SetRawImage(XAreaWarConfigs.GetRoleBlockIcon(blockId))
grid.ImgIcon.gameObject:SetActiveEx(false)
grid.ImgRole.gameObject:SetActiveEx(true)
else
grid.ImgIcon:SetSprite(XAreaWarConfigs.GetBlockShowTypeIconByBlockId(blockId))
grid.ImgIcon.gameObject:SetActiveEx(true)
grid.ImgRole.gameObject:SetActiveEx(false)
end
local isClear = XDataCenter.AreaWarManager.IsBlockClear(blockId)
local isUnlock = XDataCenter.AreaWarManager.IsBlockUnlock(blockId)
grid.Clear.gameObject:SetActiveEx(isClear and not XAreaWarConfigs.IsInitBlock(blockId))
grid.Disable.gameObject:SetActiveEx(not isClear and not isUnlock)
grid.Normal.gameObject:SetActiveEx(not isClear and isUnlock)
grid.GameObject:SetActiveEx(true)
--当前区块可显示,寻找前置区块中已净化的,尝试连线
local alternativeList = XAreaWarConfigs.GetBlockPreBlockIdsAlternativeList(blockId)
for _, preBlockIds in pairs(alternativeList) do
local preBlockId = preBlockIds[1] --只显示并列表中第一个区块的线
if XDataCenter.AreaWarManager.IsBlockClear(preBlockId) then
self:TryShowLine(preBlockId, blockId)
end
end
::CONTINUE::
end
end
--Fucking Line!
function XUiAreaWarInformation:TryShowLine(startBlockId, endBlockId)
local lineName = stringFormat("Line%d_%d", startBlockId, endBlockId)
local line = self[lineName]
if not line then
XLog.Error(
stringFormat(
"XUiAreaWarInformation:TryShowLine error: UI上找不到对应的区块连线, 前置区块Id: %d, 当前区块Id: %d",
startBlockId,
endBlockId
)
)
return
end
line.gameObject:SetActiveEx(true)
end
--排行榜
function XUiAreaWarInformation:UpdateRank()
local myRankItem = XDataCenter.AreaWarManager.GetWorldRankGetMyRankItem()
self.GridMyRankItem = self.GridMyRankItem or XUiGridAreaWarRank.New(self.GridMyRank)
self.GridMyRankItem:Refresh(myRankItem)
self.GridMyRankItem.GameObject:SetActiveEx(true)
self.RankList = XDataCenter.AreaWarManager.GetWorldRankList()
self.PanelEmpty.gameObject:SetActiveEx(XTool.IsTableEmpty(self.RankList))
self.DynamicTable:SetDataSource(self.RankList)
self.DynamicTable:ReloadDataSync()
end
function XUiAreaWarInformation:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:Refresh(self.RankList[index])
end
end