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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|