(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
authorrubidium
Sat, 22 Mar 2008 10:56:08 +0000
changeset 9212 3503ffa351b6
parent 9211 6ee04ee57ab5
child 9213 0fba721c4ee1
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
src/road_func.h
src/road_map.cpp
src/road_map.h
src/roadveh_cmd.cpp
--- a/src/road_func.h	Sat Mar 22 10:50:50 2008 +0000
+++ b/src/road_func.h	Sat Mar 22 10:56:08 2008 +0000
@@ -115,6 +115,20 @@
 }
 
 /**
+ * Create the road-part which belongs to the given Axis
+ *
+ * This function returns a RoadBits value which belongs to
+ * the given Axis.
+ *
+ * @param a The Axis
+ * @return The result RoadBits which the selected road-part set
+ */
+static inline RoadBits AxisToRoadBits(Axis a)
+{
+	return a == AXIS_X ? ROAD_X : ROAD_Y;
+}
+
+/**
  * Finds out, whether given player has all given RoadTypes available
  * @param PlayerID ID of player
  * @param rts RoadTypes to test
--- a/src/road_map.cpp	Sat Mar 22 10:50:50 2008 +0000
+++ b/src/road_map.cpp	Sat Mar 22 10:56:08 2008 +0000
@@ -14,7 +14,7 @@
 #include "tunnelbridge_map.h"
 
 
-RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt)
+RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt, bool straight_tunnel_bridge_entrance)
 {
 	if (!HasTileRoadType(tile, rt)) return ROAD_NONE;
 
@@ -34,7 +34,9 @@
 
 		case MP_TUNNELBRIDGE:
 			if (GetTunnelBridgeTransportType(tile) != TRANSPORT_ROAD) return ROAD_NONE;
-			return DiagDirToRoadBits(ReverseDiagDir(GetTunnelBridgeDirection(tile)));
+			return straight_tunnel_bridge_entrance ?
+					AxisToRoadBits(DiagDirToAxis(GetTunnelBridgeDirection(tile))) :
+					DiagDirToRoadBits(ReverseDiagDir(GetTunnelBridgeDirection(tile)));
 
 		default: return ROAD_NONE;
 	}
--- a/src/road_map.h	Sat Mar 22 10:50:50 2008 +0000
+++ b/src/road_map.h	Sat Mar 22 10:56:08 2008 +0000
@@ -328,11 +328,16 @@
  * - road tunnels: entrance is treated as road piece
  * - bridge ramps: start of the ramp is treated as road piece
  * - bridge middle parts: bridge itself is ignored
+ *
+ * If straight_tunnel_bridge_entrance is set a ROAD_X or ROAD_Y
+ * for bridge ramps and tunnel entrances is returned depending
+ * on the orientation of the tunnel or bridge.
  * @param tile the tile to get the road bits for
  * @param rt   the road type to get the road bits form
+ * @param stbe whether to return straight road bits for tunnels/bridges.
  * @return the road bits of the given tile
  */
-RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt);
+RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt, bool straight_tunnel_bridge_entrance = false);
 
 /**
  * Get the accessible track bits for the given tile.
--- a/src/roadveh_cmd.cpp	Sat Mar 22 10:50:50 2008 +0000
+++ b/src/roadveh_cmd.cpp	Sat Mar 22 10:56:08 2008 +0000
@@ -1461,7 +1461,7 @@
 	};
 	RoadBits required = required_roadbits[dir & 0x07];
 
-	if ((required & GetAnyRoadBits(tile, v->u.road.roadtype)) == ROAD_NONE) {
+	if ((required & GetAnyRoadBits(tile, v->u.road.roadtype, true)) == ROAD_NONE) {
 		dir = INVALID_TRACKDIR;
 	}
 
@@ -1698,7 +1698,7 @@
 		uint turn_around_start_frame = RVC_TURN_AROUND_START_FRAME;
 
 		RoadBits tram;
-		if (v->u.road.roadtype == ROADTYPE_TRAM && CountBits(tram = GetAnyRoadBits(v->tile, ROADTYPE_TRAM)) == 1) {
+		if (v->u.road.roadtype == ROADTYPE_TRAM && CountBits(tram = GetAnyRoadBits(v->tile, ROADTYPE_TRAM, true)) == 1) {
 			/*
 			 * The tram is turning around with one tram 'roadbit'. This means that
 			 * it is using the 'big' corner 'drive data'. However, to support the