summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortron <tron@openttd.org>2007-01-27 16:45:16 +0000
committertron <tron@openttd.org>2007-01-27 16:45:16 +0000
commit430e64c8483cfedc9042fcb1b0b28a098fa57333 (patch)
treeb5470e475855d90fb8a567db1465f3b37fded17a /src
parent08c21c0c61be2e6e19517559288f3f40b77c0f0f (diff)
downloadopenttd-430e64c8483cfedc9042fcb1b0b28a098fa57333.tar.xz
(svn r8430) -Fix
Replace the rather obscure control flow for handling aircraft/ship/train orders by something remotly comprehensible (see r3584)
Diffstat (limited to 'src')
-rw-r--r--src/aircraft_cmd.cpp38
-rw-r--r--src/ship_cmd.cpp37
-rw-r--r--src/train_cmd.cpp56
3 files changed, 71 insertions, 60 deletions
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index 35902a2e6..91b2a3177 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -1257,31 +1257,35 @@ static void MarkAircraftDirty(Vehicle *v)
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;
-
- 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);
+ 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);
+ }
+ 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);
}
diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp
index aa4d77656..50f92f600 100644
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -273,28 +273,31 @@ static void ProcessShipOrder(Vehicle *v)
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;
-
- 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);
+ 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);
+ }
+ 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++;
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index e4f67cb4f..4378a3d75 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -2605,42 +2605,46 @@ static void MarkTrainDirty(Vehicle *v)
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;
+ switch (v->current_order.type) {
+ case OT_LOADING:
+ if (mode) 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);
+ // 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;
+ }
- // need to update acceleration and cached values since the goods on the train changed.
- TrainCargoChanged(v);
- UpdateTrainAcceleration(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;
}
- return;
- }
- TrainPlayLeaveStationSound(v);
+ 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;