(svn r9789) -Fix (r9770): vehicles didn't get unloaded when 'full load' was specified and the vehicle was already full when it entered.
authorrubidium
Sat, 05 May 2007 09:51:26 +0000
changeset 7071 80d45870637a
parent 7070 e12be4319af5
child 7072 973b998c5cfe
(svn r9789) -Fix (r9770): vehicles didn't get unloaded when 'full load' was specified and the vehicle was already full when it entered.
src/vehicle.cpp
--- a/src/vehicle.cpp	Fri May 04 22:45:37 2007 +0000
+++ b/src/vehicle.cpp	Sat May 05 09:51:26 2007 +0000
@@ -704,7 +704,6 @@
 static bool CanFillVehicle_FullLoadAny(Vehicle *v)
 {
 	uint32 full = 0, not_full = 0;
-	bool keep_loading = false;
 	const GoodsEntry *ge = GetStation(v->last_station_visited)->goods;
 
 	/* special handling of aircraft */
@@ -725,13 +724,13 @@
 		if (v->cargo_cap != 0) {
 			uint32 mask = 1 << v->cargo_type;
 
-			if (v->cargo_cap == v->cargo_count) {
+			if (!HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) && v->cargo_cap == v->cargo_count) {
 				full |= mask;
 			} else if (GB(ge[v->cargo_type].waiting_acceptance, 0, 12) > 0 ||
 					(HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) && (ge[v->cargo_type].waiting_acceptance & 0x8000))) {
 				/* If there is any cargo waiting, or this vehicle is still unloading
 				 * and the station accepts the cargo, don't leave the station. */
-				keep_loading = true;
+				return true;
 			} else {
 				not_full |= mask;
 			}
@@ -739,7 +738,7 @@
 	} while ((v = v->next) != NULL);
 
 	/* continue loading if there is a non full cargo type and no cargo type that is full */
-	return keep_loading || (not_full && (full & ~not_full) == 0);
+	return not_full && (full & ~not_full) == 0;
 }