changeset 9662:cf5657f9e445 draft

(svn r13734) -Fix: NewGRF rail continuation would always mark a tunnel on the same axis as connected, even when the tunnel faces the wrong direction.
author rubidium <rubidium@openttd.org>
date Sat, 19 Jul 2008 10:10:21 +0000
parents ee25a4bc8d39
children 927bd58346c1
files src/newgrf_station.cpp
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -25,6 +25,7 @@
 #include "player_func.h"
 #include "animated_tile_func.h"
 #include "functions.h"
+#include "tunnelbridge_map.h"
 
 #include "table/sprites.h"
 #include "table/strings.h"
@@ -294,11 +295,18 @@
 	uint i;
 
 	for (i = 0; i < lengthof(x_dir); i++, dir++, diagdir++) {
-		TrackBits trackbits = TrackStatusToTrackBits(GetTileTrackStatus(tile + TileOffsByDir(*dir), TRANSPORT_RAIL, 0));
+		TileIndex neighbour_tile = tile + TileOffsByDir(*dir);
+		TrackBits trackbits = TrackStatusToTrackBits(GetTileTrackStatus(neighbour_tile, TRANSPORT_RAIL, 0));
 		if (trackbits != TRACK_BIT_NONE) {
 			/* If there is any track on the tile, set the bit in the second byte */
 			SetBit(res, i + 8);
 
+			/* With tunnels and bridges the tile has tracks, but they are not necessarily connected
+			 * with the next tile because the ramp is not going in the right direction. */
+			if (IsTileType(neighbour_tile, MP_TUNNELBRIDGE) && GetTunnelBridgeDirection(neighbour_tile) != *diagdir) {
+				continue;
+			}
+
 			/* If any track reaches our exit direction, set the bit in the lower byte */
 			if (trackbits & DiagdirReachesTracks(*diagdir)) SetBit(res, i);
 		}