RUState.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /// 状态类
  2. #ifndef RUState_h
  3. #define RUState_h
  4. #include "RUDefine.h"
  5. #include "RUStateDelegate.h"
  6. NS_RU_BEGIN
  7. enum class kStateType{
  8. NORMAL = 0, //普通状态
  9. META //分层状态(状态本身就是个状态机)
  10. };
  11. class State
  12. {
  13. public:
  14. State() = default;
  15. ~State() = default;
  16. static State* create(const std::string& stateName,
  17. const std::vector<std::string>& fullStatePath,
  18. kStateType stateType,
  19. const std::vector<StateActInfo>& entryActInfos,
  20. const std::vector<StateActInfo>& idleActInfos,
  21. const std::vector<StateActInfo>& exitActInfos,
  22. const std::string & stateDelegateKey,
  23. void* userObj4StateDelegate);
  24. virtual const std::string& getStateName();
  25. /// 获取多层嵌套的完整stateName路径(距顶层状态机的状态嵌套),以数组的形式返回
  26. virtual const std::vector<std::string>& getFullStatePath();
  27. /// 对于家装而言只有最原子普通状态会绑定block(执行动作绑定到block上)
  28. virtual std::vector<std::string> getBindingStatePath4Blocks();
  29. virtual kStateType getStateType();
  30. /// 状态进入
  31. virtual void entry(const std::function<void(void)>& entryCb = nullptr);
  32. /// 状态待机
  33. virtual void idle(const std::function<void(void)>& idleCb = nullptr);
  34. /// 状态退出
  35. virtual void exit(const std::function<void(void)>& exitCb = nullptr);
  36. virtual void beforeSwitch(std::vector<StateActInfo> actInfos, StateActInfo evt, std::function<void(void)> actsFinishCb = nullptr);
  37. virtual void afterSwitch(std::vector<StateActInfo> actInfos, StateActInfo evt, std::function<void(void)> actsFinishCb = nullptr);
  38. virtual const std::vector<StateActInfo>& getIdleActInfos();
  39. /// debug输出结构信息
  40. virtual void debugInfo();
  41. /// 设置缩进
  42. /// @param indent 缩进
  43. virtual void setIndent4Dbg(const std::string& indent);
  44. protected:
  45. void _initData(const std::string& stateName,
  46. const std::vector<std::string>& fullStatePath,
  47. kStateType stateType,
  48. const std::vector<StateActInfo>& entryActInfos,
  49. const std::vector<StateActInfo>& idleActInfos,
  50. const std::vector<StateActInfo>& exitActInfos,
  51. const std::string& stateDelegateKey,
  52. void* userObj4StateDelegate);
  53. void _initStateDelegate(const std::string& stateDelegateKey, void* userObj4StateDelegate);
  54. /// debug日志专用
  55. std::string _getFullStatePathStr4Debug();
  56. protected:
  57. std::string _stateName;
  58. std::vector<std::string> _fullStatePath; //(多层嵌套的完整stateName链)
  59. kStateType _stateType = kStateType::NORMAL;
  60. std::vector<StateActInfo> _entryActInfos;
  61. std::vector<StateActInfo> _idleActInfos;
  62. std::vector<StateActInfo> _exitActInfos;
  63. std::string _stateDelegateKey;
  64. StateDelegate* _stateDelegate = nullptr;
  65. std::map<std::string, std::string> _eventParams;
  66. std::string _indent;
  67. };
  68. NS_RU_END
  69. #endif /* RUState_h */