Fix day length changes with scheduled dispatch and timetable start times
When time is in minutes See: #472
This commit is contained in:
@@ -1709,11 +1709,26 @@ static void ImprovedBreakdownsSettingChanged(int32 new_value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8 _pre_change_day_length_factor;
|
||||||
|
|
||||||
|
static bool DayLengthPreChange(int32 &new_value)
|
||||||
|
{
|
||||||
|
_pre_change_day_length_factor = _settings_game.economy.day_length_factor;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static void DayLengthChanged(int32 new_value)
|
static void DayLengthChanged(int32 new_value)
|
||||||
{
|
{
|
||||||
|
DateTicksScaled old_scaled_date_ticks = _scaled_date_ticks;
|
||||||
|
DateTicksScaled old_scaled_date_ticks_offset = _scaled_date_ticks_offset;
|
||||||
|
|
||||||
extern void RebaseScaledDateTicksBase();
|
extern void RebaseScaledDateTicksBase();
|
||||||
RebaseScaledDateTicksBase();
|
RebaseScaledDateTicksBase();
|
||||||
|
|
||||||
|
extern void VehicleDayLengthChanged(DateTicksScaled old_scaled_date_ticks, DateTicksScaled old_scaled_date_ticks_offset, uint8 old_day_length_factor);
|
||||||
|
VehicleDayLengthChanged(old_scaled_date_ticks, old_scaled_date_ticks_offset, _pre_change_day_length_factor);
|
||||||
|
|
||||||
MarkWholeScreenDirty();
|
MarkWholeScreenDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -52,6 +52,7 @@ static void SpriteZoomMinChanged(int32 new_value);
|
|||||||
static void MaxVehiclesChanged(int32 new_value);
|
static void MaxVehiclesChanged(int32 new_value);
|
||||||
static void InvalidateShipPathCache(int32 new_value);
|
static void InvalidateShipPathCache(int32 new_value);
|
||||||
static void ImprovedBreakdownsSettingChanged(int32 new_value);
|
static void ImprovedBreakdownsSettingChanged(int32 new_value);
|
||||||
|
static bool DayLengthPreChange(int32 &new_value);
|
||||||
static void DayLengthChanged(int32 new_value);
|
static void DayLengthChanged(int32 new_value);
|
||||||
static void EnableSingleVehSharedOrderGuiChanged(int32 new_value);
|
static void EnableSingleVehSharedOrderGuiChanged(int32 new_value);
|
||||||
static void CheckYapfRailSignalPenalties(int32 new_value);
|
static void CheckYapfRailSignalPenalties(int32 new_value);
|
||||||
@@ -2224,6 +2225,7 @@ max = 125
|
|||||||
str = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR
|
str = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR
|
||||||
strhelp = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR_HELPTEXT
|
||||||
strval = STR_JUST_COMMA
|
strval = STR_JUST_COMMA
|
||||||
|
pre_cb = DayLengthPreChange
|
||||||
post_cb = DayLengthChanged
|
post_cb = DayLengthChanged
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)
|
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH)
|
||||||
|
@@ -4576,6 +4576,33 @@ void ShiftVehicleDates(int interval)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void VehicleDayLengthChanged(DateTicksScaled old_scaled_date_ticks, DateTicksScaled old_scaled_date_ticks_offset, uint8 old_day_length_factor)
|
||||||
|
{
|
||||||
|
if (_settings_game.economy.day_length_factor == old_day_length_factor || !_settings_game.game_time.time_in_minutes) return;
|
||||||
|
|
||||||
|
for (Vehicle *v : Vehicle::Iterate()) {
|
||||||
|
if (v->timetable_start != 0) {
|
||||||
|
DateTicksScaled tt_start = ((int64)v->timetable_start * old_day_length_factor) + v->timetable_start_subticks + old_scaled_date_ticks_offset;
|
||||||
|
tt_start += (_scaled_date_ticks - old_scaled_date_ticks);
|
||||||
|
std::tie(v->timetable_start, v->timetable_start_subticks) = ScaledDateTicksToDateTicksAndSubTicks(tt_start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (OrderList *orderlist : OrderList::Iterate()) {
|
||||||
|
for (DispatchSchedule &ds : orderlist->GetScheduledDispatchScheduleSet()) {
|
||||||
|
if (ds.GetScheduledDispatchStartDatePart() >= 0) {
|
||||||
|
DateTicksScaled start = ((int64)ds.GetScheduledDispatchStartDatePart() * DAY_TICKS * old_day_length_factor) +
|
||||||
|
ds.GetScheduledDispatchStartDateFractPart() + old_scaled_date_ticks_offset;
|
||||||
|
start += (_scaled_date_ticks - old_scaled_date_ticks);
|
||||||
|
Date date;
|
||||||
|
uint16 full_date_fract;
|
||||||
|
std::tie(date, full_date_fract) = ScaledDateTicksToDateAndFullSubTicks(start);
|
||||||
|
ds.SetScheduledDispatchStartDate(date, full_date_fract);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the maximum weight of the ground vehicle when loaded.
|
* Calculates the maximum weight of the ground vehicle when loaded.
|
||||||
* @return Weight in tonnes
|
* @return Weight in tonnes
|
||||||
|
Reference in New Issue
Block a user