* Finds which Electrified Rail Bits are present on a given tile. * @param t tile to check * @param override pointer to PCP override, can be nullptr * @return trackbits of tile if it is electrified */
| 84 | * @return trackbits of tile if it is electrified |
| 85 | */ |
| 86 | static TrackBits GetRailTrackBitsUniversal(TileIndex t, DiagDirections *override) |
| 87 | { |
| 88 | switch (GetTileType(t)) { |
| 89 | case MP_RAILWAY: |
| 90 | if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; |
| 91 | switch (GetRailTileType(t)) { |
| 92 | case RailTileType::Normal: case RailTileType::Signals: |
| 93 | return GetTrackBits(t); |
| 94 | default: |
| 95 | return TRACK_BIT_NONE; |
| 96 | } |
| 97 | break; |
| 98 | |
| 99 | case MP_TUNNELBRIDGE: |
| 100 | if (GetTunnelBridgeTransportType(t) != TRANSPORT_RAIL) return TRACK_BIT_NONE; |
| 101 | if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; |
| 102 | if (override != nullptr && (IsTunnel(t) || GetTunnelBridgeLength(t, GetOtherBridgeEnd(t)) > 0)) { |
| 103 | *override = GetTunnelBridgeDirection(t); |
| 104 | } |
| 105 | return DiagDirToDiagTrackBits(GetTunnelBridgeDirection(t)); |
| 106 | |
| 107 | case MP_ROAD: |
| 108 | if (!IsLevelCrossing(t)) return TRACK_BIT_NONE; |
| 109 | if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; |
| 110 | return GetCrossingRailBits(t); |
| 111 | |
| 112 | case MP_STATION: |
| 113 | if (!HasStationRail(t)) return TRACK_BIT_NONE; |
| 114 | if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; |
| 115 | return TrackToTrackBits(GetRailStationTrack(t)); |
| 116 | |
| 117 | default: |
| 118 | return TRACK_BIT_NONE; |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | /** |
| 123 | * Masks out track bits when neighbouring tiles are unelectrified. |
no test coverage detected