1
0
mirror of https://github.com/borgesdan/xn65 synced 2024-12-29 21:54:47 +01:00
xn65/framework/platform/clock-dx.cpp
2024-03-23 17:23:07 -03:00

71 lines
1.2 KiB
C++

#include "clock-dx.hpp"
#include <Windows.h>
namespace xna {
void GameClock::Reset() {
_start = ClockNow();
_end = std::chrono::steady_clock::time_point();
_stopped = false;
_suspended = false;
}
void GameClock::Start() {
Reset();
_total = 0;
_start = ClockNow();
}
void GameClock::Resume() {
if (_stopped)
return;
if (_suspended) {
auto elapsed = _end - _start;
auto now = ClockNow();
_start = now - elapsed;
_suspended = false;
}
else {
_start = ClockNow();
}
}
void GameClock::Suspend() {
if (_suspended || _stopped)
return;
_end = ClockNow();
_suspended = true;
}
void GameClock::Stop() {
Reset();
_total = 0;
_stopped = true;
}
TimeSpan GameClock::ElapsedTime() {
if (_stopped) return TimeSpan();
if (!_suspended) {
_end = ClockNow();
}
auto nano = GetNanoseconds(_start, _end);
return TimeSpan::FromSeconds(nano / 1'000'000'000.0);
}
TimeSpan GameClock::TotalTime() {
if (_stopped) return TimeSpan();
if (!_suspended) {
_end = ClockNow();
}
auto nano = GetNanoseconds(_start, _end);
_total += nano;
return TimeSpan::FromSeconds(_total / 1'000'000'000.0);
}
}