// // SubTreeWaiter.cpp // redream_runtime_mac // // Created by zhu on 2023/5/23. // #include "SubTreeWaiter.hpp" #include "ReboltRedManager.h" namespace redream { SubTreeWaiter::SubTreeWaiter(ReboltRedManager* reboltManager, red::RedBehaviacTree* tree, std::map &boolMap, std::map &stringMap, std::string treeName, ReboltRedManager* subTreeReboltManager) : _boolMap(boolMap) , _stringMap(stringMap) , _treeName(treeName) { _reboltManager = reboltManager; _fatherTree = tree; _subTreeReboltManager = subTreeReboltManager; } SubTreeWaiter::~SubTreeWaiter(){ } SubTreeWaiter* SubTreeWaiter::create(ReboltRedManager* reboltManager, red::RedBehaviacTree* tree, std::map &boolMap, std::map &stringMap, std::string treeName, ReboltRedManager* subTreeReboltManager){ SubTreeWaiter * ret = new (std::nothrow) SubTreeWaiter(reboltManager, tree, boolMap, stringMap, treeName, subTreeReboltManager); if (ret && ret->init()) { ret->autorelease(); } else { CC_SAFE_DELETE(ret); } return ret; } bool SubTreeWaiter::init(){ return true; } void SubTreeWaiter::run(){ _runningState.btState = RUNNING; createTreeAndRun(); } void SubTreeWaiter::createTreeAndRun(){ if(!_subTreeReboltManager){ _runningState.btState = FAILURE; return; } auto redBehaviacTree = _subTreeReboltManager->createBehaviacTree(_treeName, _boolMap, _stringMap); if(redBehaviacTree){ _tree = redBehaviacTree; _tree->addRedBehaviacTreeDelegate(this); redBehaviacTree->runBehaviacTree(); } else { _runningState.btState = FAILURE; } } void SubTreeWaiter::onTreeRunningEnd(red::RedBehaviacTree* tree, int endType, std::string treeName){ onSuccessEnd(); } RunningState SubTreeWaiter::getRunningState(){ return _runningState; } };