diff --git a/src/departures.cpp b/src/departures.cpp index efad95196a..b4a1be4352 100644 --- a/src/departures.cpp +++ b/src/departures.cpp @@ -299,10 +299,12 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorcurrent_order.IsAnyLoadingType() || v->current_order.IsType(OT_WAITING)) { /* Account for the vehicle having reached the current order and being in the loading phase. */ status = D_ARRIVED; start_date -= order->GetTravelTime() + ((v->lateness_counter < 0) ? v->lateness_counter : 0); + require_travel_time = false; } /* Loop through the vehicle's orders until we've found a suitable order or we've determined that no such order exists. */ @@ -330,7 +332,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorGetTravelTime(); - + require_travel_time = false; continue; } case 2: { @@ -340,6 +342,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorGetWaitTime(); /* Added previously in VehicleSetNextDepartureTime */ order = (order->next == nullptr) ? v->GetFirstOrder() : order->next; + require_travel_time = true; continue; } } @@ -352,7 +355,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorGetTravelTime() == 0 && !order->IsTravelTimetabled() && !order->IsType(OT_IMPLICIT)) { + if (require_travel_time && order->GetTravelTime() == 0 && !order->IsTravelTimetabled() && !order->IsType(OT_IMPLICIT)) { break; } @@ -403,6 +406,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectornext == nullptr) ? v->GetFirstOrder() : order->next; + require_travel_time = true; } } } @@ -717,6 +721,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorv->GetNumOrders(); i > 0; --i) { /* If the order is a conditional branch, handle it. */ if (order->IsType(OT_CONDITIONAL)) { @@ -736,7 +741,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorexpected_date, &least_order->scheduled_waiting_time, date_only_scaled, least_order->v, order, false, schdispatch_last_planned_dispatch)) { least_order->lateness = 0; } - + require_travel_time = false; continue; } case 2: { @@ -746,6 +751,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorexpected_date, &least_order->scheduled_waiting_time, date_only_scaled, least_order->v, order, false, schdispatch_last_planned_dispatch)) { least_order->lateness = 0; } + require_travel_time = true; continue; } } @@ -753,7 +759,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorGetTravelTime() == 0 && !order->IsTravelTimetabled() && !order->IsType(OT_IMPLICIT)) { + if (require_travel_time && order->GetTravelTime() == 0 && !order->IsTravelTimetabled() && !order->IsType(OT_IMPLICIT)) { break; } @@ -775,6 +781,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vectorexpected_date, &least_order->scheduled_waiting_time, date_only_scaled, least_order->v, order, false, schdispatch_last_planned_dispatch)) { least_order->lateness = 0; } + require_travel_time = true; } /* If we didn't find a suitable order for being a departure, then we can ignore this vehicle from now on. */