AlicizaX/Client/Assets/Scripts/Startup/Procedure/Procedure.cs
2025-10-14 15:42:34 +08:00

49 lines
1.6 KiB
C#

using System;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Unity.Startup.Procedure
{
public enum UpdateProcedureState : byte
{
ProcedureEntryState,
ProcedureGetAppVersionInfoState,
ProcedureInitPackageState,
ProcedureDownloadBundleState,
ProcedurePatchDoneState,
ProcedureLoadAssembly,
ProcedureUpdateFinishState
}
public class Procedure : MonoBehaviour
{
private SimpleFSM<UpdateProcedureState> _fsm;
private async UniTaskVoid Start()
{
await UniTask.WaitUntil(() => YooAsset.YooAssets.Initialized);
_fsm = new SimpleFSM<UpdateProcedureState>();
_fsm.Register<ProcedureEntryState>(UpdateProcedureState.ProcedureEntryState);
_fsm.Register<ProcedureGetAppVersionInfoState>(UpdateProcedureState.ProcedureGetAppVersionInfoState);
_fsm.Register<ProcedureInitPackageState>(UpdateProcedureState.ProcedureInitPackageState);
_fsm.Register<ProcedureDownloadBundleState>(UpdateProcedureState.ProcedureDownloadBundleState);
_fsm.Register<ProcedurePatchDoneState>(UpdateProcedureState.ProcedurePatchDoneState);
_fsm.Register<ProcedureLoadAssembly>(UpdateProcedureState.ProcedureLoadAssembly);
_fsm.Register<ProcedureUpdateFinishState>(UpdateProcedureState.ProcedureUpdateFinishState);
_fsm.SwitchState(UpdateProcedureState.ProcedureEntryState);
}
private void Update()
{
_fsm.Update(Time.deltaTime);
}
private void OnDestroy()
{
_fsm.Dispose();
_fsm = null;
}
}
}