123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include "RUBehaviacTreeManger.h"
- NS_RU_BEGIN
- static RUBehaviacTreeManger* _instance = nullptr;
- const static std::string RUBEHAVIACTREEMANGER_SCHEDULER_KEY = "RUBEHAVIACTREEMANGER_SCHEDULER_KEY";
- RUBehaviacTreeManger* RUBehaviacTreeManger::getInstance()
- {
- if(_instance == nullptr)
- {
- _instance = new RUBehaviacTreeManger();
- _instance->_startUpdate();
- }
- return _instance;
- }
- void RUBehaviacTreeManger::destroyInstance() {
- if(_instance != nullptr)
- {
- Director::getInstance()->getScheduler()->unschedule(RUBEHAVIACTREEMANGER_SCHEDULER_KEY, _instance);
- delete _instance;
- }
- _instance = nullptr;
- }
- void RUBehaviacTreeManger::_startUpdate() {
- Director::getInstance()->getScheduler()->schedule(CC_CALLBACK_1(RUBehaviacTreeManger::_update, this), this, 0, false, RUBEHAVIACTREEMANGER_SCHEDULER_KEY);
- }
- void RUBehaviacTreeManger::_addBehaviacTree(RUBehaviacTree* tree) {
- _addBehaviorTrees.insert(tree);
- }
- void RUBehaviacTreeManger::_removeBehaviacTree(RUBehaviacTree* tree) {
- _removeBehaviorTrees.insert(tree);
- }
- void RUBehaviacTreeManger::_update(float dt) {
- _runningBehaviorTrees.insert(_addBehaviorTrees.begin(), _addBehaviorTrees.end());
- _addBehaviorTrees.clear();
-
- //遍历的过程中可能会addBehaviacTree或removeBehaviacTree
- for (auto iter = _runningBehaviorTrees.begin(); iter != _runningBehaviorTrees.end();iter++) {
- (*iter)->_update();
- }
-
- for (const auto &elem : _removeBehaviorTrees) {
- _runningBehaviorTrees.erase(elem);
- }
- _removeBehaviorTrees.clear();
- }
- NS_RU_END
|