BehaviorTree.cc 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <boost/format.hpp>
  2. #include <glog/logging.h>
  3. #include "Base/Typedef.h"
  4. #include "BehaviorTree/BehaviorTree.h"
  5. #include "BehaviorTree/NodeFactories.h"
  6. #include "BehaviorTree/BehaviorTreeConf.pb.h"
  7. namespace Egametang {
  8. BehaviorTree::BehaviorTree(NodeFactories& factories, const BehaviorTreeConf& treeConf):
  9. node(NULL)
  10. {
  11. type = treeConf.type();
  12. if (treeConf.has_node())
  13. {
  14. const BehaviorNodeConf& nodeConf = treeConf.node();
  15. BuildTree(factories, nodeConf, node);
  16. }
  17. }
  18. void BehaviorTree::BuildTree(
  19. NodeFactories& factories, const BehaviorNodeConf& nodeConf,
  20. BehaviorNode*& node)
  21. {
  22. int32 type = nodeConf.type();
  23. node = factories.GetInstance(nodeConf);
  24. for (int i = 0; i < nodeConf.node_size(); ++i)
  25. {
  26. const BehaviorNodeConf& logicNodeConf = nodeConf.node(i);
  27. BehaviorNode* logicNode = NULL;
  28. BuildTree(factories, logicNodeConf, logicNode);
  29. node->AddChildNode(logicNode);
  30. }
  31. }
  32. BehaviorTree::~BehaviorTree()
  33. {
  34. delete node;
  35. }
  36. void BehaviorTree::Run(ContexIf* contex)
  37. {
  38. node->Run(contex);
  39. }
  40. std::string BehaviorTree::ToString()
  41. {
  42. boost::format format("type: %1%\node: %2%");
  43. format % type % node->ToString();
  44. return format.str();
  45. }
  46. } // namespace Egametang