using GameFramework.Event; using GameFramework.Fsm; using GameFramework.Procedure; using GeometryTD.CustomEvent; using GeometryTD.Definition; using GeometryTD.UI; using UnityGameFramework.Runtime; namespace GeometryTD.Procedure { public class ProcedureMenu : ProcedureBase { public override bool UseNativeDialog => false; public bool GameStart { get; set; } private RepoFormUseCase _repoFormUseCase; #region FSM protected override void OnInit(IFsm procedureOwner) { base.OnInit(procedureOwner); } protected override void OnEnter(IFsm procedureOwner) { base.OnEnter(procedureOwner); GameEntry.Event.Subscribe(NodeCompleteEventArgs.EventId, OnNodeComplete); GameEntry.Event.Subscribe(NodeEnterEventArgs.EventId, OnNodeEnter); GameStart = false; GameEntry.EventNode.OnInit(); GameEntry.CombatNode.OnInit(LevelThemeType.Plain); GameEntry.ShopNode.OnInit(); _repoFormUseCase = new RepoFormUseCase(); GameEntry.UIRouter.BindUIUseCase(UIFormType.RepoForm, _repoFormUseCase); GameEntry.UIRouter.OpenUI(UIFormType.MainForm); GameEntry.UIRouter.OpenUI(UIFormType.TestMenuForm); } protected override void OnUpdate(IFsm procedureOwner, float elapseSeconds, float realElapseSeconds) { base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds); if (GameStart) { procedureOwner.SetData("NextSceneId", (int)SceneType.Main); ChangeState(procedureOwner); return; } GameEntry.CombatNode.OnUpdate(elapseSeconds, realElapseSeconds); } protected override void OnLeave(IFsm procedureOwner, bool isShutdown) { GameEntry.CombatNode.OnShutdown(); GameEntry.Event.Unsubscribe(NodeEnterEventArgs.EventId, OnNodeEnter); GameEntry.Event.Unsubscribe(NodeCompleteEventArgs.EventId, OnNodeComplete); _repoFormUseCase = null; base.OnLeave(procedureOwner, isShutdown); } #endregion private void OnNodeEnter(object sender, GameEventArgs e) { if (!(e is NodeEnterEventArgs)) return; GameEntry.UIRouter.CloseUI(UIFormType.TestMenuForm); GameEntry.UIRouter.CloseUI(UIFormType.MainForm); } private void OnNodeComplete(object sender, GameEventArgs e) { if (!(e is NodeCompleteEventArgs)) return; GameEntry.UIRouter.OpenUI(UIFormType.TestMenuForm); GameEntry.UIRouter.OpenUI(UIFormType.MainForm); } } }