RUStateDelegate.cpp 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "RUStateDelegate.h"
  2. NS_RU_BEGIN
  3. void StateDelegate::setUserObject(void *userObject)
  4. {
  5. _userObject = userObject;
  6. }
  7. void* StateDelegate::getUserObject()
  8. {
  9. return _userObject;
  10. }
  11. void StateDelegate::execStateAct(State* state,
  12. const StateActInfo* stateActInfo,
  13. const std::map<string, string>& eventParams,
  14. const std::function<void(void)>& actFinishCb)
  15. {
  16. if (actFinishCb) {
  17. actFinishCb();
  18. }
  19. }
  20. void StateDelegate::execStateActList(State* state,
  21. const std::vector<StateActInfo>& stateActsInfo,
  22. const std::function<void(void)>& actFinishCb)
  23. {
  24. execStateActList(state, stateActsInfo, {}, actFinishCb);
  25. }
  26. void StateDelegate::execStateActList(State* state,
  27. const std::vector<StateActInfo>& stateActsInfo,
  28. const std::map<string, string>& eventParams,
  29. const std::function<void(void)>& actFinishCb)
  30. {
  31. if(stateActsInfo.size() == 0) {
  32. execStateAct(state, nullptr, eventParams, actFinishCb);
  33. } else {
  34. execStateActListRecursively(state, stateActsInfo, eventParams, actFinishCb);
  35. }
  36. }
  37. void StateDelegate::execStateActListRecursively(State* state,
  38. const std::vector<StateActInfo>& stateActsInfo,
  39. const std::function<void(void)>& actFinishCb)
  40. {
  41. execStateActListRecursively(state, stateActsInfo, {}, actFinishCb);
  42. }
  43. void StateDelegate::execStateActListRecursively(State* state,
  44. const std::vector<StateActInfo>& stateActsInfo,
  45. const std::map<string, string>& eventParams,
  46. const std::function<void(void)>& actFinishCb)
  47. {
  48. if(stateActsInfo.size() == 0){
  49. if (actFinishCb) {
  50. actFinishCb();
  51. }
  52. return;
  53. }
  54. auto execNextActs = [=](void){
  55. auto newActs = stateActsInfo;
  56. newActs.erase(newActs.begin());
  57. execStateActListRecursively(state, newActs, eventParams, actFinishCb);
  58. };
  59. execStateAct(state, &stateActsInfo.at(0), eventParams, execNextActs);
  60. }
  61. void StateDelegate::entry(State* state, const std::vector<StateActInfo>& stateActInfo, std::function<void(void)> actFinishCb) {
  62. execStateActList(state, stateActInfo, actFinishCb);
  63. }
  64. void StateDelegate::idle(State* state, const std::vector<StateActInfo>& stateActInfo, std::function<void(void)> actFinishCb) {
  65. execStateActList(state, stateActInfo, actFinishCb);
  66. }
  67. void StateDelegate::exit(State* state, const std::vector<StateActInfo>& stateActInfo, std::function<void(void)> actFinishCb) {
  68. execStateActList(state, stateActInfo, actFinishCb);
  69. }
  70. void StateDelegate::beforeSwitch(State* state, const std::vector<StateActInfo>& stateActInfo, StateActInfo evt, std::function<void(void)> actFinishCb) {
  71. execStateActList(state, stateActInfo, evt.actParams, actFinishCb);
  72. }
  73. void StateDelegate::afterSwitch(State* state, const std::vector<StateActInfo>& stateActInfo, StateActInfo evt, std::function<void(void)> actFinishCb) {
  74. execStateActList(state, stateActInfo, evt.actParams, actFinishCb);
  75. }
  76. NS_RU_END