RUBehaviacTreeFactory.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #include "RUBehaviacTreeFactory.h"
  2. NS_RU_BEGIN
  3. static RUBehaviacTreeFactory *_instance = nullptr;
  4. RUBehaviacTreeFactory* RUBehaviacTreeFactory::getInstance()
  5. {
  6. if (_instance == nullptr)
  7. {
  8. _instance = new (std::nothrow) RUBehaviacTreeFactory;
  9. }
  10. return _instance;
  11. }
  12. void RUBehaviacTreeFactory::registerBehaviacTreeCreator(const std::string& treeName, std::function<RUBehaviacTree*(void)> behaviacTreeCreator)
  13. {
  14. CCASSERT(_behaviacTreeCreators.find(treeName) == _behaviacTreeCreators.end(), "wtf");
  15. _behaviacTreeCreators.emplace(treeName,behaviacTreeCreator);
  16. }
  17. RUBehaviacTree* RUBehaviacTreeFactory::createBehaviacTree(const std::string& treeName)
  18. {
  19. RUBehaviacTree* behaviacTree = nullptr;
  20. //如果注册器的key未注册,返回默认注册器
  21. if (treeName.empty() || _behaviacTreeCreators.find(treeName) == _behaviacTreeCreators.end()) {
  22. CCASSERT(false,"有问题");
  23. }else{
  24. auto behaviacTreeCreator = _behaviacTreeCreators.find(treeName)->second;
  25. behaviacTree = behaviacTreeCreator();
  26. }
  27. return behaviacTree;
  28. }
  29. NS_RU_END