/// 状态代理类 #ifndef RUStateDelegate_h #define RUStateDelegate_h #include "RUDefine.h" NS_RU_BEGIN //状态机动作信息 typedef struct _StateActInfo { std::string actType = ""; std::map actParams; } StateActInfo; class State; class StateDelegate { public: StateDelegate() = default; ~StateDelegate() = default; virtual void setUserObject(void *userObject); virtual void* getUserObject(); virtual void entry(State* state, const std::vector& stateActInfo, std::function actFinishCb = nullptr); virtual void idle(State* state, const std::vector& stateActInfo, std::function actFinishCb = nullptr); virtual void exit(State* state, const std::vector& stateActInfo, std::function actFinishCb = nullptr); virtual void beforeSwitch(State* state, const std::vector& stateActInfo, StateActInfo evt, std::function actFinishCb = nullptr); virtual void afterSwitch(State* state, const std::vector& stateActInfo, StateActInfo evt, std::function actFinishCb = nullptr); protected: /// 执行单个状态动作 /// @param state 状态 /// @param stateActInfo 待执行的动作 virtual void execStateAct(State* state, const StateActInfo* stateActInfo, const std::map& eventParams, const std::function& actFinishCb = nullptr); private: /// 执行一系列的状态动作 /// @param state 状态 /// @param stateActsInfo 待执行的动作列表 void execStateActList(State* state, const std::vector& stateActsInfo, const std::function& actFinishCb = nullptr); void execStateActList(State* state, const std::vector& stateActsInfo, const std::map& eventParams, const std::function& actFinishCb = nullptr); void execStateActListRecursively(State* state, const std::vector& stateActsInfo, const std::function& actFinishCb = nullptr); void execStateActListRecursively(State* state, const std::vector& stateActsInfo, const std::map& eventParams, const std::function& actFinishCb = nullptr); private: void *_userObject = nullptr; }; NS_RU_END #endif /* RUStateDelegate_h */