using UnityEngine;
using System.Collections.Generic;
using System;
namespace FsmLite
{
public class FsmLite<T> where T : struct
{
/// <summary>
/// 一个状态里的所有回调
/// </summary>
public class StateFunc
{
public Action enterFunc;
public Action exitFunc;
}
/// <summary>
/// 默认状态
/// </summary>
protected T m_DefaultState;
/// <summary>
/// 前一个状态
/// </summary>
protected T m_PrevState;
/// <summary>
/// 当前状态
/// </summary>
protected T m_CurState;
/// <summary>
/// 获取到当前状态
/// </summary>
public T GetCurState { get { return m_CurState; } }
/// <summary>
/// 状态集合
/// </summary>
protected Dictionary<T, StateFunc> m_StateFunc = new Dictionary<T, StateFunc>();
/// <summary>
/// 初始化状态机
/// </summary>
/// <param name="defaultState"></param>
public FsmLite(T defaultState)
{
m_DefaultState = defaultState;
}
/// <summary>
/// 状态机初始化完毕,开始从默然状态开始运行
/// </summary>
public void Start()
{
SetState(m_DefaultState);
}
/// <summary>
/// 注册状态
/// </summary>
/// <param name="state"></param>
/// <param name="enter"></param>
/// <param name="update"></param>
/// <param name="exit"></param>
public void RegistState(T state, Action enter, Action exit)
{
if (m_StateFunc.ContainsKey(state)) return;
StateFunc func = new StateFunc
{
enterFunc = enter,
exitFunc = exit
};
this.m_StateFunc.Add(state, func);
}
/// <summary>
/// 设置为一个状态
/// </summary>
/// <param name="state"></param>
public void SetState(T state)
{
if (m_CurState.Equals(state)) return;
T curState = this.m_CurState;
this.m_PrevState = curState;
this.m_CurState = state;
if (this.m_StateFunc.ContainsKey(curState) && (this.m_StateFunc[curState].exitFunc) != null)
{
this.m_StateFunc[curState].exitFunc();
}
if (this.m_StateFunc.ContainsKey(this.m_CurState) && (this.m_StateFunc[this.m_CurState].enterFunc) != null)
{
this.m_StateFunc[this.m_CurState].enterFunc();
}
}
/// <summary>
/// 是否包含该状态
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public bool HasState(T state)
{
return m_StateFunc.ContainsKey(state);
}
}
}
【Unity】简易状态机
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 转载请注明地址:凉鞋的笔记 为什么用有限状态机? 之前做过一款跑酷游戏,跑酷角色有很多状态:跑、跳、二段跳、死亡等...
- http://www.manew.com/thread-89637-1-1.html**为什么用有限状态机?** ...
- 为什么用有限状态机? 之前做过一款跑酷游戏,跑酷角色有很多状态:跑、跳、二段跳、死亡等等。一开始是使用if/swi...