using Cysharp.Threading.Tasks; using SepCore.Definition; using GameFramework.Fsm; using GameFramework.Procedure; using SepCore.UI; using UnityGameFramework.Runtime; namespace SepCore.Procedure { public class GameStateLevelUp : GameStateBase { public override GameStateType GameStateType => GameStateType.LevelUp; private ProcedureGame _procedureGame; public bool IsCompleted { get; set; } #region FSM public override void OnInit(ProcedureGame master) { Log.Debug("GameStateLevelUp::OnInit"); _procedureGame = master; var useCase = new LevelUpUseCase(_procedureGame.Player, () => IsCompleted = true); GameEntry.UIRouter.BindUIUseCase(UIFormType.LevelUpForm, useCase); } public override void OnEnter(IFsm procedureOwner) { Log.Debug("GameStateLevelUp::OnEnter"); IsCompleted = false; GameEntry.UIRouter.OpenUIAsync(UIFormType.LevelUpForm).Forget(); } public override void OnUpdate(IFsm procedureOwner, float elapseSeconds, float realElapseSeconds) { if (IsCompleted) { _procedureGame.LevelUpToShop(); } } public override void OnLeave(IFsm procedureOwner) { Log.Debug("GameStateLevelUp::OnLeave"); GameEntry.UIRouter.CloseUIAsync(UIFormType.LevelUpForm).Forget(); } public override void OnDestroy(IFsm procedureOwner) { _procedureGame = null; Log.Debug("GameStateLevelUp::OnDestroy"); } #endregion } }