Departure boards: Fix scheduled dispatch departure time when wait time set

This commit is contained in:
Jonathan G Rennison
2022-11-23 20:47:04 +00:00
parent 03a9912a2b
commit 73efbc7bdd

View File

@@ -95,7 +95,7 @@ static uint8 GetDepartureConditionalOrderMode(const Order *order, const Vehicle
return _settings_client.gui.departure_conditionals; return _settings_client.gui.departure_conditionals;
} }
static inline bool VehicleSetNextDepartureTime(DateTicks *previous_departure, uint *waiting_time, const DateTicksScaled date_only_scaled, const Vehicle *v, const Order *order, bool arrived_at_timing_point, schdispatch_cache_t &dept_schedule_last) static bool VehicleSetNextDepartureTime(DateTicks *previous_departure, uint *waiting_time, const DateTicksScaled date_only_scaled, const Vehicle *v, const Order *order, bool arrived_at_timing_point, schdispatch_cache_t &dept_schedule_last)
{ {
if (HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH)) { if (HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH)) {
auto is_current_implicit_order = [&v](const Order *o) -> bool { auto is_current_implicit_order = [&v](const Order *o) -> bool {
@@ -117,8 +117,9 @@ static inline bool VehicleSetNextDepartureTime(DateTicks *previous_departure, ui
DateTicksScaled earliest_departure = begin_time + ds.GetScheduledDispatchLastDispatch(); DateTicksScaled earliest_departure = begin_time + ds.GetScheduledDispatchLastDispatch();
/* Earliest possible departure according to vehicle current timetable */ /* Earliest possible departure according to vehicle current timetable */
if (earliest_departure + max_delay < date_only_scaled + *previous_departure + order->GetTravelTime()) { const uint32 ready_to_depart_time = date_only_scaled + *previous_departure + order->GetTravelTime() + order->GetTimetabledWait();
earliest_departure = date_only_scaled + *previous_departure + order->GetTravelTime() - max_delay - 1; if (earliest_departure + max_delay < ready_to_depart_time) {
earliest_departure = ready_to_depart_time - max_delay - 1;
/* -1 because this number is actually a moment before actual departure */ /* -1 because this number is actually a moment before actual departure */
} }
@@ -142,8 +143,8 @@ static inline bool VehicleSetNextDepartureTime(DateTicks *previous_departure, ui
} }
} }
*waiting_time = order->GetWaitTime() + actual_departure - date_only_scaled - *previous_departure - order->GetTravelTime(); *waiting_time = actual_departure - date_only_scaled - *previous_departure - order->GetTravelTime();
*previous_departure = actual_departure - date_only_scaled + order->GetWaitTime(); *previous_departure = actual_departure - date_only_scaled;
slot_cache.insert(actual_departure); slot_cache.insert(actual_departure);
/* Return true means that vehicle lateness should be clear from this point onward */ /* Return true means that vehicle lateness should be clear from this point onward */