SelectorNode.cc 880 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <boost/foreach.hpp>
  2. #include "Base/Marcos.h"
  3. #include "BehaviorTree/SelectorNode.h"
  4. #include "BehaviorTree/BehaviorTreeConf.pb.h"
  5. namespace Egametang {
  6. SelectorNode::SelectorNode(int32 type): BehaviorNode(type)
  7. {
  8. }
  9. SelectorNode::~SelectorNode()
  10. {
  11. foreach (BehaviorNode* node, nodes)
  12. {
  13. delete node;
  14. }
  15. }
  16. bool SelectorNode::Run(ContexIf* contex)
  17. {
  18. foreach (BehaviorNode* node, nodes)
  19. {
  20. if (node->Run(contex))
  21. {
  22. return true;
  23. }
  24. }
  25. return false;
  26. }
  27. void SelectorNode::AddChildNode(BehaviorNode *node)
  28. {
  29. nodes.push_back(node);
  30. }
  31. std::string SelectorNode::ToString()
  32. {
  33. std::string s;
  34. s += "SelectorNode: \n";
  35. foreach (BehaviorNode* node, nodes)
  36. {
  37. s += " " + node->ToString() + "\n";
  38. }
  39. return s;
  40. }
  41. BehaviorNode* SelectorNodeFactory::GetInstance(const BehaviorNodeConf& conf)
  42. {
  43. return new SelectorNode(conf.type());
  44. }
  45. } // namespace Egametang