aboutsummaryrefslogtreecommitdiff
path: root/extension/src/Simulation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'extension/src/Simulation.cpp')
-rw-r--r--extension/src/Simulation.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/extension/src/Simulation.cpp b/extension/src/Simulation.cpp
new file mode 100644
index 0000000..5ea99c5
--- /dev/null
+++ b/extension/src/Simulation.cpp
@@ -0,0 +1,64 @@
+#include "Simulation.hpp"
+
+namespace OpenVic2 {
+ void Simulation::togglePauseState() {
+ this->isPaused = !isPaused;
+ }
+
+ bool Simulation::getPauseState() {
+ return this->isPaused;
+ }
+
+ void Simulation::increaseSimulationSpeed() {
+ switch (this->currentSpeed) {
+ case(Speed::Speed1):
+ this->currentSpeed = Speed::Speed2;
+ break;
+ case(Speed::Speed2):
+ this->currentSpeed = Speed::Speed3;
+ break;
+ case(Speed::Speed3):
+ this->currentSpeed = Speed::Speed4;
+ break;
+ case(Speed::Speed4):
+ this->currentSpeed = Speed::Speed5;
+ break;
+ }
+ }
+
+ void Simulation::decreaseSimulationSpeed() {
+ switch (this->currentSpeed) {
+ case(Speed::Speed2):
+ this->currentSpeed = Speed::Speed1;
+ break;
+ case(Speed::Speed3):
+ this->currentSpeed = Speed::Speed2;
+ break;
+ case(Speed::Speed4):
+ this->currentSpeed = Speed::Speed3;
+ break;
+ case(Speed::Speed5):
+ this->currentSpeed = Speed::Speed4;
+ break;
+ }
+ }
+
+ void Simulation::setSimulationSpeed(Speed speed) {
+ this->currentSpeed = speed;
+ }
+
+ int Simulation::getSimulationSpeed() {
+ return static_cast<int>(this->currentSpeed);
+ }
+
+ void Simulation::conditionallyAdvanceSimulation() {
+ if (!(this->isPaused)) {
+ std::chrono::time_point<std::chrono::high_resolution_clock> previousTime = this->lastPolledTime;
+ std::chrono::time_point<std::chrono::high_resolution_clock> currentTime = std::chrono::high_resolution_clock::now();
+ if (std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - previousTime).count() >= this->getSimulationSpeed()) {
+ this->lastPolledTime = currentTime;
+ this->inGameDate++;
+ }
+ }
+ }
+}