yapf/follow_track.hpp
branchcustombridgeheads
changeset 5616 0570ae953222
parent 5604 729d54e97b94
child 5621 6ce400c0a2f4
--- a/yapf/follow_track.hpp	Sun Dec 31 18:03:21 2006 +0000
+++ b/yapf/follow_track.hpp	Sun Dec 31 21:13:40 2006 +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;
 			}
 		}