changeset 5856:7b0dbb928a46 draft

(svn r8430) -Fix Replace the rather obscure control flow for handling aircraft/ship/train orders by something remotly comprehensible (see r3584)
author tron <tron@openttd.org>
date Sat, 27 Jan 2007 16:45:16 +0000
parents ba456601f207
children 657ed34953e8
files src/aircraft_cmd.cpp src/ship_cmd.cpp src/train_cmd.cpp
diffstat 3 files changed, 73 insertions(+), 62 deletions(-) [+]
line wrap: on
line diff
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -1257,31 +1257,35 @@
 
 static void HandleAircraftLoading(Vehicle *v, int mode)
 {
-	if (v->current_order.type == OT_NOTHING) return;
-
-	if (v->current_order.type != OT_DUMMY) {
-		if (v->current_order.type != OT_LOADING) return;
-		if (mode != 0) return;
-		if (--v->load_unload_time_rem != 0) return;
+	switch (v->current_order.type) {
+		case OT_LOADING:
+			if (mode != 0) return;
+			if (--v->load_unload_time_rem != 0) return;
 
-		if (CanFillVehicle(v) && (v->current_order.flags & OF_FULL_LOAD ||
-				(_patches.gradual_loading && !HASBIT(v->load_status, LS_LOADING_FINISHED)))) {
-			SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_INC);
-			if (LoadUnloadVehicle(v, false)) {
-				InvalidateWindow(WC_AIRCRAFT_LIST, v->owner);
-				MarkAircraftDirty(v);
+			if (CanFillVehicle(v) && (
+						v->current_order.flags & OF_FULL_LOAD ||
+						(_patches.gradual_loading && !HASBIT(v->load_status, LS_LOADING_FINISHED))
+					)) {
+				SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_INC);
+				if (LoadUnloadVehicle(v, false)) {
+					InvalidateWindow(WC_AIRCRAFT_LIST, v->owner);
+					MarkAircraftDirty(v);
+				}
+				return;
 			}
-			return;
-		}
 
-		{
 			Order b = v->current_order;
 			v->current_order.type = OT_NOTHING;
 			v->current_order.flags = 0;
 			MarkAircraftDirty(v);
 			if (!(b.flags & OF_NON_STOP)) return;
-		}
+			break;
+
+		case OT_DUMMY: break;
+
+		default: return;
 	}
+
 	v->cur_order_index++;
 	InvalidateVehicleOrder(v);
 }
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -273,28 +273,31 @@
 
 static void HandleShipLoading(Vehicle *v)
 {
-	if (v->current_order.type == OT_NOTHING) return;
-
-	if (v->current_order.type != OT_DUMMY) {
-		if (v->current_order.type != OT_LOADING) return;
-		if (--v->load_unload_time_rem) return;
+	switch (v->current_order.type) {
+		case OT_LOADING:
+			if (--v->load_unload_time_rem) return;
 
-		if (CanFillVehicle(v) && (v->current_order.flags & OF_FULL_LOAD ||
-				(_patches.gradual_loading && !HASBIT(v->load_status, LS_LOADING_FINISHED)))) {
-			SET_EXPENSES_TYPE(EXPENSES_SHIP_INC);
-			if (LoadUnloadVehicle(v, false)) {
-				InvalidateWindow(WC_SHIPS_LIST, v->owner);
-				MarkShipDirty(v);
+			if (CanFillVehicle(v) && (
+						v->current_order.flags & OF_FULL_LOAD ||
+						(_patches.gradual_loading && !HASBIT(v->load_status, LS_LOADING_FINISHED))
+					)) {
+				SET_EXPENSES_TYPE(EXPENSES_SHIP_INC);
+				if (LoadUnloadVehicle(v, false)) {
+					InvalidateWindow(WC_SHIPS_LIST, v->owner);
+					MarkShipDirty(v);
+				}
+				return;
 			}
-			return;
-		}
-		PlayShipSound(v);
+			PlayShipSound(v);
 
-		{
 			Order b = v->current_order;
 			v->LeaveStation();
 			if (!(b.flags & OF_NON_STOP)) return;
-		}
+			break;
+
+		case OT_DUMMY: break;
+
+		default: return;
 	}
 
 	v->cur_order_index++;
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -2605,42 +2605,46 @@
 
 static void HandleTrainLoading(Vehicle *v, bool mode)
 {
-	if (v->current_order.type == OT_NOTHING) return;
-
-	if (v->current_order.type != OT_DUMMY) {
-		if (v->current_order.type != OT_LOADING) return;
-		if (mode) return;
-
-		// don't mark the train as lost if we're loading on the final station.
-		if (v->current_order.flags & OF_NON_STOP)
-			v->u.rail.days_since_order_progr = 0;
-
-		if (--v->load_unload_time_rem) return;
-
-		if (CanFillVehicle(v) && (v->current_order.flags & OF_FULL_LOAD ||
-				(_patches.gradual_loading && !HASBIT(v->load_status, LS_LOADING_FINISHED)))) {
-			v->u.rail.days_since_order_progr = 0; /* Prevent a train lost message for full loading trains */
-			SET_EXPENSES_TYPE(EXPENSES_TRAIN_INC);
-			if (LoadUnloadVehicle(v, false)) {
-				InvalidateWindow(WC_TRAINS_LIST, v->owner);
-				MarkTrainDirty(v);
-
-				// need to update acceleration and cached values since the goods on the train changed.
-				TrainCargoChanged(v);
-				UpdateTrainAcceleration(v);
+	switch (v->current_order.type) {
+		case OT_LOADING:
+			if (mode) return;
+
+			// don't mark the train as lost if we're loading on the final station.
+			if (v->current_order.flags & OF_NON_STOP) {
+				v->u.rail.days_since_order_progr = 0;
 			}
-			return;
-		}
-
-		TrainPlayLeaveStationSound(v);
-
-		{
+
+			if (--v->load_unload_time_rem) return;
+
+			if (CanFillVehicle(v) && (
+						v->current_order.flags & OF_FULL_LOAD ||
+						(_patches.gradual_loading && !HASBIT(v->load_status, LS_LOADING_FINISHED))
+					)) {
+				v->u.rail.days_since_order_progr = 0; /* Prevent a train lost message for full loading trains */
+				SET_EXPENSES_TYPE(EXPENSES_TRAIN_INC);
+				if (LoadUnloadVehicle(v, false)) {
+					InvalidateWindow(WC_TRAINS_LIST, v->owner);
+					MarkTrainDirty(v);
+
+					// need to update acceleration and cached values since the goods on the train changed.
+					TrainCargoChanged(v);
+					UpdateTrainAcceleration(v);
+				}
+				return;
+			}
+
+			TrainPlayLeaveStationSound(v);
+
 			Order b = v->current_order;
 			v->LeaveStation();
 
 			// If this was not the final order, don't remove it from the list.
 			if (!(b.flags & OF_NON_STOP)) return;
-		}
+			break;
+
+		case OT_DUMMY: break;
+
+		default: return;
 	}
 
 	v->u.rail.days_since_order_progr = 0;