--- a/yapf/follow_track.hpp Mon Jan 01 19:44:02 2007 +0000
+++ b/yapf/follow_track.hpp Mon Jan 01 20:13:03 2007 +0000
@@ -29,6 +29,7 @@
m_exitdir = INVALID_DIAGDIR;
m_is_station = m_is_bridge = m_is_tunnel = false;
m_tiles_skipped = 0;
+ m_intermediate_trackdir = INVALID_TRACKDIR;
}
FORCEINLINE static TransportType TT() {return Ttr_type_;}
@@ -50,7 +51,7 @@
FollowTileExit();
if (!QueryNewTileTrackStatus()) return TryReverse();
m_new_td_bits &= DiagdirReachesTrackdirs(m_exitdir);
- if (!Allow90degTurns())
+ if (!Allow90degTurns() && m_tiles_skipped == 0)
m_new_td_bits &= (TrackdirBits)~(int)TrackdirCrossesTrackdirs(m_old_td);
if (m_new_td_bits == TRACKDIR_BIT_NONE) return false;
if (!CanEnterNewTile()) return false;
@@ -87,6 +88,7 @@
uint32 bridge_length = GetBridgeLength(m_old_tile, m_new_tile);
m_tiles_skipped = bridge_length;
m_is_bridge = true;
+ if (m_tiles_skipped > 0) m_intermediate_trackdir = DiagdirToDiagTrackdir(bridge_enterdir);
return;
}
}
@@ -185,11 +187,6 @@
DiagDirection tunnel_enterdir = GetTunnelDirection(m_new_tile);
if (tunnel_enterdir != m_exitdir) return false;
}
- } else if (IsBridgeTile(m_new_tile)) {
- if (!m_is_bridge) {
- DiagDirection ramp_enderdir = GetBridgeRampDirection(m_new_tile);
- if (ramp_enderdir != m_exitdir) return false;
- }
}
}