diff --git a/src/util/Time.hpp b/src/util/Time.hpp index 8edb391..db18ed3 100644 --- a/src/util/Time.hpp +++ b/src/util/Time.hpp @@ -1,6 +1,7 @@ #ifndef UTIL_TIME_HPP #define UTIL_TIME_HPP +#include "util/time/CGameTime.hpp" #include "util/time/WowTime.hpp" #endif diff --git a/src/util/time/CGameTime.cpp b/src/util/time/CGameTime.cpp new file mode 100644 index 0000000..94810ab --- /dev/null +++ b/src/util/time/CGameTime.cpp @@ -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(minutes); +} diff --git a/src/util/time/CGameTime.hpp b/src/util/time/CGameTime.hpp new file mode 100644 index 0000000..d8f53c0 --- /dev/null +++ b/src/util/time/CGameTime.hpp @@ -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 diff --git a/test/util/time/CGameTime.cpp b/test/util/time/CGameTime.cpp new file mode 100644 index 0000000..825da49 --- /dev/null +++ b/test/util/time/CGameTime.cpp @@ -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); + } +}