1
0
Fork 0

(svn r11830) -Fix [FS#1625]: road vehicles would not wait in line, but at a single point on bridges. Based on a patch by SmatZ.

release/0.6
rubidium 2008-01-13 12:08:35 +00:00
parent 079abbd04b
commit cc52a56052
1 changed files with 7 additions and 4 deletions

View File

@ -895,6 +895,7 @@ static Vehicle* RoadVehFindCloseTo(Vehicle* v, int x, int y, Direction dir)
rvf.veh = v; rvf.veh = v;
if (front->u.road.state == RVSB_WORMHOLE) { if (front->u.road.state == RVSB_WORMHOLE) {
u = (Vehicle*)VehicleFromPos(v->tile, &rvf, EnumCheckRoadVehClose); u = (Vehicle*)VehicleFromPos(v->tile, &rvf, EnumCheckRoadVehClose);
if (u == NULL) u = (Vehicle*)VehicleFromPos(GetOtherTunnelBridgeEnd(v->tile), &rvf, EnumCheckRoadVehClose);
} else { } else {
u = (Vehicle*)VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose); u = (Vehicle*)VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose);
} }
@ -1511,11 +1512,13 @@ static bool IndividualRoadVehicleController(Vehicle *v, const Vehicle *prev)
/* Vehicle is entering a depot or is on a bridge or in a tunnel */ /* Vehicle is entering a depot or is on a bridge or in a tunnel */
GetNewVehiclePosResult gp = GetNewVehiclePos(v); GetNewVehiclePosResult gp = GetNewVehiclePos(v);
if (IsRoadVehFront(v)) {
const Vehicle *u = RoadVehFindCloseTo(v, gp.x, gp.y, v->direction); const Vehicle *u = RoadVehFindCloseTo(v, gp.x, gp.y, v->direction);
if (u != NULL && u->First()->cur_speed < v->cur_speed) { if (u != NULL) {
v->cur_speed = u->First()->cur_speed; v->cur_speed = u->First()->cur_speed;
return false; return false;
} }
}
if ((IsTunnelTile(gp.new_tile) || IsBridgeTile(gp.new_tile)) && HasBit(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) { if ((IsTunnelTile(gp.new_tile) || IsBridgeTile(gp.new_tile)) && HasBit(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
/* Vehicle has just entered a bridge or tunnel */ /* Vehicle has just entered a bridge or tunnel */