EventManager.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #ifndef ANKI_EVENT_MANAGER_H
  2. #define ANKI_EVENT_MANAGER_H
  3. #include "anki/event/Event.h"
  4. #include "anki/util/Vector.h"
  5. #include "anki/util/StdTypes.h"
  6. #include "anki/scene/Common.h"
  7. #include "anki/Math.h"
  8. namespace anki {
  9. // Forward
  10. class SceneGraph;
  11. /// @addtogroup Events
  12. /// @{
  13. /// This manager creates the events ands keeps tracks of them
  14. class EventManager
  15. {
  16. public:
  17. typedef SceneVector<Event*> EventsContainer;
  18. EventManager(SceneGraph* scene);
  19. ~EventManager();
  20. /// @name Accessors
  21. /// @{
  22. SceneGraph& getScene()
  23. {
  24. return *scene;
  25. }
  26. const SceneGraph& getScene() const
  27. {
  28. return *scene;
  29. }
  30. SceneAllocator<U8> getSceneAllocator() const;
  31. SceneAllocator<U8> getSceneFrameAllocator() const;
  32. /// @}
  33. /// Iterate events
  34. template<typename Func>
  35. void iterateEvents(Func func)
  36. {
  37. for(Event* e : events)
  38. {
  39. func(*e);
  40. }
  41. }
  42. /// Create a new event
  43. template<typename T, typename... Args>
  44. void newEvent(T*& event, Args&&... args)
  45. {
  46. SceneAllocator<T> al = getSceneAllocator();
  47. event = al.allocate(1);
  48. al.construct(event, this, std::forward<Args>(args)...);
  49. registerEvent(event);
  50. }
  51. /// Delete an event. It actualy marks it for deletion
  52. void deleteEvent(Event* event)
  53. {
  54. event->markForDeletion();
  55. }
  56. /// Update
  57. void updateAllEvents(F32 prevUpdateTime, F32 crntTime);
  58. private:
  59. SceneGraph* scene = nullptr;
  60. EventsContainer events;
  61. F32 prevUpdateTime;
  62. F32 crntTime;
  63. /// Add an event to the local container
  64. void registerEvent(Event* event);
  65. /// Remove an event from the container
  66. void unregisterEvent(Event* event);
  67. };
  68. /// @}
  69. } // end namespace anki
  70. #endif