88 lines
2.2 KiB
C#
88 lines
2.2 KiB
C#
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();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 状态中具体行为:
|
||
/// (OnInitAction:初始化)
|
||
/// (OnEnterAction:进入)
|
||
/// (UpdateAction:循环)
|
||
/// (FixedUpdateAction:后循环)
|
||
/// (OnExitAction:离开)
|
||
/// (OnDestoryAction:销毁)
|
||
/// </summary>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 单个状态
|
||
/// </summary>
|
||
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();
|
||
}
|
||
}
|
||
}
|