From 074447138c3e9162e4bda084a561e8a9c8d8cbd6 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 17 Feb 2024 10:04:40 +0000 Subject: [PATCH] Add method for whether calendar is frozen --- src/date.cpp | 10 ++++++++-- src/date_type.h | 2 ++ src/vehicle.cpp | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/date.cpp b/src/date.cpp index 3f576ccb7f..af75fa4bd6 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -275,6 +275,12 @@ EconTime::Date EconTime::ConvertYMDToDate(EconTime::Year year, EconTime::Month m return CalTime::ConvertYMDToDate(year.base(), month, day).base(); } +bool CalTime::IsCalendarFrozen(bool newgame) +{ + GameSettings &settings = (newgame) ? _settings_newgame : _settings_game; + return settings.economy.timekeeping_units == TKU_WALLCLOCK && settings.economy.minutes_per_calendar_year == CalTime::FROZEN_MINUTES_PER_YEAR; +} + bool EconTime::UsingWallclockUnits(bool newgame) { if (newgame) return (_settings_newgame.economy.timekeeping_units == TKU_WALLCLOCK); @@ -417,10 +423,10 @@ static void OnNewEconomyDay() static void IncreaseCalendarDate() { /* If calendar day progress is frozen, don't try to advance time. */ - if (_settings_game.economy.minutes_per_calendar_year == CalTime::FROZEN_MINUTES_PER_YEAR) return; + if (CalTime::IsCalendarFrozen()) return; /* If we are using a non-default calendar progression speed, we need to check the sub_date_fract before updating date_fract. */ - if (_settings_game.economy.minutes_per_calendar_year != CalTime::DEF_MINUTES_PER_YEAR) { + if (_settings_game.economy.timekeeping_units == TKU_WALLCLOCK && _settings_game.economy.minutes_per_calendar_year != CalTime::DEF_MINUTES_PER_YEAR) { CalTime::Detail::now.sub_date_fract++; /* Check if we are ready to increment date_fract */ diff --git a/src/date_type.h b/src/date_type.h index a7986ef930..ea6c1eb62f 100644 --- a/src/date_type.h +++ b/src/date_type.h @@ -195,6 +195,8 @@ struct CalTime : public DateDetail::BaseTime { return ConvertYMDToDate(ymd.year, ymd.month, ymd.day); } + static bool IsCalendarFrozen(bool newgame = false); + /** * Calculate the year of a given date. * @param date The date to consider. diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 1f539f24e0..5089aafaa2 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1565,7 +1565,7 @@ void CallVehicleTicks() if (TickSkipCounter() == 0) RunVehicleDayProc(); - if (EconTime::UsingWallclockUnits() && _settings_game.economy.minutes_per_calendar_year != CalTime::FROZEN_MINUTES_PER_YEAR && CalTime::Detail::now.sub_date_fract == 0) { + if (EconTime::UsingWallclockUnits() && !CalTime::IsCalendarFrozen() && CalTime::Detail::now.sub_date_fract == 0) { RunVehicleCalendarDayProc(); }