diff options
author | hop311 <hop3114@gmail.com> | 2023-12-02 16:48:08 +0100 |
---|---|---|
committer | hop311 <hop3114@gmail.com> | 2023-12-02 20:14:29 +0100 |
commit | 4a899c1a9e83ab9476b85522751081be434caa35 (patch) | |
tree | f1f6276c91beceecdfd9b09083d1c91ea8b41b60 /src/openvic-simulation/misc/GameAdvancementHook.hpp | |
parent | cd6875d5e0ca5e2545fd0e1647678cd18a6c81c2 (diff) |
Crime+event modifier loading + misc UI backend
Diffstat (limited to 'src/openvic-simulation/misc/GameAdvancementHook.hpp')
-rw-r--r-- | src/openvic-simulation/misc/GameAdvancementHook.hpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/openvic-simulation/misc/GameAdvancementHook.hpp b/src/openvic-simulation/misc/GameAdvancementHook.hpp new file mode 100644 index 0000000..75af718 --- /dev/null +++ b/src/openvic-simulation/misc/GameAdvancementHook.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include <chrono> +#include <functional> +#include <vector> +#include "openvic-simulation/utility/Getters.hpp" + +namespace OpenVic { + // Conditionally advances game with provided behaviour + // Class governs game speed and pause state + class GameAdvancementHook { + public: + using AdvancementFunction = std::function<void()>; + using RefreshFunction = std::function<void()>; + using speed_t = int8_t; + + // Minimum number of miliseconds before the simulation advances + static const std::vector<std::chrono::milliseconds> GAME_SPEEDS; + + private: + using time_point_t = std::chrono::time_point<std::chrono::high_resolution_clock>; + + time_point_t last_polled_time; + // A function pointer that advances the simulation, intended to be a capturing + // lambda or something similar. May need to be reworked later + AdvancementFunction trigger_function; + RefreshFunction refresh_function; + speed_t PROPERTY_CUSTOM_NAME(current_speed, get_simulation_speed); + + public: + bool is_paused; + + GameAdvancementHook( + AdvancementFunction tick_function, RefreshFunction update_function, bool start_paused = true, speed_t starting_speed = 0 + ); + + void set_simulation_speed(speed_t speed); + void increase_simulation_speed(); + void decrease_simulation_speed(); + bool can_increase_simulation_speed() const; + bool can_decrease_simulation_speed() const; + GameAdvancementHook& operator++(); + GameAdvancementHook& operator--(); + void conditionally_advance_game(); + void reset(); + }; +} |