yapf/follow_track.hpp
branchcustombridgeheads
changeset 5627 f5c656cf0a0e
parent 5623 ef2a8a524a95
--- 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;
-				}
 			}
 		}