using Cysharp.Threading.Tasks; using SepCore.Definition; using SepCore.UI; using UnityEngine; using UnityGameFramework.Runtime; using ProcedureOwner = GameFramework.Fsm.IFsm; namespace SepCore.Procedure { public class ProcedureMenu : ProcedureBase { public override bool UseNativeDialog => false; private bool _startGame = false; private int _selectedRoleId = 0; public void StartGame(int selectedRoleId) { _selectedRoleId = selectedRoleId; _startGame = true; } #region FSM protected override async void OnEnter(ProcedureOwner procedureOwner) { base.OnEnter(procedureOwner); await GameEntry.UIRouter.OpenUIAsync(UIFormType.MenuForm); var useCase = new SelectRoleUseCase(StartGame); GameEntry.UIRouter.BindUIUseCase(UIFormType.SelectRoleForm, useCase); QualitySettings.vSyncCount = 0; Application.targetFrameRate = 120; } protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown) { base.OnLeave(procedureOwner, isShutdown); GameEntry.UIRouter.CloseUIAsync(UIFormType.MenuForm).Forget(); GameEntry.UIRouter.CloseUIAsync(UIFormType.SelectRoleForm).Forget(); } protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds) { base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds); if (_startGame) { procedureOwner.SetData("NextSceneId", (int)SceneId.Game); procedureOwner.SetData("SelectedRoleId", _selectedRoleId); ChangeState(procedureOwner); } } #endregion } }