Files
SL1900 35c8d87e86 Update - 1.4.0.73
EN: 1.4.0.73
CN: 1.4.0.74
JP: 1.4.0.77
KR: 1.4.0.80
2025-12-25 19:00:00 +09:00

415 lines
14 KiB
Lua

local TDBattleResultCtrl = class("TDBattleResultCtrl", BaseCtrl)
local WwiseManger = CS.WwiseAudioManager.Instance
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
TDBattleResultCtrl._mapNodeConfig = {
imgBlurredBg = {},
goComplete = {sComponentName = "GameObject"},
goFailed = {sComponentName = "GameObject"},
Mask = {
sComponentName = "CanvasGroup"
},
goMainlineNameSuc = {
sComponentName = "RectTransform"
},
txtMainlineName = {nCount = 2, sComponentName = "TMP_Text"},
ButtonClose = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnDamageResult = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_ShowDamageResult"
},
goRoot = {
sNodeName = "----SafeAreaRoot----"
},
animatorRoot = {sNodeName = "goComplete", sComponentName = "Animator"},
goWorldLevel = {},
imgExp = {sComponentName = "Image"},
txtRank = {sComponentName = "TMP_Text"},
txtRankEn = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_RANK"
},
txtWorldExp = {sComponentName = "TMP_Text"},
imgExpBg = {},
txtGetWorldExp = {sComponentName = "TMP_Text"},
goRankArrow = {},
imgBlack = {},
txtTip = {
sComponentName = "TMP_Text",
sLanguageId = "Battle_Result_Fail_Tip"
},
txtTipShadow = {
sComponentName = "TMP_Text",
sLanguageId = "Battle_Result_Fail_Tip"
},
txtExp = {
sComponentName = "TMP_Text",
sLanguageId = "WorldClass_ExpTips"
},
goGacha = {},
animGacha = {
sNodeName = "goGachaItem",
sComponentName = "Animator"
},
imgFull = {sComponentName = "Image"},
imgSplitB = {sComponentName = "Image"},
imgSplitC = {sComponentName = "Image"},
imgSplitD = {sComponentName = "Image"},
goAffixes = {},
TMPTitleAffix = {
sComponentName = "TMP_Text",
sLanguageId = "TravelerDuel_Affixes_Title"
},
goAffix = {sComponentName = "Transform", nCount = 25},
TMPHardTitle = {
sComponentName = "TMP_Text",
sLanguageId = "TravelerDuel_Result_Difficulty"
},
txtRankTimeTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Battle_Time"
},
TMPHard = {sComponentName = "TMP_Text"},
txtRankTime = {sComponentName = "TMP_Text"},
imgNewRecord = {},
imgHardTitleBg = {},
imgHardScoreTitleBg = {},
imgTimeScoreTitleBg = {},
TMPFinalScoreTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Result_FinalScore_Title"
},
TMPFinalScore = {sComponentName = "TMP_Text"},
TMPTimeScoreTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Result_TimeScore_Title"
},
TMPTimeScore = {sComponentName = "TMP_Text"},
TMPHardScore = {sComponentName = "TMP_Text"},
TMPHardScoreTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Result_BaseScore_Title"
},
txtClickToContinue = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Tips_Continue"
}
}
TDBattleResultCtrl._mapEventConfig = {}
local starGachaCfg = {
[1] = {
iconPath = "icon_roguegacha_03%s",
animName = "BattleResultgoGacha_r"
},
[2] = {
iconPath = "icon_roguegacha_02%s",
animName = "BattleResultgoGacha_sr"
},
[3] = {
iconPath = "icon_roguegacha_01%s",
animName = "BattleResultgoGacha_ssr"
}
}
local name_bg_pos_y_1 = 220
local name_bg_pos_y_2 = 119
local time_bg_pos_y_1 = -4.1
local time_bg_pos_y_2 = -113
function TDBattleResultCtrl:Awake()
self.canvas = self.gameObject:GetComponent("Canvas")
EventManager.Hit(EventId.AvgBubbleShutDown)
NovaAPI.SetComponentEnable(self.canvas, false)
self._mapNode.goGacha.gameObject:SetActive(false)
end
function TDBattleResultCtrl:OnEnable()
self.bAnimEnd = false
local tbParam = self:GetPanelParam()
self.nResultState = 0
if #tbParam == 2 and tbParam[1] == false then
self.nResultState = 3
elseif tbParam[1] then
self.nResultState = 1
elseif #tbParam == 3 and tbParam[1] == false then
self.nResultState = 2
end
local tbStar = tbParam[2]
local GenerRewardItems = tbParam[3]
local FirstRewardItems = tbParam[4]
local ChestRewardItems = tbParam[5]
local nExp = tbParam[6] or 0
local bPureAvg = tbParam[7]
local nTime = tbParam[8]
local nTDLevelId = tbParam[9]
local tbChar = tbParam[10]
local tbAffixes = tbParam[11]
local nTimeScore = tbParam[12]
local nHardScore = tbParam[13]
local nFinalScore = tbParam[14]
local bNewRecord = tbParam[15]
self.mapChangeInfo = tbParam[16]
local SurpriseItems = tbParam[17]
local CustomItems = tbParam[18]
self.tbCharDamage = tbParam[19] or {}
local nHard = 0
for i = 1, 2 do
self._mapNode.btnDamageResult[i].gameObject:SetActive(self.tbCharDamage ~= nil and 0 < #self.tbCharDamage)
end
self.bNewRecord = bNewRecord
self.nFinalScore = nFinalScore
self.tbChar = tbChar
for _, nAffixesId in ipairs(tbAffixes) do
local mapAffixCfgData = ConfigTable.GetData("TravelerDuelChallengeAffix", nAffixesId)
if mapAffixCfgData ~= nil then
nHard = nHard + mapAffixCfgData.Difficulty
end
end
for index = 1, 25 do
self:SetAffixIcon(self._mapNode.goAffix[index], tbAffixes[index])
end
NovaAPI.SetTMPText(self._mapNode.TMPHard, nHard)
NovaAPI.SetTMPText(self._mapNode.txtRankTime, nTime .. ConfigTable.GetUIText("Talent_Sec"))
NovaAPI.SetTMPText(self._mapNode.TMPFinalScore, nFinalScore)
NovaAPI.SetTMPText(self._mapNode.TMPTimeScore, nTimeScore)
NovaAPI.SetTMPText(self._mapNode.TMPHardScore, nHardScore)
self._mapNode.imgNewRecord:SetActive(bNewRecord)
self.mapTravelerDuelLevel = ConfigTable.GetData("TravelerDuelBossLevel", nTDLevelId)
local sTravelerDuelLevelName = ""
if self.mapTravelerDuelLevel ~= nil then
if self.nResultState == 1 then
sTravelerDuelLevelName = self.mapTravelerDuelLevel.Name
else
sTravelerDuelLevelName = self.mapTravelerDuelLevel.Name .. orderedFormat(ConfigTable.GetUIText("TD_BattleResultDifficulty"), nHard)
end
end
local nStar = 0
for i = 0, 2 do
if tbStar[i] then
nStar = nStar + 1
end
end
self.nLevelStar = nStar
self.bSuccess = 0 < nStar
self.mapReward = {}
if SurpriseItems ~= nil then
for _, v in pairs(SurpriseItems) do
v.rewardType = AllEnum.RewardType.Extra
table.insert(self.mapReward, v)
end
end
for _, v in pairs(GenerRewardItems) do
table.insert(self.mapReward, v)
end
if CustomItems ~= nil then
for _, v in pairs(CustomItems) do
table.insert(self.mapReward, v)
end
end
for _, v in pairs(FirstRewardItems) do
v.rewardType = AllEnum.RewardType.First
table.insert(self.mapReward, v)
end
for _, v in pairs(ChestRewardItems) do
v.rewardType = AllEnum.RewardType.Three
table.insert(self.mapReward, v)
end
for _, v in ipairs(self._mapNode.txtMainlineName) do
NovaAPI.SetTMPText(v, sTravelerDuelLevelName)
end
self:RefreshWorldClass(nExp)
local nCurTeam = 5
if PlayerData.nCurGameType == AllEnum.WorldMapNodeType.Mainline then
nCurTeam = PlayerData.Mainline.nCurTeamIndex
end
local tbTeamMemberId, nCaptain
if tbChar == nil then
nCaptain, tbTeamMemberId = PlayerData.Team:GetTeamData(nCurTeam)
else
tbTeamMemberId = tbChar
end
local tbRoleId = {}
for i = 1, #tbTeamMemberId do
if tbTeamMemberId[i] ~= nil and 0 < tbTeamMemberId[i] then
table.insert(tbRoleId, tbTeamMemberId[i])
end
end
if #tbRoleId == 0 then
table.insert(tbRoleId, 112)
end
self.tbRoleList = tbRoleId
if bPureAvg then
self._mapNode.trActor2D_PNG.gameObject:SetActive(false)
else
end
self._mapNode.imgHardTitleBg:SetActive(true)
self._mapNode.imgHardScoreTitleBg:SetActive(false)
self._mapNode.imgTimeScoreTitleBg:SetActive(false)
self._mapNode.TMPFinalScoreTitle.gameObject:SetActive(false)
WwiseManger:PostEvent("ui_loading_combatSFX_mute", nil, false)
WwiseManger:PostEvent("char_common_all_pause")
WwiseManger:PostEvent("mon_common_all_pause")
WwiseManger:SetState("level", "None")
WwiseManger:SetState("combat", "None")
local nAnimTime
if self.nResultState == 1 then
self._mapNode.goRoot.gameObject:SetActive(true)
self._mapNode.imgBlurredBg.gameObject:SetActive(false)
self._mapNode.goFailed:SetActive(false)
self._mapNode.goComplete:SetActive(true)
WwiseManger:PlaySound("ui_roguelike_victory")
WwiseManger:SetState("system", "victory2")
if 0 < #tbAffixes then
nAnimTime = 4.2
self._mapNode.animatorRoot:Play("TravelerDuelBattleResultPanel_victory_out")
self._mapNode.imgBlack:SetActive(true)
else
nAnimTime = 4
self._mapNode.imgBlack:SetActive(false)
end
else
WwiseManger:SetState("system", "defeat")
CS.AdventureModuleHelper.PauseLogic()
self._mapNode.goRoot.gameObject:SetActive(false)
self._mapNode.imgBlurredBg.gameObject:SetActive(true)
self._mapNode.goFailed:SetActive(true)
self._mapNode.goComplete:SetActive(false)
nAnimTime = 3
end
self._mapNode.Mask.gameObject:SetActive(false)
self._mapNode.ButtonClose[1].gameObject:SetActive(false)
self._mapNode.ButtonClose[2].gameObject:SetActive(false)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goRoot.gameObject:SetActive(true)
self._mapNode.ButtonClose[1].gameObject:SetActive(true)
self._mapNode.ButtonClose[2].gameObject:SetActive(true)
NovaAPI.SetComponentEnable(self.canvas, true)
if bPureAvg then
self:OpenReward()
end
end
cs_coroutine.start(wait)
nAnimTime = nAnimTime + 1.5
self:AddTimer(1, nAnimTime, "PlayAnim", true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, nAnimTime)
self._mapNode.txtClickToContinue[1].gameObject:SetActive(false)
self._mapNode.txtClickToContinue[2].gameObject:SetActive(false)
local sType = self.nResultState == 1 and "TrekkerVersus_victory" or "TrekkerVersus_fail"
local sVoiceRes = PlayerData.Voice:PlayCharVoice(sType, 917202, nil, true)
self.bProcessingClose = false
end
function TDBattleResultCtrl:OnDisable()
PlayerData.Voice:StopCharVoice()
end
function TDBattleResultCtrl:SetAffixIcon(trIcon, nAffixId)
local rtIconRoot = trIcon:Find("rtIcon")
local imgIcon = trIcon:Find("rtIcon/imgIcon"):GetComponent("Image")
local TMPLevel = trIcon:Find("rtIcon/imgBgLevel/TMPLevel"):GetComponent("TMP_Text")
if nAffixId == nil then
rtIconRoot.gameObject:SetActive(false)
return
end
local mapAffixCfgData = ConfigTable.GetData("TravelerDuelChallengeAffix", nAffixId)
if mapAffixCfgData == nil then
rtIconRoot.gameObject:SetActive(false)
return
end
NovaAPI.SetTMPText(TMPLevel, mapAffixCfgData.Difficulty)
self:SetPngSprite(imgIcon, mapAffixCfgData.Icon)
end
function TDBattleResultCtrl:PlayAnim()
self.bAnimEnd = true
PlayerData.SideBanner:TryOpenSideBanner()
self._mapNode.txtClickToContinue[1].gameObject:SetActive(true)
self._mapNode.txtClickToContinue[2].gameObject:SetActive(true)
end
function TDBattleResultCtrl:RefreshWorldClass(nExp)
local nWorldClass = PlayerData.Base:GetWorldClass()
local nCurExp = PlayerData.Base:GetWorldExp()
local mapCfg = ConfigTable.GetData("WorldClass", nWorldClass + 1, true)
local nFullExp = 0
if mapCfg then
nFullExp = mapCfg.Exp
end
NovaAPI.SetTMPText(self._mapNode.txtRank, nWorldClass)
NovaAPI.SetTMPText(self._mapNode.txtWorldExp, nCurExp .. "/" .. nFullExp)
local nfillAmount = nCurExp / nFullExp
NovaAPI.SetImageFillAmount(self._mapNode.imgExp, 1 < nfillAmount and 1 or nfillAmount)
self._mapNode.imgExpBg.gameObject:SetActive(0 < nExp)
NovaAPI.SetTMPText(self._mapNode.txtGetWorldExp, "+" .. nExp)
self._mapNode.goRankArrow.gameObject:SetActive(0 < nExp)
self._mapNode.goRankArrow.gameObject:SetActive(false)
end
function TDBattleResultCtrl:ClosePanel()
if self.bProcessingClose then
return
end
self.bProcessingClose = true
if self.nResultState ~= 1 then
CS.AdventureModuleHelper.ResumeLogic()
end
NovaAPI.SetCanvasGroupAlpha(self._mapNode.Mask, 0)
self._mapNode.Mask.gameObject:SetActive(true)
local sequence = DOTween.Sequence()
sequence:Append(self._mapNode.Mask:DOFade(1, 0.5):SetUpdate(true))
sequence:AppendCallback(function()
if self.bSuccess then
NovaAPI.EnterModule("MainMenuModuleScene", true, 17)
self._mapNode.imgBlurredBg:SetActive(false)
else
local function levelEndCallback()
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
NovaAPI.EnterModule("MainMenuModuleScene", true, 17)
self._mapNode.imgBlurredBg:SetActive(false)
end
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
CS.AdventureModuleHelper.LevelStateChanged(true, 0, true)
end
end)
sequence:SetUpdate(true)
end
function TDBattleResultCtrl:RefreshGacha()
local sIconPath = "UI/big_sprites/"
local gachaCfg = starGachaCfg[self.nLevelStar]
if nil ~= gachaCfg then
self:SetPngSprite(self._mapNode.imgFull, sIconPath .. string.format(gachaCfg.iconPath, "a"))
self:SetPngSprite(self._mapNode.imgSplitB, sIconPath .. string.format(gachaCfg.iconPath, "b"))
self:SetPngSprite(self._mapNode.imgSplitC, sIconPath .. string.format(gachaCfg.iconPath, "c"))
self:SetPngSprite(self._mapNode.imgSplitD, sIconPath .. string.format(gachaCfg.iconPath, "d"))
self._mapNode.animGacha:Play(gachaCfg.animName)
end
end
function TDBattleResultCtrl:OnBtnClick_Close(btn)
if not self.bAnimEnd then
return
end
self:ClosePanel()
end
function TDBattleResultCtrl:OpenReward()
if #self.mapReward > 0 then
local nAnimTime = 2
self._mapNode.goGacha.gameObject:SetActive(true)
WwiseManger:PlaySound("ui_roguelike_gacha_specialOpen")
self:RefreshGacha()
EventManager.Hit(EventId.TemporaryBlockInput, nAnimTime)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForSeconds(nAnimTime))
local callback = function()
self:ClosePanel()
end
UTILS.OpenReceiveByDisplayItem(self.mapReward, self.mapChangeInfo, callback)
end
cs_coroutine.start(wait)
else
self:ClosePanel()
end
end
function TDBattleResultCtrl:OnBtnClick_ShowDamageResult()
EventManager.Hit(EventId.OpenPanel, PanelId.BattleDamage, self.tbCharDamage)
end
return TDBattleResultCtrl