123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /// 分层状态类
- #ifndef RUMetaState_h
- #define RUMetaState_h
- #include "RUState.h"
- NS_RU_BEGIN
- class StateMachine;
- class MetaState : public State
- {
- public:
- MetaState() = default;
- ~MetaState() = default;
-
- static MetaState* create(const std::string& stateName,
- const std::vector<std::string>& fullStatePath,
- kStateType stateType,
- const std::vector<StateActInfo>& entryActInfos,
- const std::vector<StateActInfo>& idleActInfos,
- const std::vector<StateActInfo>& exitActInfos,
- const std::string & stateDelegateKey,
- void* userObj4StateDelegate,
- StateMachine* stateMachine);
-
- /************状态相关************/
- /// 重载父类状态的进入方法(需要启动状态机)
- virtual void entry(const std::function<void(void)>& entryCb = nullptr) override;
- /// 重载父类状态的待机方法(需要启动状态机)
- virtual void idle(const std::function<void(void)>& idleCb = nullptr) override;
- /// 重载父类状态的退出方法(需要停止状态机)
- virtual void exit(const std::function<void(void)>& exitCb = nullptr) override;
-
- /* 重载往下穿透查找历史最后运行或即将运行的原子状态
- 对于家装而言只有最原子普通状态会绑定block(执行动作绑定到block上)
- */
- virtual std::vector<std::string> getBindingStatePath4Blocks() override;
-
- /************状态机相关************/
- /// 设置运行状态(分层状态机需要往下传递)
- virtual void setRunningStateNames(const std::vector<std::string>& stateNames);
- virtual std::vector<std::string> getRunningStateNames();
- virtual std::vector<std::string> getHistoryRunningStateNames();
- ///初始状态
- virtual std::vector<std::string> getInitStateNames();
- /// 是否能响应事件
- virtual bool canResponseEvent(const std::string& eventName);
- /// 响应事件
- virtual void handleEvent(const std::string& eventName, const std::map<std::string, std::string>& eventParams, const std::function<void(void)>& handleEventCb = nullptr);
- ///获取Idle动作的配置信息
- virtual const std::vector<StateActInfo>& getIdleActInfosByStateFullPath(const std::vector<std::string>& stateNames);
- ///立即停止状态机
- virtual void stopMachineImmediately();
-
- /// debug输出子状态机结构信息
- virtual void debugStateMachineInfo();
-
- /// 设置某个参数
- /// @param name 参数名
- /// @param v 参数值
- virtual void setParam(const std::string& name, const std::string& v);
-
- virtual void setIndent4Dbg(const std::string& indent) override;
- ///调试用:运行状态机
- virtual void runMachine4Dbg();
- ///调试用:根据事件直接设置物件状态,不做动画
- virtual void handleEvent4Dbg(const std::string& eventName);
-
- /**
- * 功能:检查指定的状态在状体机里是否存在
- * 参数 stateNames:状态队列
- * 返回值:状态队列的每一个状态是否能在对应的状态机响应
- */
- bool chekcStateNamesValidity(std::vector<std::string> stateNames);
-
- private:
- StateMachine* _stateMachine = nullptr;
- };
- NS_RU_END
- #endif /* RUMetaState_h */
|