| 1 | #ifndef ENGINE_HPP_ |
| 2 | #define ENGINE_HPP_ |
| 3 |
|
| 4 |
|
| 5 | #include <chrono> |
| 6 | #include <atomic> |
| 7 | #include <map> |
| 8 | #include <thread> |
| 9 |
|
| 10 | #include "ZydecoCommon.hpp" |
| 11 | #include "IEventQuitSubscriber.hpp" |
| 12 |
|
| 13 |
|
| 14 | class IEventHandler; |
| 15 | class IWindow; |
| 16 |
|
| 17 |
|
| 18 | class Engine : public IEventQuitSubscriber |
| 19 | { |
| 20 | public: |
| 21 | Engine(IEventHandler& r_event_handler, IWindow& r_window); |
| 22 | ~Engine(); |
| 23 |
|
| 24 | void OnQuitEvent() override; |
| 25 |
|
| 26 | void Execute(); |
| 27 |
|
| 28 | protected: |
| 29 | IEventHandler& m_rEventHandler; |
| 30 | IWindow& m_rWindow; |
| 31 |
|
| 32 | std::atomic<bool> m_aIsExiting; |
| 33 | std::atomic<bool> m_aSceneUpdated; |
| 34 | std::map<std::string, std::thread*> m_threads; |
| 35 | void DoEventLoop(); |
| 36 | void DoRenderLoop(); |
| 37 |
|
| 38 | std::chrono::time_point<std::chrono::steady_clock, std::chrono::microseconds> m_currentTime; |
| 39 |
|
| 40 | double m_framerate; |
| 41 | std::chrono::microseconds m_frameRenderTimeUs; |
| 42 | std::chrono::time_point<std::chrono::steady_clock, std::chrono::microseconds> m_frameRenderStartTime; |
| 43 | }; |
| 44 |
|
| 45 |
|
| 46 | #endif /* ENGINE_HPP_ */ |
| 47 |
|