summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-02-04 15:56:39 +0000
committersmatz <smatz@openttd.org>2008-02-04 15:56:39 +0000
commit04ef38ec606adadf726b449aacd617705fb1a29e (patch)
tree0adfa262156282acbe95d71f8e39ab54c7a65439
parent2a2aa1d22ae189213c253929415a732367863603 (diff)
downloadopenttd-04ef38ec606adadf726b449aacd617705fb1a29e.tar.xz
(svn r12057) -Fix: slowdown train when approaching 90deg turn when 90deg turns are forbidden
-rw-r--r--src/train_cmd.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 612f383b1..def649ccd 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -3462,9 +3462,15 @@ static bool TrainCheckIfLineEnds(Vehicle *v)
/* We are sure the train is not entering a depot, it is detected above */
+ /* mask unreachable track bits if we are forbidden to do 90deg turns */
+ TrackBits bits = (TrackBits)((ts | (ts >> 8)) & TRACK_BIT_MASK);
+ if ((_patches.new_pathfinding_all || _patches.yapf.rail_use_yapf) && _patches.forbid_90_deg) {
+ bits &= ~TrackCrossesTracks(FindFirstTrack(v->u.rail.track));
+ }
+
/* no suitable trackbits at all || wrong railtype || not our track ||
* tunnel/bridge from opposite side || depot from opposite side */
- if (GB(ts, 0, 16) == 0 || !CheckCompatibleRail(v, tile) || GetTileOwner(tile) != v->owner ||
+ if (bits == TRACK_BIT_NONE || !CheckCompatibleRail(v, tile) || GetTileOwner(tile) != v->owner ||
(IsTileType(tile, MP_TUNNELBRIDGE) && GetTunnelBridgeDirection(tile) != dir) ||
(IsTileDepotType(tile, TRANSPORT_RAIL) && GetRailDepotDirection(tile) == dir) ) {
return TrainApproachingLineEnd(v, false);