Fix mixed load if available and full load cargo-type load orders

pull/145/head
Jonathan G Rennison 4 years ago
parent 3f68c73b09
commit bbfe8f9d35

@ -2031,12 +2031,13 @@ static void LoadUnloadVehicle(Vehicle *front)
ClrBit(front->vehicle_flags, VF_STOP_LOADING);
bool has_full_load_order = front->current_order.GetLoadType() & OLFB_FULL_LOAD;
if (front->current_order.GetLoadType() == OLFB_CARGO_TYPE_LOAD) {
CargoTypes full_load_cargo_mask = 0;
if (front->current_order.GetLoadType() & OLFB_FULL_LOAD) {
full_load_cargo_mask = ALL_CARGOTYPES;
} else if (front->current_order.GetLoadType() == OLFB_CARGO_TYPE_LOAD) {
for (Vehicle *v = front; v != nullptr; v = v->Next()) {
if (front->current_order.GetCargoLoadTypeRaw(v->cargo_type) & OLFB_FULL_LOAD) {
has_full_load_order = true;
break;
SetBit(full_load_cargo_mask, v->cargo_type);
}
}
}
@ -2050,7 +2051,7 @@ static void LoadUnloadVehicle(Vehicle *front)
}
/* We loaded less cargo than possible for all cargo types and it's not full
* load and we're not supposed to wait any longer: stop loading. */
if (!anything_unloaded && full_load_amount == 0 && reservation_left == 0 && !has_full_load_order &&
if (!anything_unloaded && full_load_amount == 0 && reservation_left == 0 && full_load_cargo_mask == 0 &&
(front->current_order_time >= (uint)max<int>(front->current_order.GetTimetabledWait() - front->lateness_counter, 0) ||
front->current_order.GetLeaveType() == OLT_LEAVE_EARLY)) {
SetBit(front->vehicle_flags, VF_STOP_LOADING);
@ -2060,7 +2061,7 @@ static void LoadUnloadVehicle(Vehicle *front)
} else {
UpdateLoadUnloadTicks(front, st, 20, platform_length_left); // We need the ticks for link refreshing.
bool finished_loading = true;
if (has_full_load_order) {
if (full_load_cargo_mask != 0) {
const bool full_load_any_order = front->current_order.GetLoadType() == OLF_FULL_LOAD_ANY;
if (full_load_any_order) {
/* if the aircraft carries passengers and is NOT full, then
@ -2069,7 +2070,7 @@ static void LoadUnloadVehicle(Vehicle *front)
(cargo_not_full != 0 && ((cargo_full | beyond_platform_end_cargo_full) & ~cargo_not_full) == 0)) { // There are still non-full cargoes
finished_loading = false;
}
} else if (cargo_not_full != 0) {
} else if ((cargo_not_full & full_load_cargo_mask) != 0) {
finished_loading = false;
}
if (finished_loading && pull_through_mode) {

Loading…
Cancel
Save