diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs index 7746654..95c4aab 100644 --- a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs @@ -4,27 +4,31 @@ using UnityEngine; namespace Stary.Evo { - public interface FSMIState { + public interface FSMIState + { IFsmSystem FsmSystem { get; } string Name { get; } - + //进入该状态时调用 UniTask OnEnterAsync(); + + UniTask OnEnterAsync(object param); UniTask OnEnterAsync(T param); - - UniTask OnEnterAsync(T1 param1, T2 param2); + + UniTask OnEnterAsync(T1 param1, T2 param2); + //每帧调用 void OnUpdate(); //退出该状态时调用 - + UniTask OnExitAsync(); } - + public abstract class AbstractFSMIState : FSMIState { public IFsmSystem FsmSystem { get; } - public string Name { get; } + public string Name { get; } public AbstractFSMIState(IFsmSystem system) { @@ -32,17 +36,28 @@ namespace Stary.Evo Name = GetType().Name; } - public abstract UniTask OnEnterAsync(T param); + public virtual UniTask OnEnterAsync(object param) + { + return UniTask.CompletedTask; + } - public abstract UniTask OnEnterAsync(T1 param1, T2 param2); + 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(); } -} +} \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs index 3ada609..68c6ada 100644 --- a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs @@ -10,6 +10,8 @@ namespace Stary.Evo void AddState(FSMIState state); void RemoveState(FSMIState state); UniTask SetCurState(string name); + + UniTask SetCurState(string name, object param); UniTask SetCurState(string name, T param); UniTask SetCurState(string name, T1 param1, T2 param2); FSMIState GetStateWithName(string name); @@ -64,7 +66,23 @@ namespace Stary.Evo CurState = state; CurState.OnEnterAsync(); } + /// + /// 异步状态切换,适用于有参 + /// + /// + /// + /// + public async UniTask SetCurState(string name, object param) + { + if (CurState != null) + { + await CurState.OnExitAsync(); + } + FSMIState state = GetStateWithName(name); + CurState = state; + await CurState.OnEnterAsync(param); + } /// /// 异步状态切换,适用于有参 /// @@ -80,7 +98,7 @@ namespace Stary.Evo FSMIState state = GetStateWithName(name); CurState = state; - await CurState.OnEnterAsync(param); + await CurState.OnEnterAsync(param); } /// diff --git a/Assets/00.StaryEvo/package.json b/Assets/00.StaryEvo/package.json index ba30529..7c1887b 100644 --- a/Assets/00.StaryEvo/package.json +++ b/Assets/00.StaryEvo/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.main", - "version": "1.0.16", + "version": "1.0.21", "displayName": "00.StaryEvo", "description": "This is an Framework package", "unity": "2021.3",