mirror of https://github.com/OpenTTD/OpenTTD
(svn r12390) -Fix [FS#1851]: trams failing to turn on bridge heads/tunnel entrances.
parent
5d747802f2
commit
f0538b4b62
|
@ -114,6 +114,20 @@ static inline RoadBits DiagDirToRoadBits(DiagDirection d)
|
||||||
return (RoadBits)(ROAD_NW << (3 ^ d));
|
return (RoadBits)(ROAD_NW << (3 ^ 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
|
* Finds out, whether given player has all given RoadTypes available
|
||||||
* @param PlayerID ID of player
|
* @param PlayerID ID of player
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include "tunnelbridge_map.h"
|
#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;
|
if (!HasTileRoadType(tile, rt)) return ROAD_NONE;
|
||||||
|
|
||||||
|
@ -34,7 +34,9 @@ RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt)
|
||||||
|
|
||||||
case MP_TUNNELBRIDGE:
|
case MP_TUNNELBRIDGE:
|
||||||
if (GetTunnelBridgeTransportType(tile) != TRANSPORT_ROAD) return ROAD_NONE;
|
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;
|
default: return ROAD_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -328,11 +328,16 @@ static inline DiagDirection GetRoadDepotDirection(TileIndex t)
|
||||||
* - road tunnels: entrance is treated as road piece
|
* - road tunnels: entrance is treated as road piece
|
||||||
* - bridge ramps: start of the ramp is treated as road piece
|
* - bridge ramps: start of the ramp is treated as road piece
|
||||||
* - bridge middle parts: bridge itself is ignored
|
* - 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 tile the tile to get the road bits for
|
||||||
* @param rt the road type to get the road bits form
|
* @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
|
* @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.
|
* Get the accessible track bits for the given tile.
|
||||||
|
|
|
@ -1461,7 +1461,7 @@ static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev,
|
||||||
};
|
};
|
||||||
RoadBits required = required_roadbits[dir & 0x07];
|
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;
|
dir = INVALID_TRACKDIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1698,7 +1698,7 @@ again:
|
||||||
uint turn_around_start_frame = RVC_TURN_AROUND_START_FRAME;
|
uint turn_around_start_frame = RVC_TURN_AROUND_START_FRAME;
|
||||||
|
|
||||||
RoadBits tram;
|
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
|
* The tram is turning around with one tram 'roadbit'. This means that
|
||||||
* it is using the 'big' corner 'drive data'. However, to support the
|
* it is using the 'big' corner 'drive data'. However, to support the
|
||||||
|
|
Loading…
Reference in New Issue