Scheduled dispatch: Fix double dispatch request when no timetable set
See: #141
This commit is contained in:
@@ -787,9 +787,10 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool just_started = false;
|
bool just_started = false;
|
||||||
|
bool set_scheduled_dispatch = false;
|
||||||
|
|
||||||
/* Start scheduled dispatch at first opportunity */
|
/* Start scheduled dispatch at first opportunity */
|
||||||
if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED) && HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH)) {
|
if (HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH)) {
|
||||||
if (IsVehicleAtFirstWaitingLocation(v) && travelling) {
|
if (IsVehicleAtFirstWaitingLocation(v) && travelling) {
|
||||||
/* Update scheduled information */
|
/* Update scheduled information */
|
||||||
v->orders.list->UpdateScheduledDispatch();
|
v->orders.list->UpdateScheduledDispatch();
|
||||||
@@ -800,6 +801,7 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
|
|||||||
SetBit(v->vehicle_flags, VF_TIMETABLE_STARTED);
|
SetBit(v->vehicle_flags, VF_TIMETABLE_STARTED);
|
||||||
v->lateness_counter = _scaled_date_ticks - slot + wait_offset;
|
v->lateness_counter = _scaled_date_ticks - slot + wait_offset;
|
||||||
v->orders.list->SetScheduledDispatchLastDispatch(slot - v->orders.list->GetScheduledDispatchStartTick());
|
v->orders.list->SetScheduledDispatchLastDispatch(slot - v->orders.list->GetScheduledDispatchStartTick());
|
||||||
|
set_scheduled_dispatch = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -955,28 +957,14 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
|
|||||||
* when this happens. */
|
* when this happens. */
|
||||||
if (timetabled == 0 && (travelling || v->lateness_counter >= 0)) return;
|
if (timetabled == 0 && (travelling || v->lateness_counter >= 0)) return;
|
||||||
|
|
||||||
if (HasBit(v->vehicle_flags, VF_TIMETABLE_SEPARATION) && HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) {
|
if (set_scheduled_dispatch) {
|
||||||
|
// do nothing
|
||||||
|
} else if (HasBit(v->vehicle_flags, VF_TIMETABLE_SEPARATION) && HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) {
|
||||||
v->current_order_time = time_taken;
|
v->current_order_time = time_taken;
|
||||||
v->current_loading_time = time_loading;
|
v->current_loading_time = time_loading;
|
||||||
UpdateSeparationOrder(v);
|
UpdateSeparationOrder(v);
|
||||||
v->current_order_time = 0;
|
v->current_order_time = 0;
|
||||||
v->current_loading_time = 0;
|
v->current_loading_time = 0;
|
||||||
} else if (HasBit(v->vehicle_flags, VF_SCHEDULED_DISPATCH) && HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) {
|
|
||||||
const bool is_first_waiting = IsVehicleAtFirstWaitingLocation(v);
|
|
||||||
if (is_first_waiting && travelling) {
|
|
||||||
/* Update scheduled information */
|
|
||||||
v->orders.list->UpdateScheduledDispatch();
|
|
||||||
const int wait_offset = real_timetable_order->GetTimetabledWait();
|
|
||||||
DateTicksScaled slot = GetScheduledDispatchTime(v, wait_offset);
|
|
||||||
if (slot > -1) {
|
|
||||||
v->lateness_counter = _scaled_date_ticks - slot + wait_offset;
|
|
||||||
v->orders.list->SetScheduledDispatchLastDispatch(slot - v->orders.list->GetScheduledDispatchStartTick());
|
|
||||||
} else {
|
|
||||||
v->lateness_counter -= (timetabled - time_taken);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
v->lateness_counter -= (timetabled - time_taken);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
v->lateness_counter -= (timetabled - time_taken);
|
v->lateness_counter -= (timetabled - time_taken);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user