RUMetaState.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /// 分层状态类
  2. #ifndef RUMetaState_h
  3. #define RUMetaState_h
  4. #include "RUState.h"
  5. NS_RU_BEGIN
  6. class StateMachine;
  7. class MetaState : public State
  8. {
  9. public:
  10. MetaState() = default;
  11. ~MetaState() = default;
  12. static MetaState* create(const std::string& stateName,
  13. const std::vector<std::string>& fullStatePath,
  14. kStateType stateType,
  15. const std::vector<StateActInfo>& entryActInfos,
  16. const std::vector<StateActInfo>& idleActInfos,
  17. const std::vector<StateActInfo>& exitActInfos,
  18. const std::string & stateDelegateKey,
  19. void* userObj4StateDelegate,
  20. StateMachine* stateMachine);
  21. /************状态相关************/
  22. /// 重载父类状态的进入方法(需要启动状态机)
  23. virtual void entry(const std::function<void(void)>& entryCb = nullptr) override;
  24. /// 重载父类状态的待机方法(需要启动状态机)
  25. virtual void idle(const std::function<void(void)>& idleCb = nullptr) override;
  26. /// 重载父类状态的退出方法(需要停止状态机)
  27. virtual void exit(const std::function<void(void)>& exitCb = nullptr) override;
  28. /* 重载往下穿透查找历史最后运行或即将运行的原子状态
  29. 对于家装而言只有最原子普通状态会绑定block(执行动作绑定到block上)
  30. */
  31. virtual std::vector<std::string> getBindingStatePath4Blocks() override;
  32. /************状态机相关************/
  33. /// 设置运行状态(分层状态机需要往下传递)
  34. virtual void setRunningStateNames(const std::vector<std::string>& stateNames);
  35. virtual std::vector<std::string> getRunningStateNames();
  36. virtual std::vector<std::string> getHistoryRunningStateNames();
  37. ///初始状态
  38. virtual std::vector<std::string> getInitStateNames();
  39. /// 是否能响应事件
  40. virtual bool canResponseEvent(const std::string& eventName);
  41. /// 响应事件
  42. virtual void handleEvent(const std::string& eventName, const std::map<std::string, std::string>& eventParams, const std::function<void(void)>& handleEventCb = nullptr);
  43. ///获取Idle动作的配置信息
  44. virtual const std::vector<StateActInfo>& getIdleActInfosByStateFullPath(const std::vector<std::string>& stateNames);
  45. ///立即停止状态机
  46. virtual void stopMachineImmediately();
  47. /// debug输出子状态机结构信息
  48. virtual void debugStateMachineInfo();
  49. /// 设置某个参数
  50. /// @param name 参数名
  51. /// @param v 参数值
  52. virtual void setParam(const std::string& name, const std::string& v);
  53. virtual void setIndent4Dbg(const std::string& indent) override;
  54. ///调试用:运行状态机
  55. virtual void runMachine4Dbg();
  56. ///调试用:根据事件直接设置物件状态,不做动画
  57. virtual void handleEvent4Dbg(const std::string& eventName);
  58. /**
  59. * 功能:检查指定的状态在状体机里是否存在
  60. * 参数 stateNames:状态队列
  61. * 返回值:状态队列的每一个状态是否能在对应的状态机响应
  62. */
  63. bool chekcStateNamesValidity(std::vector<std::string> stateNames);
  64. private:
  65. StateMachine* _stateMachine = nullptr;
  66. };
  67. NS_RU_END
  68. #endif /* RUMetaState_h */