summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--game/environment.cpp12
-rw-r--r--game/environment.h8
-rw-r--r--lib/chronology.cpp6
-rw-r--r--lib/chronology.h1
-rw-r--r--ui/gameMainWindow.cpp1
5 files changed, 21 insertions, 7 deletions
diff --git a/game/environment.cpp b/game/environment.cpp
index f8da316..58a5b53 100644
--- a/game/environment.cpp
+++ b/game/environment.cpp
@@ -5,15 +5,17 @@
constexpr Direction2D DONCASTER = {-1.1_degrees, 53.5_degrees};
-Environment::Environment() : worldTime {"2026-06-01T12:00:00"_time_t}, earthPos {DONCASTER} { }
+Environment::Environment() : worldTime {"2026-06-01T12:00:00"_seconds}, gameTimeScaleFactor {1440}, earthPos {DONCASTER}
+{
+}
void
-Environment::tick(TickDuration)
+Environment::tick(TickDuration elapsed)
{
- worldTime += 50;
+ worldTime += std::chrono::duration_cast<WorldTime::duration>(elapsed * gameTimeScaleFactor);
}
-time_t
+Environment::WorldTime
Environment::getWorldTime() const
{
return worldTime;
@@ -22,7 +24,7 @@ Environment::getWorldTime() const
Direction2D
Environment::getSunPos() const
{
- return getSunPos(earthPos, worldTime);
+ return getSunPos(earthPos, worldTime.time_since_epoch().count());
}
void
diff --git a/game/environment.h b/game/environment.h
index 271792f..94211bc 100644
--- a/game/environment.h
+++ b/game/environment.h
@@ -2,20 +2,24 @@
#include "config/types.h"
#include "worldobject.h"
+#include <chrono>
class SceneRenderer;
class SceneProvider;
class Environment : public WorldObject {
public:
+ using WorldTime = std::chrono::utc_time<std::chrono::seconds>;
+
Environment();
void tick(TickDuration elapsed) override;
void render(const SceneRenderer &, const SceneProvider &) const;
[[nodiscard]] Direction2D getSunPos() const;
- [[nodiscard]] time_t getWorldTime() const;
+ [[nodiscard]] WorldTime getWorldTime() const;
[[nodiscard]] static Direction2D getSunPos(Direction2D position, time_t time);
private:
- time_t worldTime;
+ WorldTime worldTime;
+ uint16_t gameTimeScaleFactor;
glm::vec<2, Angle> earthPos;
};
diff --git a/lib/chronology.cpp b/lib/chronology.cpp
index 8707bba..49f6df2 100644
--- a/lib/chronology.cpp
+++ b/lib/chronology.cpp
@@ -10,3 +10,9 @@ operator""_time_t(const char * iso, size_t)
}
return mktime(&tm);
}
+
+std::chrono::seconds
+operator""_seconds(const char * iso, size_t)
+{
+ return std::chrono::seconds(operator""_time_t(iso, 0));
+}
diff --git a/lib/chronology.h b/lib/chronology.h
index 688a1f7..886424d 100644
--- a/lib/chronology.h
+++ b/lib/chronology.h
@@ -5,3 +5,4 @@
using TickDuration = std::chrono::duration<float, std::chrono::seconds::period>;
time_t operator""_time_t(const char * iso, size_t);
+std::chrono::seconds operator""_seconds(const char * iso, size_t);
diff --git a/ui/gameMainWindow.cpp b/ui/gameMainWindow.cpp
index 056dac3..cc81a9b 100644
--- a/ui/gameMainWindow.cpp
+++ b/ui/gameMainWindow.cpp
@@ -28,6 +28,7 @@ public:
render() override
{
if (IltGui::BeginToolbar("bottomBar", ImGuiDir_Down, TOOLBAR_HEIGHT)) {
+ IltGui::Text(std::format("{:%a, %H:%M\n%d %m %Y}", gameState->environment->getWorldTime()));
if (ImGui::ImageButton("Build rails", *buildRailsIcon, TOOLBAR_ICON_SIZE<ImVec2>)) {
gms->target = std::make_unique<EditNetworkOf<RailLinks>>();
}