GameEvents.cc 895 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "Base/Typedef.h"
  2. #include "Event/GameEvents.h"
  3. #include "Event/EventConf.pb.h"
  4. namespace Egametang {
  5. GameEvents::GameEvents(NodeFactories& factories):
  6. factories(factories), events(100)
  7. {
  8. }
  9. GameEvents::~GameEvents()
  10. {
  11. }
  12. void GameEvents::AddEvent(EventConf& conf)
  13. {
  14. int32 type = conf.type();
  15. Event event(factories, conf);
  16. events[type].push_back(event);
  17. }
  18. void GameEvents::Excute(int type, ContexIf* contex)
  19. {
  20. std::list<Event>& es = events[type];
  21. for (std::list<Event>::iterator iter = es.begin(); iter != es.end();)
  22. {
  23. // 暂未考虑event删除情况,每个event都会对应到一个buff
  24. // 所以可以在这里遍历的时候查看相应buff是否删除,如果
  25. // 删除就删除相应event
  26. if (false)
  27. {
  28. std::list<Event>::iterator current = iter;
  29. ++iter;
  30. es.erase(current);
  31. continue;
  32. }
  33. iter->Run(contex);
  34. ++iter;
  35. }
  36. }
  37. } // namespace Egametang