From 6b12539e3f9827f35bc20ca279235b1f80073ef0 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 22 Feb 2024 20:28:24 +0000 Subject: [PATCH] Implement StateTicksToCalendarDate for wallclock mode --- src/date.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/date.cpp b/src/date.cpp index e12c30717b..7676ea5540 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -130,8 +130,15 @@ void UpdateEffectiveDayLengthFactor() CalTime::Date StateTicksToCalendarDate(StateTicks ticks) { - /* Process the same as calendar time (for now) */ - return StateTicksToDate(ticks).base(); + if (!EconTime::UsingWallclockUnits()) return StateTicksToDate(ticks).base(); + + if (CalTime::IsCalendarFrozen()) return CalTime::CurDate(); + + Ticks ticks_per_cal_day = (_settings_game.economy.minutes_per_calendar_year * DAY_TICKS) / CalTime::DEF_MINUTES_PER_YEAR; + uint subticks_left_this_day = ((DAY_TICKS - CalTime::CurDateFract()) * ticks_per_cal_day) - CalTime::CurSubDateFract(); + Ticks ticks_into_this_day = ticks_per_cal_day - CeilDiv(subticks_left_this_day, DAY_TICKS); + + return CalTime::CurDate().base() + (int32_t)(((ticks - _state_ticks).base() + ticks_into_this_day) / ticks_per_cal_day); } #define M(a, b) ((a << 5) | b)