diff options
Diffstat (limited to 'src/road_map.cpp')
-rw-r--r-- | src/road_map.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/road_map.cpp b/src/road_map.cpp index 98a893490..0c40d5d4a 100644 --- a/src/road_map.cpp +++ b/src/road_map.cpp @@ -14,13 +14,15 @@ #include "depot.h" -RoadBits GetAnyRoadBits(TileIndex tile) +RoadBits GetAnyRoadBits(TileIndex tile, RoadType rt) { + if (!HASBIT(GetRoadTypes(tile), rt)) return ROAD_NONE; + switch (GetTileType(tile)) { case MP_STREET: switch (GetRoadTileType(tile)) { default: - case ROAD_TILE_NORMAL: return GetRoadBits(tile); + case ROAD_TILE_NORMAL: return GetRoadBits(tile, rt); case ROAD_TILE_CROSSING: return GetCrossingRoadBits(tile); case ROAD_TILE_DEPOT: return DiagDirToRoadBits(GetRoadDepotDirection(tile)); } @@ -44,15 +46,16 @@ RoadBits GetAnyRoadBits(TileIndex tile) } -TrackBits GetAnyRoadTrackBits(TileIndex tile) +TrackBits GetAnyRoadTrackBits(TileIndex tile, RoadType rt) { uint32 r; /* Don't allow local authorities to build roads through road depots or road stops. */ - if ((IsTileType(tile, MP_STREET) && IsTileDepotType(tile, TRANSPORT_ROAD)) || (IsTileType(tile, MP_STATION) && !IsDriveThroughStopTile(tile))) { + if ((IsTileType(tile, MP_STREET) && IsTileDepotType(tile, TRANSPORT_ROAD)) || (IsTileType(tile, MP_STATION) && !IsDriveThroughStopTile(tile)) || !HASBIT(GetRoadTypes(tile), rt)) { return TRACK_BIT_NONE; } r = GetTileTrackStatus(tile, TRANSPORT_ROAD); + return (TrackBits)(byte)(r | (r >> 8)); } |