36 lines
No EOL
1 KiB
C++
36 lines
No EOL
1 KiB
C++
module;
|
|
#include <cstdint>
|
|
|
|
export module VUI:Time;
|
|
|
|
import :TimeInternal;
|
|
|
|
static uint64_t s_TimerOffset{0};
|
|
static double s_LastTime{0};
|
|
static double s_DeltaTime{0};
|
|
|
|
namespace VUI {
|
|
export double GetDeltaTime() { return s_DeltaTime; };
|
|
export double GetTime() {
|
|
return static_cast<double>(GetTimerValue() - s_TimerOffset) /
|
|
static_cast<double>(GetTimerFrequency());
|
|
};
|
|
export uint64_t GetTimeNs() {
|
|
return static_cast<uint64_t>(
|
|
static_cast<double>(GetTimerValue() - s_TimerOffset) * 1e9 /
|
|
static_cast<double>(GetTimerFrequency()));
|
|
}
|
|
export void SetTime(const uint64_t time) {
|
|
const auto dTimerValue = static_cast<double>(GetTimerValue());
|
|
const auto dTime = static_cast<double>(time);
|
|
const auto dFrequency = static_cast<double>(GetTimerFrequency());
|
|
s_TimerOffset = static_cast<uint64_t>(dTimerValue - dTime * dFrequency);
|
|
};
|
|
export uint64_t GetTimeOffset() { return s_TimerOffset; }
|
|
|
|
export void UpdateDeltaTime() {
|
|
const auto time = GetTime();
|
|
s_DeltaTime = time - s_LastTime;
|
|
s_LastTime = time;
|
|
};
|
|
} // namespace VUI
|