diff options
author | tron <tron@openttd.org> | 2007-01-27 16:45:16 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2007-01-27 16:45:16 +0000 |
commit | 430e64c8483cfedc9042fcb1b0b28a098fa57333 (patch) | |
tree | b5470e475855d90fb8a567db1465f3b37fded17a /src | |
parent | 08c21c0c61be2e6e19517559288f3f40b77c0f0f (diff) | |
download | openttd-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.cpp | 38 | ||||
-rw-r--r-- | src/ship_cmd.cpp | 37 | ||||
-rw-r--r-- | src/train_cmd.cpp | 56 |
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; |