changeset 16147:2c2d2a90fd54 draft

(svn r20843) -Fix [FS#2534] (r20506): Make sure (gradual) loading is properly terminated for consists with multiple cargo types. Don't stop loading if the timetabled wait is not over yet. (Steve-N)
author michi_cc <michi_cc@openttd.org>
date Sat, 25 Sep 2010 12:48:33 +0000
parents a71a87e852a7
children 8ab03dda5d20
files src/economy.cpp
diffstat 1 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -1158,7 +1158,7 @@
 	bool completely_emptied = true;
 	bool anything_unloaded = false;
 	bool anything_loaded   = false;
-	bool full_load_amount  = false;
+	uint32 full_load_amount = 0;
 	uint32 cargo_not_full  = 0;
 	uint32 cargo_full      = 0;
 
@@ -1280,7 +1280,13 @@
 				count = cargo_left[v->cargo_type];
 				cargo_left[v->cargo_type] -= cap;
 			}
-			if (count >= (uint)cap_left) full_load_amount = true;
+
+			/* Store whether the maximum possible load amount was loaded or not.*/
+			if (count >= (uint)cap_left) {
+				SetBit(full_load_amount, v->cargo_type);
+			} else {
+				ClrBit(full_load_amount, v->cargo_type);
+			}
 
 			if (v->cargo.Empty()) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
 
@@ -1342,8 +1348,12 @@
 
 			unloading_time = gradual_loading_wait_time[v->type];
 		}
-		/* We loaded less cargo than possible and it's not full load, stop loading. */
-		if (!anything_unloaded && !full_load_amount && !(v->current_order.GetLoadType() & OLFB_FULL_LOAD)) SetBit(u->vehicle_flags, VF_STOP_LOADING);
+		/* 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 && !(v->current_order.GetLoadType() & OLFB_FULL_LOAD) &&
+				(!_settings_game.order.timetabling || v->current_order_time >= (uint)max(v->current_order.wait_time - v->lateness_counter, 0))) {
+			SetBit(v->vehicle_flags, VF_STOP_LOADING);
+		}
 	} else {
 		bool finished_loading = true;
 		if (v->current_order.GetLoadType() & OLFB_FULL_LOAD) {