summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Stars45/Clock.cpp55
-rw-r--r--Stars45/Clock.h13
2 files changed, 53 insertions, 15 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;
}
diff --git a/Stars45/Clock.h b/Stars45/Clock.h
index a0b3c4f..e2ddcb0 100644
--- a/Stars45/Clock.h
+++ b/Stars45/Clock.h
@@ -13,21 +13,28 @@
class Clock
{
public:
+ using inner_clock = std::chrono::high_resolution_clock;
+ using elapsed_duration = std::chrono::milliseconds;
+ using count_type = elapsed_duration::rep;
+
Clock();
+ void Set();
void Reset();
double Step();
double Delta() const;
double GuiDelta() const;
+ double TimeCompression() const;
+ count_type GameTime() const;
+ count_type RealTime() const;
void SetTimeCompression(double compression);
- double TimeCompression() const;
protected:
- using inner_clock = std::chrono::high_resolution_clock;
- inner_clock::time_point m_epoch;
inner_clock::time_point m_point;
+ elapsed_duration m_game_elapsed;
+ elapsed_duration m_real_elapsed;
double m_compression;
double m_delta;
double m_gui_delta;