204 lines
8.9 KiB
Lua
204 lines
8.9 KiB
Lua
--这个界面仅仅用在BOSS关卡胜利时展示,其他光辉同行结算界面使用通用
|
||
local XUiSettleWinBrilliantWalk = XLuaUiManager.Register(XLuaUi, "UiSettleWinBrilliantWalk")
|
||
local RollingAnimeTime = CS.XGame.ClientConfig:GetFloat("BrilliantWalkBossGameSetAnimeTime") --动画滚动时间
|
||
local PerfectRollingAnimeTime = CS.XGame.ClientConfig:GetFloat("BrilliantWalkBossGameSetPerfectAnimeTime") --完美动画滚动时间
|
||
local MAX_RANKING = 7 --最大评价等级
|
||
function XUiSettleWinBrilliantWalk:OnAwake()
|
||
self.BtnSkipAnime.CallBack = function()
|
||
self:OnBtnSkipAnimeClick()
|
||
end
|
||
|
||
self.BtnSave.CallBack = function()
|
||
self:OnBtnSaveClick()
|
||
end
|
||
end
|
||
--settleData = { --仅供参考
|
||
-- ["MaxComboScore"] = 0,
|
||
-- ["ComboScore"] = 0,
|
||
-- ["MaxTimeScore"] = 0,
|
||
-- ["HighestCombo"] = 0,
|
||
-- ["TimeScore"] = 0,
|
||
-- ["FightTime"] = 0,
|
||
-- ["HpLeftPer"] = 0,
|
||
-- ["HpScore"] = 0,
|
||
-- ["StageId"] = 30061305,
|
||
-- ["MaxHpScore"] = 0,
|
||
-- ["TotalScore"] = 0,
|
||
--},
|
||
function XUiSettleWinBrilliantWalk:OnEnable()
|
||
local settleData = XDataCenter.BrilliantWalkManager.GetUIBossStageSettleWin()
|
||
if not settleData then
|
||
self:Close()
|
||
end
|
||
self:ResetSchedule()
|
||
self:UpdateView(settleData)
|
||
end
|
||
--重置动画计时器
|
||
function XUiSettleWinBrilliantWalk:ResetSchedule()
|
||
if self.AnimeSchedule then
|
||
self.BtnSkipAnime.gameObject:SetActiveEx(false)
|
||
XScheduleManager.UnSchedule(self.AnimeSchedule)
|
||
self.AnimeSchedule = nil
|
||
end
|
||
end
|
||
--刷新界面
|
||
function XUiSettleWinBrilliantWalk:UpdateView(settleData)
|
||
self.SettleData = settleData
|
||
local stageId = settleData.StageId
|
||
local stageType = XBrilliantWalkConfigs.GetStageType(stageId)
|
||
local stageConfig = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
local isPerfect = settleData.IsPerfect == 1
|
||
--关卡名
|
||
self.TxtName.text = stageConfig.Name
|
||
--难度
|
||
if stageType == XBrilliantWalkStageType.Boss then
|
||
self.TxtDifficult.text = CsXTextManagerGetText("BrilliantWalkBossGameSetDifficultNormal")
|
||
elseif stageType == XBrilliantWalkStageType.HardBoss then
|
||
self.TxtDifficult.text = CsXTextManagerGetText("BrilliantWalkBossGameSetDifficultHard")
|
||
end
|
||
--最大可能获取分数
|
||
self.TxAlltLeftTimeScore.text = CsXTextManagerGetText("BrilliantWalkMaxPoint",settleData.MaxTimeScore)
|
||
self.TxtAllCharLeftHpScore.text = CsXTextManagerGetText("BrilliantWalkMaxPoint",settleData.MaxHpScore)
|
||
self.TxtBossAllLoseHpScore.text = CsXTextManagerGetText("BrilliantWalkMaxPoint",settleData.MaxComboScore)
|
||
--是否完美通关
|
||
self.TextNoInjured.gameObject:SetActiveEx(isPerfect)
|
||
--关闭刷新纪录
|
||
self.PanelNewTag.gameObject:SetActiveEx(false)
|
||
self.Txtx2.gameObject:SetActiveEx(false)
|
||
self:PlayRollingAnime(settleData)
|
||
end
|
||
--播放滚动动画
|
||
function XUiSettleWinBrilliantWalk:PlayRollingAnime(settleData)
|
||
local stageId = settleData.StageId
|
||
local isPerfect = settleData.IsPerfect == 1
|
||
--评价等级UI
|
||
self.RawImage:SetRawImage(CS.XGame.ClientConfig:GetString("BrilliantWalkStageDetailRankRImg1"))
|
||
--动画滚动到最后时的分数
|
||
local finalScore = 0
|
||
if isPerfect then
|
||
finalScore = settleData.TotalScore / 2
|
||
else
|
||
finalScore = settleData.TotalScore
|
||
end
|
||
--动画滚动到最后时的评价等级 用来计算滚动动画时长
|
||
local finalRank = XDataCenter.BrilliantWalkManager.GetStageScoreRank(stageId,finalScore)
|
||
--分数滚动动画
|
||
local currentAnimRank = 1
|
||
local animTime = RollingAnimeTime / MAX_RANKING * finalRank
|
||
self.BtnSkipAnime.gameObject:SetActiveEx(true)
|
||
self.AnimeSchedule = XUiHelper.Tween(animTime, function(f)
|
||
if XTool.UObjIsNil(self.Transform) then
|
||
return
|
||
end
|
||
local leftTime = XUiHelper.GetTime(math.floor(f * settleData.FightTime),XUiHelper.TimeFormatType.MINUTE_SECOND)
|
||
local leftTimeScore = "+" .. math.floor(f * settleData.TimeScore)
|
||
local charLeftHp = math.floor(f * settleData.HpLeftPer) .. "%"
|
||
local charLeftHpScore = "+" .. math.floor(f * settleData.HpScore)
|
||
local bossLoseHp = math.floor(f * settleData.HighestCombo)
|
||
local bossLoseHpScore = "+" .. math.floor(f * settleData.ComboScore)
|
||
local allScore = math.floor(f * finalScore)
|
||
local rank = XDataCenter.BrilliantWalkManager.GetStageScoreRank(stageId,allScore)
|
||
--通关时间相关
|
||
self.TxtLeftTime.text = leftTime
|
||
self.TxtLeftTimeScore.text = leftTimeScore
|
||
--剩余血量相关
|
||
self.TxtCharLeftHp.text = charLeftHp
|
||
self.TxtCharLeftHpScore.text = charLeftHpScore
|
||
---最大连击相关
|
||
self.TxtBossLoseHp.text = bossLoseHp
|
||
self.TxtBossLoseHpScore.text = bossLoseHpScore
|
||
--总分
|
||
self.TxtAllScore.text = allScore
|
||
--评价等级
|
||
if rank > currentAnimRank then
|
||
self.RawImage:SetRawImage(CS.XGame.ClientConfig:GetString("BrilliantWalkStageDetailRankRImg" .. rank))
|
||
self:PlayAnimation("RawImageEnable")
|
||
end
|
||
currentAnimRank = rank
|
||
end, function()
|
||
if isPerfect then
|
||
self:PlayPerfectRollingAnime(settleData)
|
||
else
|
||
self:FinishUpdateView(settleData)
|
||
end
|
||
end)
|
||
end
|
||
--播放完美滚动动画
|
||
function XUiSettleWinBrilliantWalk:PlayPerfectRollingAnime(settleData)
|
||
local stageId = settleData.StageId
|
||
self:PlayAnimation("TxtAllScoreEnable")
|
||
--评价等级UI
|
||
local currentAnimRank = XDataCenter.BrilliantWalkManager.GetStageScoreRank(stageId,settleData.TotalScore / 2)
|
||
self.RawImage:SetRawImage(CS.XGame.ClientConfig:GetString("BrilliantWalkStageDetailRankRImg" .. currentAnimRank))
|
||
self.TxtAllScore.text = settleData.TotalScore / 2
|
||
local animTime = PerfectRollingAnimeTime
|
||
self.BtnSkipAnime.gameObject:SetActiveEx(true)
|
||
self.AnimeSchedule = XUiHelper.Tween(animTime, function(f)
|
||
if XTool.UObjIsNil(self.Transform) then
|
||
return
|
||
end
|
||
--动画滚到到最后
|
||
local allScore = settleData.TotalScore / 2 + math.floor(f * settleData.TotalScore / 2)
|
||
--动画最后时的关卡评价 用来计算滚动动画总时长
|
||
local rank = XDataCenter.BrilliantWalkManager.GetStageScoreRank(stageId,allScore)
|
||
--总分
|
||
self.TxtAllScore.text = allScore
|
||
--评价等级
|
||
if rank > currentAnimRank then
|
||
self.RawImage:SetRawImage(CS.XGame.ClientConfig:GetString("BrilliantWalkStageDetailRankRImg" .. rank))
|
||
self:PlayAnimation("RawImageEnable")
|
||
end
|
||
currentAnimRank = rank
|
||
end, function()
|
||
self:FinishUpdateView(settleData)
|
||
end)
|
||
end
|
||
--显示最终结果画面
|
||
function XUiSettleWinBrilliantWalk:FinishUpdateView(settleData)
|
||
if XTool.UObjIsNil(self.Transform) then
|
||
return
|
||
end
|
||
self:ResetSchedule()
|
||
local stageId = settleData.StageId
|
||
local stageType = XBrilliantWalkConfigs.GetStageType(stageId)
|
||
local stageConfig = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
local isPerfect = settleData.IsPerfect == 1
|
||
local isNewRecord = settleData.IsNewRecord
|
||
--关卡名
|
||
self.TxtName.text = stageConfig.Name
|
||
--难度
|
||
if stageType == XBrilliantWalkStageType.Boss then
|
||
self.TxtDifficult.text = CsXTextManagerGetText("BrilliantWalkBossGameSetDifficultNormal")
|
||
elseif stageType == XBrilliantWalkStageType.HardBoss then
|
||
self.TxtDifficult.text = CsXTextManagerGetText("BrilliantWalkBossGameSetDifficultHard")
|
||
end
|
||
--通关时间相关
|
||
self.TxtLeftTime.text = XUiHelper.GetTime(settleData.FightTime,XUiHelper.TimeFormatType.MINUTE_SECOND)
|
||
self.TxtLeftTimeScore.text = "+" .. settleData.TimeScore
|
||
self.TxAlltLeftTimeScore.text = CsXTextManagerGetText("BrilliantWalkMaxPoint",settleData.MaxTimeScore)
|
||
--剩余血量相关
|
||
self.TxtCharLeftHp.text = settleData.HpLeftPer .. "%"
|
||
self.TxtCharLeftHpScore.text = "+" .. settleData.HpScore
|
||
self.TxtAllCharLeftHpScore.text = CsXTextManagerGetText("BrilliantWalkMaxPoint",settleData.MaxHpScore)
|
||
---最大连击相关
|
||
self.TxtBossLoseHp.text = settleData.HighestCombo
|
||
self.TxtBossLoseHpScore.text = "+" .. settleData.ComboScore
|
||
self.TxtBossAllLoseHpScore.text = CsXTextManagerGetText("BrilliantWalkMaxPoint",settleData.MaxComboScore)
|
||
--最大分数和评价
|
||
self.TxtAllScore.text = settleData.TotalScore
|
||
local rank = XDataCenter.BrilliantWalkManager.GetStageScoreRank(stageId,settleData.TotalScore)
|
||
self.RawImage:SetRawImage(CS.XGame.ClientConfig:GetString("BrilliantWalkStageDetailRankRImg" .. rank))
|
||
--是否完美通关
|
||
self.TextNoInjured.gameObject:SetActiveEx(isPerfect)
|
||
self.PanelNewTag.gameObject:SetActiveEx(isNewRecord)
|
||
end
|
||
--点击中断动画
|
||
function XUiSettleWinBrilliantWalk:OnBtnSkipAnimeClick()
|
||
if self.AnimeSchedule then
|
||
self:FinishUpdateView(self.SettleData)
|
||
end
|
||
end
|
||
--点击保存
|
||
function XUiSettleWinBrilliantWalk:OnBtnSaveClick()
|
||
self:Close()
|
||
end
|