tron@3146: /* $Id$ */ tron@3146: tron@3146: #include "stdafx.h" tron@3146: #include "openttd.h" tron@3196: #include "bridge_map.h" tron@3150: #include "functions.h" tron@3146: #include "road_map.h" tron@3146: #include "station.h" tron@3154: #include "tunnel_map.h" celestar@3404: #include "station_map.h" KUDr@3927: #include "depot.h" tron@3146: tron@3146: tron@3146: RoadBits GetAnyRoadBits(TileIndex tile) tron@3146: { tron@3146: switch (GetTileType(tile)) { tron@3146: case MP_STREET: rubidium@3793: switch (GetRoadTileType(tile)) { tron@3146: default: rubidium@3793: case ROAD_TILE_NORMAL: return GetRoadBits(tile); rubidium@3793: case ROAD_TILE_CROSSING: return GetCrossingRoadBits(tile); rubidium@3793: case ROAD_TILE_DEPOT: return DiagDirToRoadBits(GetRoadDepotDirection(tile)); tron@3146: } tron@3146: tron@3146: case MP_STATION: celestar@3404: if (!IsRoadStopTile(tile)) return 0; celestar@3404: return DiagDirToRoadBits(GetRoadStopDir(tile)); tron@3146: tron@3146: case MP_TUNNELBRIDGE: tron@3977: if (IsBridge(tile)) { tron@3977: if (IsBridgeMiddle(tile)) { tron@3977: if (!IsTransportUnderBridge(tile) || glx@4777: GetTransportTypeUnderBridge(tile) != TRANSPORT_ROAD) { tron@3977: return 0; tron@3977: } tron@3977: return GetRoadBitsUnderBridge(tile); tron@3977: } else { tron@3977: // ending tron@3977: if (GetBridgeTransportType(tile) != TRANSPORT_ROAD) return 0; tron@3977: return DiagDirToRoadBits(ReverseDiagDir(GetBridgeRampDirection(tile))); tron@3977: } tron@3977: } else { tron@3977: // tunnel tron@3154: if (GetTunnelTransportType(tile) != TRANSPORT_ROAD) return 0; tron@3154: return DiagDirToRoadBits(ReverseDiagDir(GetTunnelDirection(tile))); tron@3146: } tron@3146: tron@3146: default: return 0; tron@3146: } tron@3146: } tron@3150: tron@3150: tron@3150: TrackBits GetAnyRoadTrackBits(TileIndex tile) tron@3150: { peter1138@4233: uint32 r; peter1138@4233: KUDr@4615: // Don't allow local authorities to build roads through road depots or road stops. KUDr@4615: if ((IsTileType(tile, MP_STREET) && IsTileDepotType(tile, TRANSPORT_ROAD)) || IsTileType(tile, MP_STATION)) { peter1138@4233: return 0; KUDr@3927: } peter1138@4233: peter1138@4233: r = GetTileTrackStatus(tile, TRANSPORT_ROAD); peter1138@4233: return (byte)(r | (r >> 8)); tron@3150: }