# HG changeset patch # User truelight # Date 1156622965 0 # Node ID 484c76b14294e9c74b4e1d8fb7800bd5d4c5528c # Parent 851d2a6028068962222aa937a0c9a6241322441d (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. diff -r 851d2a602806 -r 484c76b14294 vehicle.c --- 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) diff -r 851d2a602806 -r 484c76b14294 vehicle.h --- 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)