diff options
author | rubidium <rubidium@openttd.org> | 2007-05-07 16:21:34 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-05-07 16:21:34 +0000 |
commit | 2efecd34c4237bb52981c92241a7b76c46896c4c (patch) | |
tree | 7d799b24ea0e76722a37e235c563ee818db1da54 | |
parent | 161786e2222b67a48624e82bc9c3aabbc86e51e9 (diff) | |
download | openttd-2efecd34c4237bb52981c92241a7b76c46896c4c.tar.xz |
(svn r9808) -Codechange: unify the Handle<VehicleType>Loading functions.
-rw-r--r-- | src/aircraft_cmd.cpp | 28 | ||||
-rw-r--r-- | src/roadveh_cmd.cpp | 27 | ||||
-rw-r--r-- | src/ship_cmd.cpp | 27 | ||||
-rw-r--r-- | src/train_cmd.cpp | 31 | ||||
-rw-r--r-- | src/vehicle.cpp | 34 | ||||
-rw-r--r-- | src/vehicle.h | 7 |
6 files changed, 45 insertions, 109 deletions
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 3dfca75bb..546022d83 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1416,32 +1416,6 @@ void Aircraft::MarkDirty() MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1); } -static void HandleAircraftLoading(Vehicle *v, int mode) -{ - switch (v->current_order.type) { - case OT_LOADING: { - if (mode != 0) return; - if (--v->load_unload_time_rem != 0) return; - - if (LoadUnloadVehicle(v)) return; - - Order b = v->current_order; - v->LeaveStation(); - v->current_order.Free(); - v->MarkDirty(); - if (!(b.flags & OF_NON_STOP)) return; - break; - } - - case OT_DUMMY: break; - - default: return; - } - - v->cur_order_index++; - InvalidateVehicleOrder(v); -} - static void CrashAirplane(Vehicle *v) { v->vehstatus |= VS_CRASHED; @@ -2130,7 +2104,7 @@ static void AircraftEventHandler(Vehicle *v, int loop) HandleAircraftSmoke(v); ProcessAircraftOrder(v); - HandleAircraftLoading(v, loop); + v->HandleLoading(loop != 0); if (v->current_order.type >= OT_LOADING) return; diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 390a14d30..d87688600 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -753,31 +753,6 @@ static void ProcessRoadVehOrder(Vehicle *v) InvalidateVehicleOrder(v); } -static void HandleRoadVehLoading(Vehicle *v) -{ - switch (v->current_order.type) { - case OT_LOADING: { - Order b; - - if (--v->load_unload_time_rem != 0) return; - - if (LoadUnloadVehicle(v)) return; - - b = v->current_order; - v->LeaveStation(); - if (!(b.flags & OF_NON_STOP)) return; - break; - } - - case OT_DUMMY: break; - - default: return; - } - - v->cur_order_index++; - InvalidateVehicleOrder(v); -} - static void StartRoadVehSound(const Vehicle* v) { if (!PlayVehicleSound(v, VSE_START)) { @@ -1304,7 +1279,7 @@ static void RoadVehController(Vehicle *v) if (v->vehstatus & VS_STOPPED) return; ProcessRoadVehOrder(v); - HandleRoadVehLoading(v); + v->HandleLoading(); if (v->current_order.type == OT_LOADING) return; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index aeda55d0d..41ee5260c 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -305,31 +305,6 @@ static void ProcessShipOrder(Vehicle *v) InvalidateWindowClasses(WC_SHIPS_LIST); } -static void HandleShipLoading(Vehicle *v) -{ - switch (v->current_order.type) { - case OT_LOADING: { - if (--v->load_unload_time_rem != 0) return; - - if (LoadUnloadVehicle(v)) return; - - v->PlayLeaveStationSound(); - - 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++; - InvalidateVehicleOrder(v); -} - void Ship::UpdateDeltaXY(Direction direction) { #define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0) @@ -681,7 +656,7 @@ static void ShipController(Vehicle *v) if (v->vehstatus & VS_STOPPED) return; ProcessShipOrder(v); - HandleShipLoading(v); + v->HandleLoading(); if (v->current_order.type == OT_LOADING) return; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index a28f862a6..7ed30d147 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2526,35 +2526,6 @@ void Train::MarkDirty() UpdateTrainAcceleration(this); } -static void HandleTrainLoading(Vehicle *v, bool mode) -{ - switch (v->current_order.type) { - case OT_LOADING: { - if (mode) return; - - if (--v->load_unload_time_rem) return; - - if (LoadUnloadVehicle(v)) return; - - v->PlayLeaveStationSound(); - - 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->cur_order_index++; - InvalidateVehicleOrder(v); -} - static int UpdateTrainSpeed(Vehicle *v) { uint accel; @@ -3333,7 +3304,7 @@ static void TrainLocoHandler(Vehicle *v, bool mode) return; } - HandleTrainLoading(v, mode); + v->HandleLoading(mode); if (v->current_order.type == OT_LOADING) return; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 745ca776a..89757e7e7 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2929,6 +2929,40 @@ void Vehicle::LeaveStation() } +void Vehicle::HandleLoading(bool mode) +{ + switch (this->current_order.type) { + case OT_LOADING: { + /* Not the first call for this tick */ + if (mode) return; + + /* We have not waited enough time till the next round of loading/unloading */ + if (--this->load_unload_time_rem) return; + + /* Load/unload the vehicle; when it actually did something + * we do not leave the station. */ + if (LoadUnloadVehicle(this)) return; + + this->PlayLeaveStationSound(); + + Order b = this->current_order; + this->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; + } + + this->cur_order_index++; + InvalidateVehicleOrder(this); +} + + void SpecialVehicle::UpdateDeltaXY(Direction direction) { this->x_offs = 0; diff --git a/src/vehicle.h b/src/vehicle.h index 37bff24ca..6fe8f5521 100644 --- a/src/vehicle.h +++ b/src/vehicle.h @@ -317,6 +317,13 @@ struct Vehicle { void LeaveStation(); /** + * Handle the loading of the vehicle; when not it skips through dummy + * orders and does nothing in all other cases. + * @param mode is the non-first call for this vehicle in this tick? + */ + void HandleLoading(bool mode = false); + + /** * An overriden version of new, so you can use the vehicle instance * instead of a newly allocated piece of memory. * @param size the size of the variable (unused) |