Event.cc 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "Base/Typedef.h"
  2. #include "Event/Event.h"
  3. #include "Event/NodeFactories.h"
  4. #include "Event/EventConf.pb.h"
  5. namespace Egametang {
  6. Event::Event(NodeFactories& factories, EventConf& conf):
  7. action(NULL), condition(NULL)
  8. {
  9. const ConditionConf& condition_conf = conf.condition();
  10. if (condition_conf.has_node())
  11. {
  12. const EventNode& node_conf = condition_conf.node();
  13. BuildCondition(factories, node_conf, condition);
  14. }
  15. }
  16. void Event::BuildCondition(
  17. NodeFactories& factories, const EventNode& conf,
  18. NodeIf*& node)
  19. {
  20. int32 type = conf.type();
  21. node = factories.GetInstance(conf);
  22. for (int i = 0; i < conf.nodes_size(); ++i)
  23. {
  24. const EventNode& logic_node_conf = conf.nodes(i);
  25. NodeIf* logic_node = NULL;
  26. BuildCondition(factories, logic_node_conf, logic_node);
  27. node->AddChildNode(logic_node);
  28. }
  29. }
  30. Event::~Event()
  31. {
  32. delete condition;
  33. delete action;
  34. }
  35. void Event::Run(ContexIf* contex)
  36. {
  37. if(condition->Run(contex))
  38. {
  39. // 执行动作
  40. action->Run(contex);
  41. }
  42. }
  43. int Event::Type() const
  44. {
  45. return type;
  46. }
  47. } // namespace Egametang