module; #include 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(GetTimerValue() - s_TimerOffset) / static_cast(GetTimerFrequency()); }; export uint64_t GetTimeNs() { return static_cast( static_cast(GetTimerValue() - s_TimerOffset) * 1e9 / static_cast(GetTimerFrequency())); } export void SetTime(const uint64_t time) { const auto dTimerValue = static_cast(GetTimerValue()); const auto dTime = static_cast(time); const auto dFrequency = static_cast(GetTimerFrequency()); s_TimerOffset = static_cast(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