diff --git a/src/settings.cpp b/src/settings.cpp index 8037788f3e..a3d7d1b744 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1793,7 +1793,12 @@ static bool ImprovedBreakdownsSettingChanged(int32 p1) static bool DayLengthChanged(int32 p1) { + const DateTicksScaled old_scaled_date_ticks = _scaled_date_ticks; SetScaledTickVariables(); + + extern void AdjustAllSignalSpeedRestrictionTickValues(DateTicksScaled delta); + AdjustAllSignalSpeedRestrictionTickValues(_scaled_date_ticks - old_scaled_date_ticks); + MarkWholeScreenDirty(); return true; } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index aee4d70391..b5702dcd79 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -122,6 +122,13 @@ void ClearAllSignalSpeedRestrictions() _signal_speeds.clear(); } +void AdjustAllSignalSpeedRestrictionTickValues(DateTicksScaled delta) +{ + for (auto &it : _signal_speeds) { + it.second.time_stamp += delta; + } +} + /** Removes all speed restrictions which have passed their timeout from all signals */ void ClearOutOfDateSignalSpeedRestrictions() { diff --git a/src/vehicle.cpp b/src/vehicle.cpp index cd2d212f8d..67d9ac3681 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -4310,4 +4310,7 @@ void ShiftVehicleDates(int interval) for (Vehicle *v : Vehicle::Iterate()) { v->date_of_last_service += interval; } + + extern void AdjustAllSignalSpeedRestrictionTickValues(DateTicksScaled delta); + AdjustAllSignalSpeedRestrictionTickValues(interval * DAY_TICKS * _settings_game.economy.day_length_factor); }