Files
plugin-library/Assets/03.FiniteStateMachine/RunTime/Abstract/IState.cs

88 lines
2.2 KiB
C#
Raw Normal View History

2025-03-31 11:23:20 +08:00
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();
}
}
}