summaryrefslogtreecommitdiffhomepage
path: root/Stars45/Clock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Stars45/Clock.cpp')
-rw-r--r--Stars45/Clock.cpp55
1 files changed, 43 insertions, 12 deletions
diff --git a/Stars45/Clock.cpp b/Stars45/Clock.cpp
index 8fd4f95..0bd3447 100644
--- a/Stars45/Clock.cpp
+++ b/Stars45/Clock.cpp
@@ -13,14 +13,19 @@ static constexpr double STARTING_DELTA {1.0 / 60.0};
Clock::Clock() :
- m_epoch {inner_clock::now()}
+ m_point {inner_clock::now()},
+ m_game_elapsed {elapsed_duration::zero()},
+ m_real_elapsed {elapsed_duration::zero()},
+ m_compression {NO_COMPRESSION},
+ m_delta {STARTING_DELTA},
+ m_gui_delta {STARTING_DELTA}
{
- Reset();
+ Set();
}
void
-Clock::Reset()
+Clock::Set()
{
m_point = inner_clock::now();
m_compression = NO_COMPRESSION;
@@ -29,14 +34,26 @@ Clock::Reset()
}
+void
+Clock::Reset()
+{
+ m_game_elapsed = elapsed_duration::zero();
+ m_real_elapsed = elapsed_duration::zero();
+ Set();
+}
+
+
double
Clock::Step()
{
const auto next = inner_clock::now();
- const std::chrono::duration<double> delta = next - m_point;
+ const auto delta = std::chrono::duration_cast<std::chrono::milliseconds>(next - m_point);
+ m_game_elapsed += std::chrono::duration_cast<std::chrono::milliseconds>(delta * m_compression);
+ m_real_elapsed += delta;
+ const std::chrono::duration<double> seconds = delta;
+ m_delta = seconds.count() * m_compression;
+ m_gui_delta = seconds.count();
m_point = next;
- m_delta = delta.count() * m_compression;
- m_gui_delta = delta.count();
return m_delta;
}
@@ -55,15 +72,29 @@ Clock::GuiDelta() const
}
-void
-Clock::SetTimeCompression(double compression)
+double
+Clock::TimeCompression() const
{
- m_compression = compression;
+ return m_compression;
}
-double
-Clock::TimeCompression() const
+Clock::count_type
+Clock::GameTime() const
{
- return m_compression;
+ return m_game_elapsed.count();
+}
+
+
+Clock::count_type
+Clock::RealTime() const
+{
+ return m_real_elapsed.count();
+}
+
+
+void
+Clock::SetTimeCompression(double compression)
+{
+ m_compression = compression;
}