1
0
Fork 0

Change: Only run vehicle calendar day proc when TimerGameCalendar::date_fract has advanced

pull/11428/head
Tyler Trahan 2024-01-21 10:54:17 -05:00
parent a48fb75947
commit 724266616d
7 changed files with 26 additions and 14 deletions

View File

@ -1472,11 +1472,12 @@ void StateGameLoop()
BasePersistentStorageArray::SwitchMode(PSM_ENTER_GAMELOOP);
AnimateAnimatedTiles();
TimerManager<TimerGameCalendar>::Elapsed(1);
if (TimerManager<TimerGameCalendar>::Elapsed(1)) {
RunVehicleCalendarDayProc();
}
TimerManager<TimerGameEconomy>::Elapsed(1);
TimerManager<TimerGameTick>::Elapsed(1);
RunTileLoop();
RunVehicleCalendarDayProc();
CallVehicleTicks();
CallLandscapeTick();
BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP);

View File

@ -94,27 +94,27 @@ void TimeoutTimer<TimerGameCalendar>::Elapsed(TimerGameCalendar::TElapsed trigge
}
template<>
void TimerManager<TimerGameCalendar>::Elapsed([[maybe_unused]] TimerGameCalendar::TElapsed delta)
bool TimerManager<TimerGameCalendar>::Elapsed([[maybe_unused]] TimerGameCalendar::TElapsed delta)
{
assert(delta == 1);
if (_game_mode == GM_MENU) return;
if (_game_mode == GM_MENU) return false;
/* If calendar day progress is frozen, don't try to advance time. */
if (_settings_game.economy.minutes_per_calendar_year == CalendarTime::FROZEN_MINUTES_PER_YEAR) return;
if (_settings_game.economy.minutes_per_calendar_year == CalendarTime::FROZEN_MINUTES_PER_YEAR) return false;
/* 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 != CalendarTime::DEF_MINUTES_PER_YEAR) {
TimerGameCalendar::sub_date_fract++;
/* Check if we are ready to increment date_fract */
if (TimerGameCalendar::sub_date_fract < (Ticks::DAY_TICKS * _settings_game.economy.minutes_per_calendar_year) / CalendarTime::DEF_MINUTES_PER_YEAR) return;
if (TimerGameCalendar::sub_date_fract < (Ticks::DAY_TICKS * _settings_game.economy.minutes_per_calendar_year) / CalendarTime::DEF_MINUTES_PER_YEAR) return false;
}
TimerGameCalendar::date_fract++;
/* Check if we entered a new day. */
if (TimerGameCalendar::date_fract < Ticks::DAY_TICKS) return;
if (TimerGameCalendar::date_fract < Ticks::DAY_TICKS) return true;
TimerGameCalendar::date_fract = 0;
TimerGameCalendar::sub_date_fract = 0;
@ -160,6 +160,8 @@ void TimerManager<TimerGameCalendar>::Elapsed([[maybe_unused]] TimerGameCalendar
days_this_year = TimerGameCalendar::IsLeapYear(TimerGameCalendar::year) ? CalendarTime::DAYS_IN_LEAP_YEAR : CalendarTime::DAYS_IN_YEAR;
TimerGameCalendar::date -= days_this_year;
}
return true;
}
#ifdef WITH_ASSERT

View File

@ -121,14 +121,14 @@ void TimeoutTimer<TimerGameEconomy>::Elapsed(TimerGameEconomy::TElapsed trigger)
}
template<>
void TimerManager<TimerGameEconomy>::Elapsed([[maybe_unused]] TimerGameEconomy::TElapsed delta)
bool TimerManager<TimerGameEconomy>::Elapsed([[maybe_unused]] TimerGameEconomy::TElapsed delta)
{
assert(delta == 1);
if (_game_mode == GM_MENU) return;
if (_game_mode == GM_MENU) return false;
TimerGameEconomy::date_fract++;
if (TimerGameEconomy::date_fract < Ticks::DAY_TICKS) return;
if (TimerGameEconomy::date_fract < Ticks::DAY_TICKS) return true;
TimerGameEconomy::date_fract = 0;
/* increase day counter */
@ -187,6 +187,8 @@ void TimerManager<TimerGameEconomy>::Elapsed([[maybe_unused]] TimerGameEconomy::
for (Vehicle *v : Vehicle::Iterate()) v->ShiftDates(-days_this_year);
for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(-days_this_year);
}
return true;
}
#ifdef WITH_ASSERT

View File

@ -54,11 +54,13 @@ void TimeoutTimer<TimerGameRealtime>::Elapsed(TimerGameRealtime::TElapsed delta)
}
template<>
void TimerManager<TimerGameRealtime>::Elapsed(TimerGameRealtime::TElapsed delta)
bool TimerManager<TimerGameRealtime>::Elapsed(TimerGameRealtime::TElapsed delta)
{
for (auto timer : TimerManager<TimerGameRealtime>::GetTimers()) {
timer->Elapsed(delta);
}
return true;
}
#ifdef WITH_ASSERT

View File

@ -51,13 +51,15 @@ void TimeoutTimer<TimerGameTick>::Elapsed(TimerGameTick::TElapsed delta)
}
template<>
void TimerManager<TimerGameTick>::Elapsed(TimerGameTick::TElapsed delta)
bool TimerManager<TimerGameTick>::Elapsed(TimerGameTick::TElapsed delta)
{
TimerGameTick::counter++;
for (auto timer : TimerManager<TimerGameTick>::GetTimers()) {
timer->Elapsed(delta);
}
return true;
}
#ifdef WITH_ASSERT

View File

@ -78,8 +78,9 @@ public:
* Call the Elapsed() method of all active timers.
*
* @param value The amount of time that has elapsed.
* @return True iff time has progressed.
*/
static void Elapsed(TElapsed value);
static bool Elapsed(TElapsed value);
private:
/**

View File

@ -49,7 +49,7 @@ void TimeoutTimer<TimerWindow>::Elapsed(TimerWindow::TElapsed delta)
}
template<>
void TimerManager<TimerWindow>::Elapsed(TimerWindow::TElapsed delta)
bool TimerManager<TimerWindow>::Elapsed(TimerWindow::TElapsed delta)
{
/* Make a temporary copy of the timers, as a timer's callback might add/remove other timers. */
auto timers = TimerManager<TimerWindow>::GetTimers();
@ -57,6 +57,8 @@ void TimerManager<TimerWindow>::Elapsed(TimerWindow::TElapsed delta)
for (auto timer : timers) {
timer->Elapsed(delta);
}
return true;
}
#ifdef WITH_ASSERT