mirror of https://github.com/OpenTTD/OpenTTD
(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.release/0.5
parent
b7fcce091e
commit
96e9fd333b
27
vehicle.c
27
vehicle.c
|
@ -528,26 +528,21 @@ uint CountVehiclesInChain(const Vehicle* v)
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeleteVehicle(Vehicle *v)
|
void DestroyVehicle(Vehicle *v)
|
||||||
{
|
{
|
||||||
Vehicle *u;
|
|
||||||
bool has_artic_part = false;
|
|
||||||
|
|
||||||
DeleteVehicleNews(v->index, INVALID_STRING_ID);
|
DeleteVehicleNews(v->index, INVALID_STRING_ID);
|
||||||
|
|
||||||
do {
|
DeleteName(v->string_id);
|
||||||
u = v->next;
|
if (v->type == VEH_Road) ClearSlot(v);
|
||||||
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)
|
UpdateVehiclePosHash(v, INVALID_COORD, 0);
|
||||||
DeleteVehicleOrders(v);
|
v->next_hash = INVALID_VEHICLE;
|
||||||
v = u;
|
if (v->orders != NULL) DeleteVehicleOrders(v);
|
||||||
} while (v != NULL && has_artic_part);
|
|
||||||
|
/* 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)
|
void DeleteVehicleChain(Vehicle *v)
|
||||||
|
|
|
@ -255,7 +255,6 @@ Vehicle *GetLastVehicleInChain(Vehicle *v);
|
||||||
Vehicle *GetPrevVehicleInChain(const Vehicle *v);
|
Vehicle *GetPrevVehicleInChain(const Vehicle *v);
|
||||||
Vehicle *GetFirstVehicleInChain(const Vehicle *v);
|
Vehicle *GetFirstVehicleInChain(const Vehicle *v);
|
||||||
uint CountVehiclesInChain(const Vehicle* v);
|
uint CountVehiclesInChain(const Vehicle* v);
|
||||||
void DeleteVehicle(Vehicle *v);
|
|
||||||
void DeleteVehicleChain(Vehicle *v);
|
void DeleteVehicleChain(Vehicle *v);
|
||||||
void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
|
void *VehicleFromPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
|
||||||
void CallVehicleTicks(void);
|
void CallVehicleTicks(void);
|
||||||
|
@ -377,6 +376,14 @@ static inline bool IsValidVehicle(const Vehicle *v)
|
||||||
return v->type != 0;
|
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_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)
|
#define FOR_ALL_VEHICLES(v) FOR_ALL_VEHICLES_FROM(v, 0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue