#pragma once #include #include namespace MM::Services { // provides an implementation for SceneServiceInterface class SimpleSceneService : public SceneServiceInterface { private: std::unique_ptr _scene; std::unique_ptr _next_scene; // enqueued next scene using clock = std::chrono::high_resolution_clock; long long int _accumulator = 0; std::chrono::time_point _last_time; public: const float f_delta; float delta_factor = 1.f; public: explicit SimpleSceneService(const float update_delta = 1.f/60.f) : f_delta(update_delta) {} const char* name(void) override { return "SimpleSceneService"; } bool enable(Engine& engine) override; void disable(Engine& engine) override; std::vector registerUpdates(void) override; private: void sceneFixedUpdate(Engine& engine); void changeSceneFixedUpdate(Engine& engine); public: Scene& getScene(void) override { return *_scene; } void changeScene(std::unique_ptr&& new_scene) override; // be carefull of that one void changeSceneNow(std::unique_ptr&& new_scene) override; void resetTime(void); }; } // MM::Services