diff options
author | rubidium <rubidium@openttd.org> | 2008-03-22 10:56:08 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-03-22 10:56:08 +0000 |
commit | edd384c12136a8f0446ea7645a48688257dbfd9b (patch) | |
tree | c70cc515d076c09e820b06aa4af1dbdb1fe37307 | |
parent | fedb33d69776943b00853e4c2769daf328ff708d (diff) | |
download | openttd-edd384c12136a8f0446ea7645a48688257dbfd9b.tar.xz |
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
-rw-r--r-- | src/road_func.h | 14 | ||||
-rw-r--r-- | src/road_map.cpp | 6 | ||||
-rw-r--r-- | src/road_map.h | 7 | ||||
-rw-r--r-- | src/roadveh_cmd.cpp | 4 |
4 files changed, 26 insertions, 5 deletions
diff --git a/src/road_func.h b/src/road_func.h index 3139ea022..46269f29d 100644 --- a/src/road_func.h +++ b/src/road_func.h @@ -115,6 +115,20 @@ static inline RoadBits DiagDirToRoadBits(DiagDirection d) } /** + * 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 diff --git a/src/road_map.cpp b/src/road_map.cpp index 2d236b504..a39fa5fc9 100644 --- a/src/road_map.cpp +++ b/src/road_map.cpp @@ -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 @@ RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt) 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; } diff --git a/src/road_map.h b/src/road_map.h index 35a3f9cf2..2f29a97be 100644 --- a/src/road_map.h +++ b/src/road_map.h @@ -328,11 +328,16 @@ static inline DiagDirection GetRoadDepotDirection(TileIndex t) * - 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. diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 0a9733209..d4cb02163 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1461,7 +1461,7 @@ static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev, }; 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 @@ again: 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 |