123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /// 状态类
- #ifndef RUState_h
- #define RUState_h
- #include "RUDefine.h"
- #include "RUStateDelegate.h"
- NS_RU_BEGIN
- enum class kStateType{
- NORMAL = 0, //普通状态
- META //分层状态(状态本身就是个状态机)
- };
- class State
- {
- public:
- State() = default;
- ~State() = default;
- static State* 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);
-
- virtual const std::string& getStateName();
-
- /// 获取多层嵌套的完整stateName路径(距顶层状态机的状态嵌套),以数组的形式返回
- virtual const std::vector<std::string>& getFullStatePath();
-
- /// 对于家装而言只有最原子普通状态会绑定block(执行动作绑定到block上)
- virtual std::vector<std::string> getBindingStatePath4Blocks();
-
- virtual kStateType getStateType();
-
- /// 状态进入
- virtual void entry(const std::function<void(void)>& entryCb = nullptr);
- /// 状态待机
- virtual void idle(const std::function<void(void)>& idleCb = nullptr);
- /// 状态退出
- virtual void exit(const std::function<void(void)>& exitCb = nullptr);
-
- virtual void beforeSwitch(std::vector<StateActInfo> actInfos, StateActInfo evt, std::function<void(void)> actsFinishCb = nullptr);
- virtual void afterSwitch(std::vector<StateActInfo> actInfos, StateActInfo evt, std::function<void(void)> actsFinishCb = nullptr);
-
- virtual const std::vector<StateActInfo>& getIdleActInfos();
- /// debug输出结构信息
- virtual void debugInfo();
-
- /// 设置缩进
- /// @param indent 缩进
- virtual void setIndent4Dbg(const std::string& indent);
-
- protected:
- void _initData(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);
- void _initStateDelegate(const std::string& stateDelegateKey, void* userObj4StateDelegate);
-
- /// debug日志专用
- std::string _getFullStatePathStr4Debug();
- protected:
- std::string _stateName;
- std::vector<std::string> _fullStatePath; //(多层嵌套的完整stateName链)
- kStateType _stateType = kStateType::NORMAL;
- std::vector<StateActInfo> _entryActInfos;
- std::vector<StateActInfo> _idleActInfos;
- std::vector<StateActInfo> _exitActInfos;
- std::string _stateDelegateKey;
- StateDelegate* _stateDelegate = nullptr;
- std::map<std::string, std::string> _eventParams;
- std::string _indent;
- };
- NS_RU_END
- #endif /* RUState_h */
|