feat(util): add initial implementation of CGameTime

This commit is contained in:
fallenoak 2026-01-28 20:39:49 -06:00
parent aed2aebb66
commit 1d91a49462
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
4 changed files with 87 additions and 0 deletions

View File

@ -1,6 +1,7 @@
#ifndef UTIL_TIME_HPP #ifndef UTIL_TIME_HPP
#define UTIL_TIME_HPP #define UTIL_TIME_HPP
#include "util/time/CGameTime.hpp"
#include "util/time/WowTime.hpp" #include "util/time/WowTime.hpp"
#endif #endif

View File

@ -0,0 +1,29 @@
#include "util/time/CGameTime.hpp"
#include "common/Time.hpp"
void CGameTime::PerformCallbacks(int32_t minutes) {
// TODO
}
void CGameTime::TickMinute() {
// Increment minute
int32_t minutes = (this->GetHourAndMinutes() + 1) % 1440;
// Update hours and minutes
this->SetHourAndMinutes(minutes);
// Increment day if minute crossed day boundary
if (minutes == 0) {
this->AddDays(1, false);
}
this->m_gameMinutesElapsed++;
this->PerformCallbacks(minutes);
this->m_lastTickMinute = OsGetAsyncTimeMsPrecise();
this->uint40 = 1;
this->m_dayProgression = this->m_gameMinutesThisTick + static_cast<float>(minutes);
}

View File

@ -0,0 +1,29 @@
#ifndef UTIL_TIME_C_GAME_TIME_HPP
#define UTIL_TIME_C_GAME_TIME_HPP
#include "util/time/WowTime.hpp"
class CGameTime : public WowTime {
public:
// Public member functions
void PerformCallbacks(int32_t minutes);
void TickMinute();
private:
// Private member variables
uint32_t m_lastTick = 0;
int32_t m_timeBias = 0;
int32_t m_dateBias = 0;
uint32_t m_gameMinutesElapsed = 0;
float m_gameMinutesPerRealSecond = 1.0f / 60.0f;
float m_gameMinutesThisTick = 0.0f;
uint32_t m_timeDifferential = 0;
uint32_t m_lastTickMinute = 0;
uint8_t uint40 = 0;
float m_dayProgression = 0.0f;
float float48 = 0.0f;
float float4C = 0.0f;
// TODO m_callbackLists
};
#endif

View File

@ -0,0 +1,28 @@
#include "util/time/CGameTime.hpp"
#include "catch.hpp"
TEST_CASE("CGameTime::CGameTime", "[util]") {
SECTION("constructs correctly") {
CGameTime time;
CHECK(time.m_minute == -1);
CHECK(time.m_hour == -1);
CHECK(time.m_weekday == -1);
CHECK(time.m_monthday == -1);
CHECK(time.m_month == -1);
CHECK(time.m_year == -1);
CHECK(time.m_flags == 0x0);
CHECK(time.m_holidayOffset == 0);
}
}
TEST_CASE("CGameTime::TickMinute", "[util]") {
SECTION("ticks minute correctly") {
CGameTime time;
time.SetHourAndMinutes(0, 0);
time.TickMinute();
CHECK(time.m_hour == 0);
CHECK(time.m_minute == 1);
}
}