diff options
author | rubidium <rubidium@openttd.org> | 2008-01-13 12:08:35 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-01-13 12:08:35 +0000 |
commit | 975f1b4825c2fc860f6250c26af3265808c09ed4 (patch) | |
tree | fd135659486f67578f5faac5cf4128b55155fce8 /src | |
parent | 0ca79e2fb86bc98288e179d045f70aa152eaf9f8 (diff) | |
download | openttd-975f1b4825c2fc860f6250c26af3265808c09ed4.tar.xz |
(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.
Diffstat (limited to 'src')
-rw-r--r-- | src/roadveh_cmd.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 0dd9d955c..8cb3cb67f 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -895,6 +895,7 @@ static Vehicle* RoadVehFindCloseTo(Vehicle* v, int x, int y, Direction dir) rvf.veh = v; if (front->u.road.state == RVSB_WORMHOLE) { u = (Vehicle*)VehicleFromPos(v->tile, &rvf, EnumCheckRoadVehClose); + if (u == NULL) u = (Vehicle*)VehicleFromPos(GetOtherTunnelBridgeEnd(v->tile), &rvf, EnumCheckRoadVehClose); } else { u = (Vehicle*)VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose); } @@ -1511,10 +1512,12 @@ static bool IndividualRoadVehicleController(Vehicle *v, const Vehicle *prev) /* Vehicle is entering a depot or is on a bridge or in a tunnel */ GetNewVehiclePosResult gp = GetNewVehiclePos(v); - const Vehicle *u = RoadVehFindCloseTo(v, gp.x, gp.y, v->direction); - if (u != NULL && u->First()->cur_speed < v->cur_speed) { - v->cur_speed = u->First()->cur_speed; - return false; + if (IsRoadVehFront(v)) { + const Vehicle *u = RoadVehFindCloseTo(v, gp.x, gp.y, v->direction); + if (u != NULL) { + v->cur_speed = u->First()->cur_speed; + return false; + } } if ((IsTunnelTile(gp.new_tile) || IsBridgeTile(gp.new_tile)) && HasBit(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) { |