88 lines
2.8 KiB
C#
88 lines
2.8 KiB
C#
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<IProcedureManager> procedureOwner)
|
|
{
|
|
base.OnInit(procedureOwner);
|
|
}
|
|
|
|
protected override void OnEnter(IFsm<IProcedureManager> 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<IProcedureManager> procedureOwner, float elapseSeconds,
|
|
float realElapseSeconds)
|
|
{
|
|
base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
|
|
|
|
if (GameStart)
|
|
{
|
|
procedureOwner.SetData<VarInt32>("NextSceneId", (int)SceneType.Main);
|
|
ChangeState<ProcedureChangeScene>(procedureOwner);
|
|
return;
|
|
}
|
|
|
|
GameEntry.CombatNode.OnUpdate(elapseSeconds, realElapseSeconds);
|
|
}
|
|
|
|
protected override void OnLeave(IFsm<IProcedureManager> procedureOwner, bool isShutdown)
|
|
{
|
|
GameEntry.CombatNode.OnShutdown();
|
|
GameEntry.Event.Unsubscribe(NodeEnterEventArgs.EventId, OnNodeEnter);
|
|
GameEntry.Event.Unsubscribe(NodeCompleteEventArgs.EventId, OnNodeComplete);
|
|
|
|
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);
|
|
}
|
|
}
|
|
} |