mirror of https://github.com/OpenTTD/OpenTTD
(svn r18428) -Fix: if lots of road vehicles are leaving a depot and the first in the hash linked list is basically the last of the vehicles to leave the depot then due to the 'jam prevention' code all vehicles would fairly quickly increase the blocked counter and drive off all simultaniously
parent
151ac000b0
commit
1e416f90fa
|
@ -680,7 +680,7 @@ static Vehicle *EnumCheckRoadVehClose(Vehicle *v, void *data)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static RoadVehicle *RoadVehFindCloseTo(RoadVehicle *v, int x, int y, Direction dir)
|
static RoadVehicle *RoadVehFindCloseTo(RoadVehicle *v, int x, int y, Direction dir, bool update_blocked_ctr = true)
|
||||||
{
|
{
|
||||||
RoadVehFindData rvf;
|
RoadVehFindData rvf;
|
||||||
RoadVehicle *front = v->First();
|
RoadVehicle *front = v->First();
|
||||||
|
@ -709,7 +709,7 @@ static RoadVehicle *RoadVehFindCloseTo(RoadVehicle *v, int x, int y, Direction d
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++front->blocked_ctr > 1480) return NULL;
|
if (update_blocked_ctr && ++front->blocked_ctr > 1480) return NULL;
|
||||||
|
|
||||||
return RoadVehicle::From(rvf.best);
|
return RoadVehicle::From(rvf.best);
|
||||||
}
|
}
|
||||||
|
@ -1047,7 +1047,7 @@ static bool RoadVehLeaveDepot(RoadVehicle *v, bool first)
|
||||||
int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
|
int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
|
||||||
|
|
||||||
if (first) {
|
if (first) {
|
||||||
if (RoadVehFindCloseTo(v, x, y, v->direction) != NULL) return true;
|
if (RoadVehFindCloseTo(v, x, y, v->direction, false) != NULL) return true;
|
||||||
|
|
||||||
VehicleServiceInDepot(v);
|
VehicleServiceInDepot(v);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue