123 lines
4.0 KiB
Lua
123 lines
4.0 KiB
Lua
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.SettlementDefenseTransit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SettlementDefenseTransitCtrl = HL.Class('SettlementDefenseTransitCtrl', uiCtrl.UICtrl)
|
|
|
|
local DEFENSE_MAIN_CHAR_EFFECT_NAME = "P_fxfac_interactive_holocast_2101"
|
|
|
|
|
|
SettlementDefenseTransitCtrl.m_time = HL.Field(HL.Number) << 0
|
|
|
|
|
|
SettlementDefenseTransitCtrl.m_timeUpdateTick = HL.Field(HL.Number) << -1
|
|
|
|
|
|
SettlementDefenseTransitCtrl.m_playFinished = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
SettlementDefenseTransitCtrl.m_defendingReady = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
SettlementDefenseTransitCtrl.m_isNormal = HL.Field(HL.Boolean) << true
|
|
|
|
|
|
SettlementDefenseTransitCtrl.m_progressText = HL.Field(HL.Userdata)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SettlementDefenseTransitCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
[MessageConst.ON_TOWER_DEFENSE_DEFENDING_READY] = '_OnTowerDefenseDefendingReady',
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SettlementDefenseTransitCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self.m_time = 0
|
|
self.m_timeUpdateTick = LuaUpdate:Add("Tick", function(deltaTime)
|
|
self.m_time = self.m_time + deltaTime
|
|
local progress = math.min(self.m_time / self.view.config.MIN_PLAY_DURATION, 1)
|
|
self.m_progressText.text = string.format("%02d%%", math.floor(progress * 100))
|
|
if self.m_time >= self.view.config.MIN_PLAY_DURATION then
|
|
self.m_playFinished = true
|
|
|
|
self.m_defendingReady = GameInstance.player.towerDefenseSystem.towerDefenseGame.defendingReady
|
|
self.m_timeUpdateTick = LuaUpdate:Remove(self.m_timeUpdateTick)
|
|
self:_TryPopPhase()
|
|
end
|
|
end)
|
|
local _, cfg = Tables.towerDefenseTable:TryGetValue(GameInstance.player.towerDefenseSystem.activeTdId)
|
|
if cfg then
|
|
self.m_isNormal = cfg.tdType == GEnums.TowerDefenseLevelType.Normal
|
|
self.view.stateController:SetState(self.m_isNormal and "normal" or "auto")
|
|
end
|
|
self.animationWrapper:Play(self.m_isNormal and "defensetransit_in_manualdefense" or "defensetransit_in_defense")
|
|
AudioAdapter.PostEvent("Au_UI_Menu_SettlementDefenseTransitPanel_Open")
|
|
self.m_progressText = self.m_isNormal and self.view.manualDefenseNode.numTxt or self.view.defenseNode.numTxt
|
|
AudioManager.PostAudioCue("au_cue_music_base_mode_defense_loading")
|
|
end
|
|
|
|
|
|
SettlementDefenseTransitCtrl.OnEnterTowerDefenseDefendingPhase = HL.StaticMethod() << function()
|
|
PhaseManager:OpenPhaseFast(PhaseId.SettlementDefenseTransit)
|
|
end
|
|
|
|
|
|
|
|
SettlementDefenseTransitCtrl._OnTowerDefenseDefendingReady = HL.Method() << function(self)
|
|
self.m_defendingReady = true
|
|
self:_TryPopPhase()
|
|
end
|
|
|
|
|
|
|
|
SettlementDefenseTransitCtrl._TryPopPhase = HL.Method() << function(self)
|
|
if not self.m_playFinished then
|
|
return
|
|
end
|
|
|
|
if not self.m_defendingReady then
|
|
return
|
|
end
|
|
|
|
local isOpen, phaseLevel = PhaseManager:IsOpen(PhaseId.Level)
|
|
local _, towerDefenseData = Tables.towerDefenseTable:TryGetValue(GameInstance.player.towerDefenseSystem.activeTdId)
|
|
if isOpen and towerDefenseData and towerDefenseData.tdType == GEnums.TowerDefenseLevelType.Auto then
|
|
local mainModel
|
|
if GameInstance.playerController.mainCharacter ~= nil and GameInstance.playerController.mainCharacter.modelCom ~= nil then
|
|
mainModel = GameInstance.playerController.mainCharacter.modelCom.model
|
|
end
|
|
local entityRenderHelper = mainModel and mainModel:GetComponent(typeof(CS.Beyond.Gameplay.View.EntityRenderHelper))
|
|
if entityRenderHelper then
|
|
phaseLevel.m_defenseMainCharEffect = GameInstance.effectManager:CreateVFXEffectOnTransform(
|
|
DEFENSE_MAIN_CHAR_EFFECT_NAME, entityRenderHelper)
|
|
phaseLevel.m_defenseMainCharEffect:LoadImmediately()
|
|
end
|
|
end
|
|
|
|
self:PlayAnimation(self.m_isNormal and "defensetransit_out_manualdefense" or "defensetransit_out_defense", function()
|
|
PhaseManager:PopPhase(PhaseId.SettlementDefenseTransit, function()
|
|
Notify(MessageConst.ON_TOWER_DEFENSE_TRANSIT_FINISHED)
|
|
end)
|
|
end)
|
|
end
|
|
|
|
|
|
HL.Commit(SettlementDefenseTransitCtrl)
|