2020-09-29 13:47:50 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <mm/services/scene_service_interface.hpp>
|
|
|
|
|
2020-12-26 19:29:39 +01:00
|
|
|
#include <chrono>
|
|
|
|
|
2020-09-29 13:47:50 +02:00
|
|
|
namespace MM::Services {
|
|
|
|
|
|
|
|
// provides an implementation for SceneServiceInterface
|
|
|
|
class SimpleSceneService : public SceneServiceInterface {
|
|
|
|
private:
|
|
|
|
std::unique_ptr<Scene> _scene;
|
|
|
|
std::unique_ptr<Scene> _next_scene; // enqueued next scene
|
|
|
|
|
2020-12-26 19:29:39 +01:00
|
|
|
using clock = std::chrono::high_resolution_clock;
|
|
|
|
long long int _accumulator = 0;
|
|
|
|
std::chrono::time_point<clock> _last_time;
|
|
|
|
|
|
|
|
public:
|
|
|
|
const float f_delta;
|
|
|
|
|
|
|
|
float delta_factor = 1.f;
|
2020-09-29 13:47:50 +02:00
|
|
|
|
|
|
|
public:
|
2020-12-26 19:29:39 +01:00
|
|
|
explicit SimpleSceneService(const float update_delta = 1.f/60.f) : f_delta(update_delta) {}
|
|
|
|
|
2020-09-29 13:47:50 +02:00
|
|
|
const char* name(void) override { return "SimpleSceneService"; }
|
|
|
|
|
|
|
|
bool enable(Engine& engine) override;
|
|
|
|
void disable(Engine& engine) override;
|
|
|
|
|
2020-12-26 19:29:39 +01:00
|
|
|
std::vector<UpdateStrategies::UpdateCreationInfo> registerUpdates(void) override;
|
|
|
|
|
|
|
|
private:
|
2020-09-29 13:47:50 +02:00
|
|
|
void sceneFixedUpdate(Engine& engine);
|
|
|
|
void changeSceneFixedUpdate(Engine& engine);
|
|
|
|
|
|
|
|
public:
|
|
|
|
Scene& getScene(void) override { return *_scene; }
|
|
|
|
|
2020-10-14 13:35:27 +02:00
|
|
|
void changeScene(std::unique_ptr<Scene>&& new_scene) override;
|
2020-09-29 13:47:50 +02:00
|
|
|
|
|
|
|
// be carefull of that one
|
2020-10-14 13:35:27 +02:00
|
|
|
void changeSceneNow(std::unique_ptr<Scene>&& new_scene) override;
|
2020-12-26 19:29:39 +01:00
|
|
|
|
|
|
|
void resetTime(void);
|
2020-09-29 13:47:50 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
} // MM::Services
|
|
|
|
|