Files
StellaSora_DataLua/lua/game/ui/trialbattle/trialresultctrl.lua
T
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

298 lines
9.3 KiB
Lua

local TrialResultCtrl = class("TrialResultCtrl", BaseCtrl)
local WwiseManger = CS.WwiseAudioManager.Instance
TrialResultCtrl._mapNodeConfig = {
imgBlurredBg = {},
goComplete = {sComponentName = "GameObject"},
animComplete = {sNodeName = "goComplete", sComponentName = "Animator"},
goFailed = {sComponentName = "GameObject"},
Mask = {
sComponentName = "CanvasGroup"
},
txtMainlineName = {nCount = 2, sComponentName = "TMP_Text"},
ButtonClose = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Retry"
},
goRoot = {
sNodeName = "----SafeAreaRoot----"
},
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 = {},
goStarList = {},
getStar = {nCount = 3, sComponentName = "Transform"},
txtTip = {
sComponentName = "TMP_Text",
sLanguageId = "Trial_Result_Fail_Tip"
},
txtTipShadow = {
sComponentName = "TMP_Text",
sLanguageId = "Trial_Result_Fail_Tip"
},
txtExp = {
sComponentName = "TMP_Text",
sLanguageId = "WorldClass_ExpTips"
},
txtMaxLevel = {
sComponentName = "TMP_Text",
sLanguageId = "Battle_Result_Max_Level"
},
goGacha = {},
animGacha = {
sNodeName = "goGachaItem",
sComponentName = "Animator"
},
imgFull = {sComponentName = "Image"},
imgSplitB = {sComponentName = "Image"},
imgSplitC = {sComponentName = "Image"},
imgSplitD = {sComponentName = "Image"},
txtAllTime = {sComponentName = "TMP_Text"},
txtTimeTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Trial_TimeCount_All"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
txtBtnClose = {
sComponentName = "TMP_Text",
sLanguageId = "Trial_Btn_Complete"
},
btnRetry = {
sComponentName = "UIButton",
callback = "OnBtnClick_Retry"
},
txtBtnRetry = {
sComponentName = "TMP_Text",
sLanguageId = "Trial_Btn_Restart"
},
btnNext = {
sComponentName = "UIButton",
callback = "OnBtnClick_Next"
},
txtBtnNext = {
sComponentName = "TMP_Text",
sLanguageId = "Trial_Btn_NextTrial"
},
imgHead = {sComponentName = "Image"},
btnDamageResult = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_ShowDamageResult"
},
txtClickToContinue = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Tips_Continue"
},
buttonList = {}
}
TrialResultCtrl._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"
}
}
function TrialResultCtrl:Awake()
self.canvas = self.gameObject:GetComponent("Canvas")
EventManager.Hit(EventId.AvgBubbleShutDown)
NovaAPI.SetComponentEnable(self.canvas, false)
self._mapNode.goGacha.gameObject:SetActive(false)
self._mapNode.buttonList:SetActive(false)
end
function TrialResultCtrl:OnEnable()
local tbParam = self:GetPanelParam()
self.bSuccess = tbParam[1] == true
local nLevelTime = tbParam[2]
local tbChar = tbParam[3]
self.nActId = tbParam[4]
self.mapChangeInfo = tbParam[5]
self.tbCharDamage = tbParam[6]
for i = 1, 2 do
self._mapNode.btnDamageResult[i].gameObject:SetActive(self.tbCharDamage ~= nil and #self.tbCharDamage > 0)
end
nLevelTime = math.floor(nLevelTime)
NovaAPI.SetTMPText(self._mapNode.txtAllTime, orderedFormat(ConfigTable.GetUIText("StarTower_Result_Time") or "", nLevelTime))
self.nNextGroup = PlayerData.Trial:GetNextUnreceiveGroup()
self._mapNode.btnNext.gameObject:SetActive(self.nNextGroup)
if self.nNextGroup then
local mapGroup = ConfigTable.GetData("TrialGroup", self.nNextGroup)
if mapGroup then
local mapTrial = ConfigTable.GetData("TrialCharacter", mapGroup.TrialChar)
if mapTrial then
local nCharSkinId = ConfigTable.GetData_Character(mapTrial.CharId).AdvanceSkinId
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nCharSkinId)
if mapCharSkin then
self:SetPngSprite(self._mapNode.imgHead, mapCharSkin.Icon, AllEnum.CharHeadIconSurfix.S)
end
end
end
end
local sTitle = PlayerData.Trial:GetLevelTitle()
for _, v in ipairs(self._mapNode.txtMainlineName) do
NovaAPI.SetTMPText(v, sTitle)
end
local tbTeamMemberId = tbChar
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
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.bSuccess then
self._mapNode.goRoot.gameObject:SetActive(true)
self._mapNode.goFailed:SetActive(false)
self._mapNode.imgBlurredBg.gameObject:SetActive(false)
self._mapNode.goComplete:SetActive(true)
WwiseManger:PlaySound("ui_roguelike_victory")
WwiseManger:SetState("system", "victory")
nAnimTime = NovaAPI.GetAnimClipLength(self._mapNode.animComplete, {
"BattleResultPanel_victory_out"
})
self._mapNode.animComplete:Play("TrialResultPanel_victory_out")
self:AddTimer(1, 3, function()
self._mapNode.buttonList:SetActive(true)
end, true, true, true)
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)
if not self.bSuccess then
self._mapNode.ButtonClose[1].gameObject:SetActive(true)
self._mapNode.ButtonClose[2].gameObject:SetActive(true)
end
NovaAPI.SetComponentEnable(self.canvas, true)
end
cs_coroutine.start(wait)
self:AddTimer(1, nAnimTime, "PlayAnim", true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 3)
PlayerData.Voice:PlayBattleResultVoice(tbRoleId, self.bSuccess)
self.bProcessingClose = false
end
function TrialResultCtrl:OnDisable()
PlayerData.Trial:SetSettlementState(false)
PlayerData.Voice:StopCharVoice()
end
function TrialResultCtrl:PlayAnim()
PlayerData.SideBanner:TryOpenSideBanner()
local callback = function()
self:OpenReward()
end
self.bOpenUpgrade = PlayerData.Base:TryOpenWorldClassUpgrade(callback)
end
function TrialResultCtrl:ClosePanel()
if self.bProcessingClose then
return
end
self.bProcessingClose = true
CS.AdventureModuleHelper.ResumeLogic()
if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
EventManager.Hit(EventId.CloesCurPanel)
PlayerData.Base:OnBackToMainMenuModule()
else
NovaAPI.SetCanvasGroupAlpha(self._mapNode.Mask, 0)
self._mapNode.Mask.gameObject:SetActive(true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.5)
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
end
function TrialResultCtrl:RefreshGacha()
local sIconPath = "UI/big_sprites/"
local gachaCfg = starGachaCfg[3]
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 TrialResultCtrl:Close()
if self.bOpenUpgrade then
self:ClosePanel()
else
self:OpenReward()
end
end
function TrialResultCtrl:OnBtnClick_Close(btn)
PlayerData.Trial:SetSelectTrialGroup()
EventManager.Hit(EventId.ClosePanel, PanelId.TrialLevelSelect)
self:Close()
end
function TrialResultCtrl:OnBtnClick_Retry(btn)
self:Close()
end
function TrialResultCtrl:OnBtnClick_Next(btn)
PlayerData.Trial:SetSelectTrialGroup(self.nNextGroup)
self:Close()
end
function TrialResultCtrl:OnBtnClick_ShowDamageResult()
EventManager.Hit(EventId.OpenPanel, PanelId.BattleDamage, self.tbCharDamage)
end
function TrialResultCtrl:OpenReward()
if self.mapChangeInfo and next(self.mapChangeInfo) ~= nil then
local callback = function()
self:ClosePanel()
end
UTILS.OpenReceiveByChangeInfo(self.mapChangeInfo, callback)
else
self:ClosePanel()
end
end
return TrialResultCtrl