diff options
author | truelight <truelight@openttd.org> | 2006-08-26 20:09:25 +0000 |
---|---|---|
committer | truelight <truelight@openttd.org> | 2006-08-26 20:09:25 +0000 |
commit | 96e9fd333bd912c660b129afd6105dd6b1f664fd (patch) | |
tree | be9bb22b74218db0aeaab95cdbe99ced12524a63 /vehicle.c | |
parent | b7fcce091eba6ab8603f7ae10d8952c26015baf7 (diff) | |
download | openttd-96e9fd333bd912c660b129afd6105dd6b1f664fd.tar.xz |
(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.
Diffstat (limited to 'vehicle.c')
-rw-r--r-- | vehicle.c | 29 |
1 files changed, 12 insertions, 17 deletions
@@ -528,26 +528,21 @@ uint CountVehiclesInChain(const Vehicle* v) 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) |