mirror of
https://github.com/whoahq/whoa.git
synced 2026-03-18 21:51:06 +03:00
feat(util): add initial implementation of CGameTime
This commit is contained in:
parent
aed2aebb66
commit
1d91a49462
@ -1,6 +1,7 @@
|
||||
#ifndef UTIL_TIME_HPP
|
||||
#define UTIL_TIME_HPP
|
||||
|
||||
#include "util/time/CGameTime.hpp"
|
||||
#include "util/time/WowTime.hpp"
|
||||
|
||||
#endif
|
||||
|
||||
29
src/util/time/CGameTime.cpp
Normal file
29
src/util/time/CGameTime.cpp
Normal 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);
|
||||
}
|
||||
29
src/util/time/CGameTime.hpp
Normal file
29
src/util/time/CGameTime.hpp
Normal 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
|
||||
28
test/util/time/CGameTime.cpp
Normal file
28
test/util/time/CGameTime.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user