forked from endernon/PGRData
205 lines
8.9 KiB
Lua
205 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
|