PGRData/Script/matrix/xui/xuipivotcombat/xuisettle/XUiPivotCombatCenterSettle.lua

197 lines
6.5 KiB
Lua
Raw Normal View History

--===========================================================================
---@desc 中心枢纽关卡结算
--===========================================================================
local XUiPivotCombatCenterSettle = XLuaUiManager.Register(XLuaUi, "UiPivotCombatCenterSettle")
function XUiPivotCombatCenterSettle:OnAwake()
self:InitUI()
self:InitCB()
end
function XUiPivotCombatCenterSettle:OnStart(winData)
self.WinData = winData
self.CustomData = XDataCenter.FubenManager.CurFightResult.CustomData
end
function XUiPivotCombatCenterSettle:OnEnable()
self:Refresh()
end
function XUiPivotCombatCenterSettle:Refresh()
if not self.WinData then
return
end
--刷新角色列表
self:RefreshCharacterList(self.WinData)
--刷新积分统计
local baseScore = self:RefreshIntegralStatistics()
local time = CS.XGame.ClientConfig:GetFloat("BossSingleAnimaTime")
local data = self.WinData
local stage = XDataCenter.PivotCombatManager.GetStage(data.StageId)
local curScore = math.ceil(baseScore * (1 + XDataCenter.PivotCombatManager.GetTotalScoreAddition()))
local maxScore = XDataCenter.PivotCombatManager.GetHistoryScore()
local highestGrade = XDataCenter.PivotCombatManager.GetHistoryRankingLevel()
self.PanelNewTag.gameObject:SetActiveEx(curScore > maxScore)
--刷新最高积分
if curScore > maxScore then
XDataCenter.PivotCombatManager.RefreshHistoryScore(curScore)
end
--刷新历史最高评分等级
if self.CurRatingLevel then
--当前评分等级
self.TxtAllRating.text = XPivotCombatConfigs.FightGrade[self.CurRatingLevel] or ""
if self.CurRatingLevel > highestGrade then
XDataCenter.PivotCombatManager.RefreshHistoryRankingLevel(self.CurRatingLevel)
end
else
self.TxtAllRating.gameObject:SetActiveEx(false)
end
--积分加成
self.TxtIntegralUp.text = string.format("%s%%", math.ceil(XDataCenter.PivotCombatManager.GetTotalScoreAddition() * 100))
--历史最高评分等级
self.TxtHistoryGrade.text = XPivotCombatConfigs.FightGrade[highestGrade] or ""
--播放音效
self.AudioInfo = CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.UiSettle_Win_Number)
2024-09-01 20:49:41 +00:00
self.BtnQuit.gameObject:SetActiveEx(false)
self.BtnReFight.gameObject:SetActiveEx(false)
XUiHelper.Tween(time, function(delta)
--当前总分
local point = math.ceil(delta * curScore)
self.TxtAllScore.text = point
--历史最高分
local oldPoint = math.ceil(delta * maxScore)
self.TxtHistoryScore.text = oldPoint
end, function()
self:StopAudio()
2024-09-01 20:49:41 +00:00
self.BtnQuit.gameObject:SetActiveEx(true)
self.BtnReFight.gameObject:SetActiveEx(true)
end)
end
--刷新参战角色列表
function XUiPivotCombatCenterSettle:RefreshCharacterList(data)
local charExp = data.CharExp
local count = #charExp
if count <= 0 then
return
end
for idx = 1, count do
local ui = CS.UnityEngine.Object.Instantiate(self.GridWinRole, self.PanelRoleContent)
local grid = {}
XTool.InitUiObjectByUi(grid, ui)
local charId = charExp[idx].Id
if XRobotManager.CheckIsRobotId(charId) then
charId = XRobotManager.GetCharacterId(charId)
end
local icon = XDataCenter.CharacterManager.GetCharBigHeadIcon(charId)
grid.RImgIcon:SetRawImage(icon)
grid.GameObject:SetActiveEx(true)
end
end
--刷新积分统计
function XUiPivotCombatCenterSettle:RefreshIntegralStatistics()
local resultKeys = XPivotCombatConfigs.FightResultKey
local customData = {}
if self.CustomData.Count <= 0 then return end
XTool.LoopMap(self.CustomData, function(playerId, data)
XTool.LoopMap(data.Dict, function(key, value)
customData[key] = value
end)
end)
--基础积分
local baseScore = 0
for key, value in pairs(customData) do
--超过key的最大值
if key > resultKeys.HighestGrade then
goto CONTINUE
end
local title = XPivotCombatConfigs.GetSettleDesc(key)
--评分等级
if key == resultKeys.HighestGrade then
-- 当前评分等级
self.CurRatingLevel = value
value = XPivotCombatConfigs.FightGrade[self.CurRatingLevel]
else
baseScore = baseScore + tonumber(value)
end
self:NewTipsGrid(title, value)
::CONTINUE::
end
return baseScore
end
function XUiPivotCombatCenterSettle:NewTipsGrid(title, score)
local ui = CS.UnityEngine.Object.Instantiate(self.BossLoseHp, self.PanelInfo)
local grid = {}
XTool.InitUiObjectByUi(grid, ui)
grid.TxtTitle.text = title
grid.TxtNum.text = ""
grid.TxtScore.text = score
grid.GameObject:SetActiveEx(true)
end
function XUiPivotCombatCenterSettle:StopAudio()
if self.AudioInfo then
self.AudioInfo:Stop()
end
end
function XUiPivotCombatCenterSettle:InitUI()
2024-09-01 20:49:41 +00:00
--self.BtnQuit.gameObject:SetActiveEx(true)
--self.BtnReFight.gameObject:SetActiveEx(true)
self.GridWinRole.gameObject:SetActiveEx(false)
self.BossLoseHp.gameObject:SetActiveEx(false)
self.TxtAllRating = self.TxtHistoryScore.transform.parent:Find("TxtAllRating"):GetComponent("Text")
end
function XUiPivotCombatCenterSettle:InitCB()
self.BtnQuit.CallBack = function()
self:Close()
end
self.BtnReFight.CallBack = function()
if not XDataCenter.PivotCombatManager.IsOpen() then return end
--避免多次挑战出现UI堆叠
self:Close()
local region = XDataCenter.PivotCombatManager.GetCenterRegion()
if not region then return end
local team = XDataCenter.PivotCombatManager.GetTeam(region:GetRegionId())
local stageId = self.WinData.StageId
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
local teamId = team:GetId()
local isAssist = CS.UnityEngine.PlayerPrefs.GetInt(XPrefs.AssistSwitch .. XPlayer.Id) == 1
XDataCenter.FubenManager.EnterFight(stageCfg, teamId, isAssist)
end
end
function XUiPivotCombatCenterSettle:OnGetEvents()
return {
XEventId.EVENT_ACTIVITY_ON_RESET,
XEventId.EVENT_PIVOTCOMBAT_ACTIVITY_END,
}
end
function XUiPivotCombatCenterSettle:OnNotify(evt, ...)
local args = { ... }
--通用处理事件
XDataCenter.PivotCombatManager.OnNotify(evt, args)
end