easyx_framework V1.0.0
基于easyx的c++游戏框架
 
载入中...
搜索中...
未找到
FSM类 参考final

状态机组件. 更多...

#include <FSM.h>

类 FSM 继承关系图:
Component base

Public 成员函数

template<class T >
T * AddStatus (std::string name, std::string parent="root")
 添加节点状态
 
void RemoveStatus (std::string name, bool delchild=1)
 移除节点状态
 
FSMItemsGetNormalStatus ()
 得到当前执行的状态节点.
 
std::string GetLastStatus ()
 得到上一次执行的状态名.
 
std::string getNameStatus (FSMItems *item)
 获取状态节点名字.
 
FSMItemsFindStatusByName (std::string name)
 由名字查找状态节点.
 
virtual void BeginPlay ()
 加载一些参数.
 
std::list< FSMItems * > GetPath (FSMItems *item)
 获取节点路径.
 
void TransitionState (std::string name)
 切换状态.
 
void Init ()
 初始化.
 
void Destruct ()
 销毁状态机.
 
void Awake ()
 唤醒状态树.
 
 FSM ()
 构造函数.
 
 ~FSM ()
 析构函数 销毁所有节点回收资源.
 
- Public 成员函数 继承自 Component
virtual void EndPlay ()
 把一些不能写在析构函数的一些操作写在这里
 
void SetOwner (class Object *owner)
 设置绑定对象.
 
virtual void Activate ()
 激活组件
 
virtual void Deactivate ()
 停用组件
 
ObjectGetOwner () const
 获取绑定对象指针
 
- Public 成员函数 继承自 base
 base ()
 
virtual ~base ()
 
std::string GetName () const
 
void SetName (const std::string &name)
 

Private 成员函数

void RegisterStatus (std::string name, FSMItems *item)
 注册状态在状态机.
 
void process_Update (FSMItems *item)
 递归从上到下执行行为.
 
void process_Enter (FSMItems *item, FSMItems *end=nullptr)
 递归从上到下执行进入事件.
 
void process_Exit (FSMItems *item, FSMItems *end=nullptr)
 递归从下到上执行退出事件.
 
virtual void Update (float deltaTime)
 每一帧执行行为.
 
void Clear (std::string name)
 清空某个节点子状态(也包括当前节点).
 
void UnregisterStatus (std::string name)
 取消注册状态在状态机.
 
void UnregisterStatus (FSMItems *item)
 取消注册状态在状态机.
 
FSMItemslowestCommonAncestor (FSMItems *root, FSMItems *p, FSMItems *q)
 寻找最近公共祖先.
 

Private 属性

std::unordered_map< std::string, FSMItems * > status
 节点映射 [名字,状态节点] 用名称访问节点.
 
FSMItemsroot
 根节点
 
FSMItemsnormalstatus =nullptr
 现在状态节点
 
std::string laststatus = "null"
 前一状态
 
FSM_Info fsm_info
 需要的参数.
 

额外继承的成员函数

- Protected 属性 继承自 Component
class ObjectpOwner = nullptr
 处理控制逻辑 有对象物体的指针才能进行控制
 
bool bIsEnabled = true
 是否激活
 

详细描述

状态机组件.

执行状态的管理

构造及析构函数说明

◆ FSM()

FSM::FSM ( )
inline

构造函数.

主要就是创建根节点

◆ ~FSM()

FSM::~FSM ( )
inline

析构函数 销毁所有节点回收资源.

成员函数说明

◆ AddStatus()

template<class T >
T * FSM::AddStatus ( std::string name,
std::string parent = "root" )
inline

添加节点状态

默认状态并行.

备注
!!!用户添加创建新节点要用这个
参数
[in]name状态节点名字
[in]parent父节点
返回
新节点的指针

◆ Awake()

void FSM::Awake ( )
inline

唤醒状态树.

组件用不到

◆ BeginPlay()

virtual void FSM::BeginPlay ( )
inlinevirtual

加载一些参数.

备注
FSM_Info类添加了哪些也要加上
要动态加载就写在update里面

重载 Component .

◆ Clear()

void FSM::Clear ( std::string name)
private

清空某个节点子状态(也包括当前节点).

参数
[in]name状态节点名

◆ Destruct()

void FSM::Destruct ( )
virtual

销毁状态机.

重载 Component .

◆ FindStatusByName()

FSMItems * FSM::FindStatusByName ( std::string name)
inline

由名字查找状态节点.

参数
[in]name状态名字
返回
状态节点

◆ GetLastStatus()

std::string FSM::GetLastStatus ( )
inline

得到上一次执行的状态名.

返回
状态名

◆ getNameStatus()

std::string FSM::getNameStatus ( FSMItems * item)
inline

获取状态节点名字.

参数
[in]item状态节点
返回
状态名字

◆ GetNormalStatus()

FSMItems * FSM::GetNormalStatus ( )
inline

得到当前执行的状态节点.

返回
状态节点

◆ GetPath()

std::list< FSMItems * > FSM::GetPath ( FSMItems * item)
inline

获取节点路径.

用链表满足先进先出

参数
[in]item状态节点
返回
路径节点链表 存储从自己开始到根节点

◆ Init()

void FSM::Init ( )
inline

初始化.

主要是为了以后作为一个独立的类需要的函数 实现更加复杂的管理

◆ lowestCommonAncestor()

FSMItems * FSM::lowestCommonAncestor ( FSMItems * root,
FSMItems * p,
FSMItems * q )
private

寻找最近公共祖先.

参数
[in]root根状态节点 其中的一个公共祖先
[in]p第一个状态节点
[in]q第二个状态节点
返回
最近公共祖先节点

◆ process_Enter()

void FSM::process_Enter ( FSMItems * item,
FSMItems * end = nullptr )
inlineprivate

递归从上到下执行进入事件.

参数
[in]item执行节点
[in]end从哪个上层节点开始

◆ process_Exit()

void FSM::process_Exit ( FSMItems * item,
FSMItems * end = nullptr )
inlineprivate

递归从下到上执行退出事件.

参数
[in]item执行节点
[in]end执行到哪个上层节点为止

◆ process_Update()

void FSM::process_Update ( FSMItems * item)
inlineprivate

递归从上到下执行行为.

参数
[in]item状态节点

◆ RegisterStatus()

void FSM::RegisterStatus ( std::string name,
FSMItems * item )
inlineprivate

注册状态在状态机.

参数
[in]name状态名
[in]item状态节点

◆ RemoveStatus()

void FSM::RemoveStatus ( std::string name,
bool delchild = 1 )

移除节点状态

默认删除所有子节点状态.

参数
[in]name状态名
[in]delchild是否删除所有子节点

◆ TransitionState()

void FSM::TransitionState ( std::string name)
inline

切换状态.

备注
切换状态调用的函数
参数
name状态名

◆ UnregisterStatus() [1/2]

void FSM::UnregisterStatus ( FSMItems * item)
inlineprivate

取消注册状态在状态机.

参数
[in]name状态节点

◆ UnregisterStatus() [2/2]

void FSM::UnregisterStatus ( std::string name)
inlineprivate

取消注册状态在状态机.

参数
[in]name状态节点名

◆ Update()

virtual void FSM::Update ( float deltaTime)
inlineprivatevirtual

每一帧执行行为.

参数
[in]deltaTime帧间隔时间

重载 Component .

类成员变量说明

◆ fsm_info

FSM_Info FSM::fsm_info
private

需要的参数.

◆ laststatus

std::string FSM::laststatus = "null"
private

前一状态

备注
没有则为null 或者前一个删除了.

◆ normalstatus

FSMItems* FSM::normalstatus =nullptr
private

现在状态节点

◆ root

FSMItems* FSM::root
private

根节点

◆ status

std::unordered_map<std::string, FSMItems*> FSM::status
private

节点映射 [名字,状态节点] 用名称访问节点.