(svn r6157) -Codechange: DeleteVehicle removes a vehicle from the pool
authortruelight
Sat, 26 Aug 2006 20:09:25 +0000
changeset 4404 b58b0af53da3
parent 4403 3f503ac2d0f9
child 4405 07dead19636c
(svn r6157) -Codechange: DeleteVehicle removes a vehicle from the pool
-Codechange: DestroyVehicle is called by DeleteVehicle to remove all things where a vehicle depends on.
Last 2 changes to prepare for new pool system. Not pretty now, will be soon.
vehicle.c
vehicle.h
--- a/vehicle.c	Sat Aug 26 19:51:49 2006 +0000
+++ b/vehicle.c	Sat Aug 26 20:09:25 2006 +0000
@@ -528,26 +528,21 @@
 	return count;
 }
 
-void DeleteVehicle(Vehicle *v)
+void DestroyVehicle(Vehicle *v)
 {
-	Vehicle *u;
-	bool has_artic_part = false;
-
 	DeleteVehicleNews(v->index, INVALID_STRING_ID);
 
-	do {
-		u = v->next;
-		has_artic_part = EngineHasArticPart(v);
-		DeleteName(v->string_id);
-		if (v->type == VEH_Road) ClearSlot(v);
-		v->type = 0;
-		UpdateVehiclePosHash(v, INVALID_COORD, 0);
-		v->next_hash = INVALID_VEHICLE;
-
-		if (v->orders != NULL)
-			DeleteVehicleOrders(v);
-		v = u;
-	} while (v != NULL && has_artic_part);
+	DeleteName(v->string_id);
+	if (v->type == VEH_Road) ClearSlot(v);
+
+	UpdateVehiclePosHash(v, INVALID_COORD, 0);
+	v->next_hash = INVALID_VEHICLE;
+	if (v->orders != NULL) DeleteVehicleOrders(v);
+
+	/* Now remove any artic part. This will trigger an other
+	 *  destroy vehicle, which on his turn can remove any
+	 *  other artic parts. */
+	if (EngineHasArticPart(v)) DeleteVehicle(v->next);
 }
 
 void DeleteVehicleChain(Vehicle *v)
--- a/vehicle.h	Sat Aug 26 19:51:49 2006 +0000
+++ b/vehicle.h	Sat Aug 26 20:09:25 2006 +0000
@@ -255,7 +255,6 @@
 Vehicle *GetPrevVehicleInChain(const Vehicle *v);
 Vehicle *GetFirstVehicleInChain(const Vehicle *v);
 uint CountVehiclesInChain(const Vehicle* v);
-void DeleteVehicle(Vehicle *v);
 void DeleteVehicleChain(Vehicle *v);
 void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
 void CallVehicleTicks(void);
@@ -377,6 +376,14 @@
 	return v->type != 0;
 }
 
+void DestroyVehicle(Vehicle *v);
+
+static inline void DeleteVehicle(Vehicle *v)
+{
+	DestroyVehicle(v);
+	v->type = 0;
+}
+
 #define FOR_ALL_VEHICLES_FROM(v, start) for (v = GetVehicle(start); v != NULL; v = (v->index + 1 < GetVehiclePoolSize()) ? GetVehicle(v->index + 1) : NULL) if (IsValidVehicle(v))
 #define FOR_ALL_VEHICLES(v) FOR_ALL_VEHICLES_FROM(v, 0)