Event.cc 1.0 KB

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