PGRData/Script/matrix/xui/xuiarena/XUiPanelActive.lua

341 lines
No EOL
12 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiPanelActive = XClass(nil, "XUiPanelActive")
local XUiArenaGrid = require("XUi/XUiArena/XUiArenaGrid")
local XUiArenaContributeScore = require("XUi/XUiArena/XUiArenaContributeScore")
function XUiPanelActive:Ctor(ui, rootUi)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.RootUi = rootUi
XTool.InitUiObject(self)
self:AutoAddListener()
self:RegisterRedPointEvent()
self.TeamMemberList = {}
table.insert(self.TeamMemberList, self.GridMember1)
table.insert(self.TeamMemberList, self.GridMember2)
self.GridTitleCache = {}
table.insert(self.GridTitleCache, self.GridTitle)
self.GridPlayerCache = {}
self.GridPlayer.gameObject:SetActive(false)
self.IsShow = false
self.GameObject:SetActive(false)
end
function XUiPanelActive:CheckRedPoint()
if self.EventId then
XRedPointManager.Check(self.EventId)
end
end
function XUiPanelActive:RegisterRedPointEvent()
self.EventId = XRedPointManager.AddRedPointEvent(self.ImgRedLegion, self.OnCheckTaskNews, self, { XRedPointConditions.Types.CONDITION_ARENA_MAIN_TASK })
end
--@region 注册点击事件
function XUiPanelActive:RegisterClickEvent(uiNode, func)
if func == nil then
XLog.Error("XUiPanelActive:RegisterClickEvent函数参数错误参数func不能为空")
return
end
if type(func) ~= "function" then
XLog.Error("XUiPanelActive:RegisterClickEvent函数错误, 参数func需要是function类型, func的类型是" .. type(func))
end
local listener = function(...)
func(self, ...)
end
CsXUiHelper.RegisterClickEvent(uiNode, listener)
end
function XUiPanelActive:AutoAddListener()
self:RegisterClickEvent(self.BtnDetail, self.OnBtnDetailClick)
self:RegisterClickEvent(self.BtnTeamRank, self.OnBtnTeamRankClick)
self:RegisterClickEvent(self.BtnSelectWarZone, self.OnBtnSelectWarZoneClick)
self:RegisterClickEvent(self.BtnArenaTask, self.OnBtnArenaTaskClick)
self:RegisterClickEvent(self.BtnArenaLevelDetail, self.OnBtnArenaLevelDetailClick)
self:RegisterClickEvent(self.BtnShop, self.OnBtnShopClick)
self:RegisterClickEvent(self.BtnDetailsA, self.OnBtnBtnDetailsClick)
self:RegisterClickEvent(self.BtnDetailsB, self.OnBtnBtnDetailsClick)
self:RegisterClickEvent(self.BtnTxtNumber, self.OnBtnTxtNumber)
end
function XUiPanelActive:OnBtnArenaLevelDetailClick()
XLuaUiManager.Open("UiArenaLevelDetail")
end
function XUiPanelActive:OnBtnDetailClick()
XUiManager.UiFubenDialogTip("", CS.XTextManager.GetText("ArenaActivityStrategyContent") or "")
end
function XUiPanelActive:OnBtnTeamRankClick()
XDataCenter.ArenaManager.RequestTeamRankData(function()
XLuaUiManager.Open("UiArenaTeamRank")
end)
end
function XUiPanelActive:OnBtnSelectWarZoneClick()
XLuaUiManager.Open("UiArenaWarZone")
end
function XUiPanelActive:OnBtnArenaTaskClick()
XLuaUiManager.Open("UiArenaTask")
end
function XUiPanelActive:OnBtnShopClick()
XLuaUiManager.Open("UiShop", XShopManager.ShopType.Arena)
end
function XUiPanelActive:OnBtnBtnDetailsClick()
XLuaUiManager.Open("UiArenaContributeTips", true)
end
function XUiPanelActive:OnBtnTxtNumber()
XLuaUiManager.Open("UiArenaContributeTips", true, 2)
end
--@endregion
function XUiPanelActive:Show()
if self.IsShow then
XDataCenter.ArenaManager.RequestGroupMember()
return
end
self.IsShow = true
self.GameObject:SetActive(true)
XEventManager.AddEventListener(XEventId.EVENT_ARENA_MAIN_INFO, self.RefreshMainInfo, self)
XDataCenter.ArenaManager.RequestGroupMember()
self:Refresh()
end
function XUiPanelActive:Hide()
if not self.IsShow then
return
end
self.IsShow = false
self.GameObject:SetActive(false)
XEventManager.RemoveEventListener(XEventId.EVENT_ARENA_MAIN_INFO, self.RefreshMainInfo, self)
end
function XUiPanelActive:Refresh()
local challengeCfg = XDataCenter.ArenaManager.GetCurChallengeCfg()
if challengeCfg then
self.TxtLevelRange.text = CS.XTextManager.GetText("ArenaPlayerLevelRange", challengeCfg.MinLv, challengeCfg.MaxLv)
self.TxtArenaRegion.text = challengeCfg.Name
end
local arenaLevel = XDataCenter.ArenaManager.GetCurArenaLevel()
local arenaLevelCfg = XArenaConfigs.GetArenaLevelCfgByLevel(arenaLevel)
if arenaLevelCfg then
self.RImgArenaLevel:SetRawImage(arenaLevelCfg.Icon)
end
XCountDown.BindTimer(self.TxtCountDownTime.gameObject, XArenaConfigs.ArenaTimerName, function(v)
self.TxtCountDownTime.text = CS.XTextManager.GetText("ArenaActivityEndCountDown", XUiHelper.GetTime(v, XUiHelper.TimeFormatType.CHALLENGE))
end)
end
function XUiPanelActive:UnBindTimer()
XCountDown.UnBindTimer(self.TxtCountDownTime.gameObject, XArenaConfigs.ArenaTimerName)
end
function XUiPanelActive:RefreshMainInfo()
if not self.GameObject:Exist() then
return
end
self:RefreshSelfInfo()
self:RefreshTeamInfo()
self:RefreshArenaPlayerRank()
end
-- 自身
function XUiPanelActive:RefreshSelfInfo()
local wave = XDataCenter.ArenaManager.GetWaveRate()
local selfInfo = XDataCenter.ArenaManager.GetPlayerArenaInfo()
local rank, region = XDataCenter.ArenaManager.GetPlayerArenaRankAndRegion()
local challengeCfg = XDataCenter.ArenaManager.GetCurChallengeCfg()
local contributeScore = XDataCenter.ArenaManager.GetContributeScoreByCfg(rank, challengeCfg, selfInfo.Point)
local sumContributeScore = XDataCenter.ArenaManager.GetContributeScore()
self.TxtWave.text = CS.XTextManager.GetText("ArenaWaveRate", wave)
self.TxtSelfNickname.text = selfInfo.Name
self.TxtPoint.text = selfInfo.Point
self.TxtRank.text = "No." .. rank
self.TxtRankRange.text = XArenaConfigs.GetRankRegionText(region)
XUiPLayerHead.InitPortrait(selfInfo.CurrHeadPortraitId, selfInfo.CurrHeadFrameId, self.Head)
if sumContributeScore >= CS.XGame.Config:GetInt("ArenaProtectContributeScore") then
self.PanelContribute.gameObject:SetActiveEx(false)
self.PanelContributeActivation.gameObject:SetActiveEx(true)
else
local max = CS.XGame.Config:GetInt("ArenaMaxContributeScore")
self.TxtSumNumber.text = sumContributeScore
self.ImgJd.fillAmount = sumContributeScore / max
self.TxtMaxNumber.text = "/" .. max
self.TxtNumberDesc.text = CS.XTextManager.GetText("ContributeScoreNumberDesc", max)
self.PanelContribute.gameObject:SetActiveEx(true)
self.PanelContributeActivation.gameObject:SetActiveEx(false)
end
XUiArenaContributeScore.Refresh(self.TxtNumber, contributeScore, selfInfo.Point, "000000FF")
end
-- 队伍
function XUiPanelActive:RefreshTeamInfo()
self.TxtTeamPoint.text = XDataCenter.ArenaManager.GetArenaTeamTotalPoint()
local teamMemberList = XDataCenter.ArenaManager.GetPlayerArenaTeamMemberInfo()
for i, grid in ipairs(self.TeamMemberList) do
local head = XUiHelper.TryGetComponent(grid.transform, "Head")
local nickname = XUiHelper.TryGetComponent(grid.transform, "TxtNickname", "Text")
local btnHead = XUiHelper.TryGetComponent(grid.transform, "BtnHead", "Button")
CsXUiHelper.RegisterClickEvent(btnHead, function()
local memberInfo = teamMemberList[i]
if memberInfo then
XDataCenter.PersonalInfoManager.ReqShowInfoPanel(memberInfo.Id)
end
end, true)
local member = teamMemberList[i]
if member then
nickname.text = XDataCenter.SocialManager.GetPlayerRemark(member.Id, member.Name)
XUiPLayerHead.InitPortrait(member.CurrHeadPortraitId, member.CurrHeadFrameId, head)
else
nickname.text = ""
XUiPLayerHead.Hide(head)
end
end
end
function XUiPanelActive:RefreshArenaPlayerRank()
local challengeCfg = XDataCenter.ArenaManager.GetCurChallengeCfg()
local rankData = XDataCenter.ArenaManager.GetPlayerArenaRankList()
for _, v in ipairs(self.GridTitleCache) do
v.gameObject:SetActiveEx(false)
end
for _, v in ipairs(self.GridPlayerCache) do
v.GameObject:SetActiveEx(false)
end
if not challengeCfg then
return
end
self.SiblingIndex = 1
local titleIndex = 1
local playerIndex = 1
-- 晋级区
if challengeCfg.DanUpRank > 0 then
self:AddTitle(titleIndex, challengeCfg.UpRewardId)
for i, info in ipairs(rankData.UpList) do
self:AddPlayer(playerIndex, info, i)
playerIndex = playerIndex + 1
end
end
-- 保级区
titleIndex = titleIndex + 1
self:AddTitle(titleIndex, challengeCfg.KeepRewardId)
for i, info in ipairs(rankData.KeepList) do
self:AddPlayer(playerIndex, info, i)
playerIndex = playerIndex + 1
end
-- 降级区
if challengeCfg.DanDownRank > 0 then
titleIndex = titleIndex + 1
self:AddTitle(titleIndex, challengeCfg.DownRewardId)
for i, info in ipairs(rankData.DownList) do
self:AddPlayer(playerIndex, info, i)
playerIndex = playerIndex + 1
end
end
end
function XUiPanelActive:AddTitle(rankRegion, rewardId)
local grid = self.GridTitleCache[rankRegion]
if not grid then
local go = CS.UnityEngine.GameObject.Instantiate(self.GridTitle.gameObject)
grid = go.transform
grid:SetParent(self.PanelContent, false)
table.insert(self.GridTitleCache, grid)
end
grid.gameObject:SetActive(true)
grid:SetSiblingIndex(self.SiblingIndex - 1)
self.SiblingIndex = self.SiblingIndex + 1
-- 界面显示
local rankRange = XUiHelper.TryGetComponent(grid.transform, "TxtRankRange", "Text")
local rewardIcon = XUiHelper.TryGetComponent(grid.transform, "ImgReward", "Image")
local rewardCount = XUiHelper.TryGetComponent(grid.transform, "ImgRewardCount", "Text")
local btnTitle = XUiHelper.TryGetComponent(grid.transform, "BtnTitle", "Button")
local btnReward = XUiHelper.TryGetComponent(grid.transform, "ImgReward/BtnReward", "Button")
CsXUiHelper.RegisterClickEvent(btnTitle, function()
XLuaUiManager.Open("UiArenaLevelDetail")
end, true)
CsXUiHelper.RegisterClickEvent(btnReward, function()
local list = XRewardManager.GetRewardList(rewardId)
if not list or #list <= 0 then
return
end
local goodsShowParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(list[1].TemplateId)
if goodsShowParams.RewardType == XRewardManager.XRewardType.Character then
--从Tips的ui跳转需要关闭Tips的UI
XLuaUiManager.Open("UiCharacterDetail", list[1].TemplateId)
elseif goodsShowParams.RewardType == XRewardManager.XRewardType.Equip then
XLuaUiManager.Open("UiEquipDetail", list[1].TemplateId, true)
--从Tips的ui跳转需要关闭Tips的UI
else
XLuaUiManager.Open("UiTip", list[1] and list[1] or list[1].TemplateId)
end
end, true)
rankRange.text = XArenaConfigs.GetRankRegionText(rankRegion)
local rewards = XRewardManager.GetRewardList(rewardId)
if not rewards or #rewards <= 0 then
return
end
local iconPath = XGoodsCommonManager.GetGoodsIcon(rewards[1].TemplateId)
self.RootUi:SetUiSprite(rewardIcon, iconPath)
rewardCount.text = rewards[1].Count
end
function XUiPanelActive:AddPlayer(index, playerInfo, regionIndex)
local xUiArenaGrid = self.GridPlayerCache[index]
if not xUiArenaGrid then
local grid = CS.UnityEngine.GameObject.Instantiate(self.GridPlayer.gameObject)
grid.transform:SetParent(self.PanelContent, false)
xUiArenaGrid = XUiArenaGrid.New(grid)
table.insert(self.GridPlayerCache, xUiArenaGrid)
end
xUiArenaGrid:Refresh(index, playerInfo, regionIndex)
xUiArenaGrid:SetSiblingIndex(self.SiblingIndex - 1)
self.SiblingIndex = self.SiblingIndex + 1
end
-- 红点
function XUiPanelActive:OnCheckTaskNews(count)
if self.ImgRedLegion then
self.ImgRedLegion.gameObject:SetActive(count >= 0)
end
end
return XUiPanelActive