NodeFactories.cc 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <glog/logging.h>
  2. #include "Base/Typedef.h"
  3. #include "Event/AndNode.h"
  4. #include "Event/OrNode.h"
  5. #include "Event/NotNode.h"
  6. #include "Event/SequenceNode.h"
  7. #include "Event/SelectorNode.h"
  8. #include "Event/BuffType.h"
  9. #include "Event/ChangeHealth.h"
  10. #include "Event/NodeFactories.h"
  11. #include "Event/EventConf.pb.h"
  12. #include "Event/EventDefine.h"
  13. namespace Egametang {
  14. NodeFactories::NodeFactories(): factories(2000, NULL)
  15. {
  16. // 条件节点
  17. factories[AND] = new AndNodeFactory();
  18. factories[OR] = new OrNodeFactory();
  19. factories[NOT] = new NotNodeFactory();
  20. // 动作节点
  21. factories[SEQUENCE] = new SequenceNodeFactory();
  22. factories[SELECTOR] = new SelectorNodeFactory();
  23. // 条件叶子节点
  24. factories[BUFF_TYPE] = new BuffTypeFactory();
  25. // 动作叶子节点
  26. factories[CHANGE_HEALTH] = new ChangeHealthFactory();
  27. }
  28. NodeFactories::~NodeFactories()
  29. {
  30. for (std::size_t i = 0; i < factories.size(); ++i)
  31. {
  32. if (factories[i] == NULL)
  33. {
  34. continue;
  35. }
  36. delete factories[i];
  37. }
  38. }
  39. NodeIf* NodeFactories::GetInstance(const EventNode& conf)
  40. {
  41. int32 type = conf.type();
  42. return factories[type]->GetInstance(conf);
  43. }
  44. }