(svn r9808) -Codechange: unify the Handle<VehicleType>Loading functions.
authorrubidium
Mon, 07 May 2007 16:21:34 +0000
changeset 7090 8e4a4ac64b2d
parent 7089 7230d3e22a5f
child 7091 ebc570e995c4
(svn r9808) -Codechange: unify the Handle<VehicleType>Loading functions.
src/aircraft_cmd.cpp
src/roadveh_cmd.cpp
src/ship_cmd.cpp
src/train_cmd.cpp
src/vehicle.cpp
src/vehicle.h
--- a/src/aircraft_cmd.cpp	Mon May 07 15:58:05 2007 +0000
+++ b/src/aircraft_cmd.cpp	Mon May 07 16:21:34 2007 +0000
@@ -1416,32 +1416,6 @@
 		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 @@
 
 	HandleAircraftSmoke(v);
 	ProcessAircraftOrder(v);
-	HandleAircraftLoading(v, loop);
+	v->HandleLoading(loop != 0);
 
 	if (v->current_order.type >= OT_LOADING) return;
 
--- a/src/roadveh_cmd.cpp	Mon May 07 15:58:05 2007 +0000
+++ b/src/roadveh_cmd.cpp	Mon May 07 16:21:34 2007 +0000
@@ -753,31 +753,6 @@
 	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 @@
 	if (v->vehstatus & VS_STOPPED) return;
 
 	ProcessRoadVehOrder(v);
-	HandleRoadVehLoading(v);
+	v->HandleLoading();
 
 	if (v->current_order.type == OT_LOADING) return;
 
--- a/src/ship_cmd.cpp	Mon May 07 15:58:05 2007 +0000
+++ b/src/ship_cmd.cpp	Mon May 07 16:21:34 2007 +0000
@@ -305,31 +305,6 @@
 	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 @@
 	if (v->vehstatus & VS_STOPPED) return;
 
 	ProcessShipOrder(v);
-	HandleShipLoading(v);
+	v->HandleLoading();
 
 	if (v->current_order.type == OT_LOADING) return;
 
--- a/src/train_cmd.cpp	Mon May 07 15:58:05 2007 +0000
+++ b/src/train_cmd.cpp	Mon May 07 16:21:34 2007 +0000
@@ -2526,35 +2526,6 @@
 	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 @@
 		return;
 	}
 
-	HandleTrainLoading(v, mode);
+	v->HandleLoading(mode);
 
 	if (v->current_order.type == OT_LOADING) return;
 
--- a/src/vehicle.cpp	Mon May 07 15:58:05 2007 +0000
+++ b/src/vehicle.cpp	Mon May 07 16:21:34 2007 +0000
@@ -2929,6 +2929,40 @@
 }
 
 
+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;
--- a/src/vehicle.h	Mon May 07 15:58:05 2007 +0000
+++ b/src/vehicle.h	Mon May 07 16:21:34 2007 +0000
@@ -317,6 +317,13 @@
 	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)