GameEvents.cc 965 B

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