using System; using Cysharp.Threading.Tasks; using UnityEngine; namespace Stary.Evo { public interface FSMIStateAsync { IFsmSystemAsync FsmSystem { get; } string Name { get; } //进入该状态时调用 UniTask OnEnterAsync(); UniTask OnEnterAsync(object param); UniTask OnEnterAsync(T param); UniTask OnEnterAsync(T1 param1, T2 param2); //每帧调用 void OnUpdate(); //退出该状态时调用 UniTask OnExitAsync(); } public abstract class AbstractFSMIStateAsync : FSMIStateAsync { public IFsmSystemAsync FsmSystem { get; } public string Name { get; } public AbstractFSMIStateAsync(IFsmSystemAsync system) { FsmSystem = system; Name = GetType().Name; } public virtual UniTask OnEnterAsync(object param) { return UniTask.CompletedTask; } public virtual UniTask OnEnterAsync(T param) { return UniTask.CompletedTask; } public virtual UniTask OnEnterAsync(T1 param1, T2 param2) { return UniTask.CompletedTask; } public abstract UniTask OnEnterAsync(); public virtual void OnUpdate() { // Timer += Time.deltaTime; } public abstract UniTask OnExitAsync(); } }