SubTreeWaiter.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //
  2. // SubTreeWaiter.cpp
  3. // redream_runtime_mac
  4. //
  5. // Created by zhu on 2023/5/23.
  6. //
  7. #include "SubTreeWaiter.hpp"
  8. #include "ReboltRedManager.h"
  9. namespace redream {
  10. SubTreeWaiter::SubTreeWaiter(ReboltRedManager* reboltManager, red::RedBehaviacTree* tree, std::map<std::string, bool> &boolMap, std::map<std::string, std::string> &stringMap, std::string treeName, ReboltRedManager* subTreeReboltManager)
  11. : _boolMap(boolMap)
  12. , _stringMap(stringMap)
  13. , _treeName(treeName)
  14. {
  15. _reboltManager = reboltManager;
  16. _fatherTree = tree;
  17. _subTreeReboltManager = subTreeReboltManager;
  18. }
  19. SubTreeWaiter::~SubTreeWaiter(){
  20. }
  21. SubTreeWaiter* SubTreeWaiter::create(ReboltRedManager* reboltManager, red::RedBehaviacTree* tree, std::map<std::string, bool> &boolMap, std::map<std::string, std::string> &stringMap, std::string treeName, ReboltRedManager* subTreeReboltManager){
  22. SubTreeWaiter * ret = new (std::nothrow) SubTreeWaiter(reboltManager, tree, boolMap, stringMap, treeName, subTreeReboltManager);
  23. if (ret && ret->init())
  24. {
  25. ret->autorelease();
  26. }
  27. else
  28. {
  29. CC_SAFE_DELETE(ret);
  30. }
  31. return ret;
  32. }
  33. bool SubTreeWaiter::init(){
  34. return true;
  35. }
  36. void SubTreeWaiter::run(){
  37. _runningState.btState = RUNNING;
  38. createTreeAndRun();
  39. }
  40. void SubTreeWaiter::createTreeAndRun(){
  41. if(!_subTreeReboltManager){
  42. _runningState.btState = FAILURE;
  43. return;
  44. }
  45. auto redBehaviacTree = _subTreeReboltManager->createBehaviacTree(_treeName, _boolMap, _stringMap);
  46. if(redBehaviacTree){
  47. _tree = redBehaviacTree;
  48. _tree->addRedBehaviacTreeDelegate(this);
  49. redBehaviacTree->runBehaviacTree();
  50. } else {
  51. _runningState.btState = FAILURE;
  52. }
  53. }
  54. void SubTreeWaiter::onTreeRunningEnd(red::RedBehaviacTree* tree, int endType, std::string treeName){
  55. onSuccessEnd();
  56. }
  57. RunningState SubTreeWaiter::getRunningState(){
  58. return _runningState;
  59. }
  60. };