aboutsummaryrefslogtreecommitdiff
path: root/extension/src/openvic2/GameAdvancementHook.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'extension/src/openvic2/GameAdvancementHook.hpp')
-rw-r--r--extension/src/openvic2/GameAdvancementHook.hpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/extension/src/openvic2/GameAdvancementHook.hpp b/extension/src/openvic2/GameAdvancementHook.hpp
new file mode 100644
index 0000000..72af4ac
--- /dev/null
+++ b/extension/src/openvic2/GameAdvancementHook.hpp
@@ -0,0 +1,40 @@
+#pragma once
+
+#include <chrono>
+#include <functional>
+
+namespace OpenVic2 {
+ //Value of different game speeds are the minimum number of miliseconds before the simulation advances
+ enum class GameSpeed {
+ Speed1 = 4000,
+ Speed2 = 3000,
+ Speed3 = 2000,
+ Speed4 = 1000,
+ Speed5 = 100,
+ Speed6 = 1
+ };
+
+ //Conditionally advances game with provided behaviour
+ //Class governs game speed and pause state
+ class GameAdvancementHook {
+ public:
+ using AdvancementFunction = std::function<void()>;
+
+ private:
+ std::chrono::time_point<std::chrono::high_resolution_clock> lastPolledTime;
+ //A function pointer that advances the simulation, intended to be a capturing lambda or something similar. May need to be reworked later
+ AdvancementFunction triggerFunction;
+
+ public:
+ bool isPaused;
+ GameSpeed currentSpeed;
+
+ GameAdvancementHook(AdvancementFunction function = nullptr, bool startPaused = false, GameSpeed startingSpeed = GameSpeed::Speed1);
+
+ void increaseSimulationSpeed();
+ void decreaseSimulationSpeed();
+ GameAdvancementHook operator++(int);
+ GameAdvancementHook operator--(int);
+ void conditionallyAdvanceGame();
+ };
+} \ No newline at end of file