using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Stary.Evo.FiniteStateMachine { public interface IState { public FSMController Machine { get; set; } public void OnEnter(); public void OnExit(); public void Update(); public void FixedUpdate(); public void OnInit(); public void OnDestory(); } public abstract class AbstractState : IState { public FSMController Machine { get; set; } public abstract void OnEnter(); public abstract void OnExit(); public abstract void Update(); public abstract void FixedUpdate(); public abstract void OnInit(); public abstract void OnDestory(); } /// /// 状态中具体行为: /// (OnInitAction:初始化) /// (OnEnterAction:进入) /// (UpdateAction:循环) /// (FixedUpdateAction:后循环) /// (OnExitAction:离开) /// (OnDestoryAction:销毁) /// public struct StateDateAction { public System.Action OnEnterAction; public System.Action OnExitAction; public System.Action UpdateAction; public System.Action FixedUpdateAction; public System.Action OnInitAction; public System.Action OnDestoryAction; } /// /// 单个状态 /// public class SingleState : AbstractState { public StateDateAction stateDate; public bool IsRunning; public override void FixedUpdate() { stateDate.FixedUpdateAction?.Invoke(); } public override void OnDestory() { stateDate.OnDestoryAction?.Invoke(); } public override void OnEnter() { stateDate.OnEnterAction?.Invoke(); } public override void OnExit() { stateDate.OnExitAction?.Invoke(); } public override void OnInit() { stateDate.OnInitAction?.Invoke(); } public override void Update() { stateDate.UpdateAction?.Invoke(); } } }