From 64bbf86b623a3cca2eaf9009d7acdcde067592e3 Mon Sep 17 00:00:00 2001 From: Hop311 Date: Wed, 3 May 2023 19:37:26 +0100 Subject: Moved code to src/openvic2 --- src/openvic2/GameAdvancementHook.hpp | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/openvic2/GameAdvancementHook.hpp (limited to 'src/openvic2/GameAdvancementHook.hpp') diff --git a/src/openvic2/GameAdvancementHook.hpp b/src/openvic2/GameAdvancementHook.hpp new file mode 100644 index 0000000..07f8414 --- /dev/null +++ b/src/openvic2/GameAdvancementHook.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include + +namespace OpenVic2 { + //Conditionally advances game with provided behaviour + //Class governs game speed and pause state + class GameAdvancementHook { + public: + using AdvancementFunction = std::function; + using RefreshFunction = std::function; + using speed_t = int8_t; + + //Minimum number of miliseconds before the simulation advances + static const std::vector GAME_SPEEDS; + + private: + std::chrono::time_point 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; + RefreshFunction refreshFunction; + speed_t currentSpeed; + + public: + bool isPaused; + + GameAdvancementHook(AdvancementFunction tickFunction, RefreshFunction updateFunction, bool startPaused = true, speed_t startingSpeed = 0); + + void setSimulationSpeed(speed_t speed); + speed_t getSimulationSpeed() const; + void increaseSimulationSpeed(); + void decreaseSimulationSpeed(); + bool canIncreaseSimulationSpeed() const; + bool canDecreaseSimulationSpeed() const; + GameAdvancementHook& operator++(); + GameAdvancementHook& operator--(); + void conditionallyAdvanceGame(); + void reset(); + }; +} \ No newline at end of file -- cgit v1.2.3-56-ga3b1