Changeset - r8682:5100e8e08d0d
[Not reviewed]
master
0 1 0
smatz - 16 years ago 2008-03-07 00:47:42
smatz@openttd.org
(svn r12348) -Fix (r7573): NTP skipped junction just after bridge end
1 file changed with 15 insertions and 30 deletions:
0 comments (0 inline, 0 general)
src/pathfind.cpp
Show inline comments
 
@@ -611,37 +611,22 @@ start_at:
 
		/* If the tile is the entry tile of a tunnel, and we're not going out of the tunnel,
 
		 *   need to find the exit of the tunnel. */
 
		if (IsTileType(tile, MP_TUNNELBRIDGE)) {
 
			if (IsTunnel(tile)) {
 
				if (GetTunnelBridgeDirection(tile) != ReverseDiagDir(direction)) {
 
					/* We are not just driving out of the tunnel */
 
					if (GetTunnelBridgeDirection(tile) != direction ||
 
							GetTunnelBridgeTransportType(tile) != tpf->tracktype) {
 
						/* We are not driving into the tunnel, or it is an invalid tunnel */
 
						continue;
 
					}
 
					if (!HasBit(tpf->railtypes, GetRailType(tile))) {
 
						bits = TRACK_BIT_NONE;
 
						break;
 
					}
 
			if (GetTunnelBridgeDirection(tile) != ReverseDiagDir(direction)) {
 
				/* We are not just driving out of the tunnel/bridge */
 
				if (GetTunnelBridgeDirection(tile) != direction ||
 
						GetTunnelBridgeTransportType(tile) != tpf->tracktype) {
 
					/* We are not driving into the tunnel/bridge, or it is an invalid tunnel/bridge */
 
					continue;
 
				}
 
				if (!HasBit(tpf->railtypes, GetRailType(tile))) {
 
					bits = TRACK_BIT_NONE;
 
					break;
 
				}
 

	
 
					TileIndex endtile = GetOtherTunnelEnd(tile);
 
					si.cur_length += DIAG_FACTOR * (GetTunnelBridgeLength(tile, endtile) + 1);
 
					tile = endtile;
 
					/* tile now points to the exit tile of the tunnel */
 
				}
 
			} else { // IsBridge(tile)
 
				TileIndex tile_end;
 
				if (GetTunnelBridgeDirection(tile) != ReverseDiagDir(direction)) {
 
					/* We are not just leaving the bridge */
 
					if (GetTunnelBridgeDirection(tile) != direction ||
 
							GetTunnelBridgeTransportType(tile) != tpf->tracktype) {
 
						/* Not entering the bridge or not compatible */
 
						continue;
 
					}
 
				}
 
				tile_end = GetOtherBridgeEnd(tile);
 
				si.cur_length += DIAG_FACTOR * (GetTunnelBridgeLength(tile, tile_end) + 1);
 
				tile = tile_end;
 
				TileIndex endtile = GetOtherTunnelBridgeEnd(tile);
 
				si.cur_length += DIAG_FACTOR * (GetTunnelBridgeLength(tile, endtile) + 1);
 
				tile = endtile;
 
				/* tile now points to the exit tile of the tunnel/bridge */
 
			}
 
		}
 

	
0 comments (0 inline, 0 general)