EventManager.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Scene/Common.h>
  7. #include <AnKi/Util/List.h>
  8. #include <AnKi/Math.h>
  9. namespace anki {
  10. /// @addtogroup scene
  11. /// @{
  12. /// This manager creates the events ands keeps track of them
  13. class EventManager
  14. {
  15. public:
  16. EventManager();
  17. ~EventManager();
  18. /// Create a new event
  19. /// @note It's thread-safe against itself. Can be called in Event::update.
  20. template<typename T, typename... TArgs>
  21. T* newEvent(TArgs&&... args)
  22. {
  23. T* event = newInstance<T>(SceneMemoryPool::getSingleton(), std::forward<TArgs>(args)...);
  24. LockGuard lock(m_eventsForRegistrationMtx);
  25. m_eventsForRegistration.pushBack(event);
  26. return event;
  27. }
  28. /// Update
  29. ANKI_INTERNAL void updateAllEvents(Second prevUpdateTime, Second crntTime);
  30. private:
  31. IntrusiveList<Event> m_events;
  32. IntrusiveList<Event> m_eventsForRegistration;
  33. SpinLock m_eventsForRegistrationMtx;
  34. static Bool assosiatedNodesMarkedForDeletion(const Event& e);
  35. };
  36. /// @}
  37. } // end namespace anki