* Lift the reservation of a specific track on a tile * @param tile the tile * @param t the track */
| 142 | * @param t the track |
| 143 | */ |
| 144 | void UnreserveRailTrack(TileIndex tile, Track t) |
| 145 | { |
| 146 | assert(HasTrack(TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0)), t)); |
| 147 | |
| 148 | if (_settings_client.gui.show_track_reservation) { |
| 149 | if (IsBridgeTile(tile)) { |
| 150 | MarkBridgeDirty(tile); |
| 151 | } else { |
| 152 | MarkTileDirtyByTile(tile); |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | switch (GetTileType(tile)) { |
| 157 | case MP_RAILWAY: |
| 158 | if (IsRailDepot(tile)) { |
| 159 | SetDepotReservation(tile, false); |
| 160 | MarkTileDirtyByTile(tile); |
| 161 | break; |
| 162 | } |
| 163 | if (IsPlainRail(tile)) UnreserveTrack(tile, t); |
| 164 | break; |
| 165 | |
| 166 | case MP_ROAD: |
| 167 | if (IsLevelCrossing(tile)) { |
| 168 | SetCrossingReservation(tile, false); |
| 169 | UpdateLevelCrossing(tile); |
| 170 | } |
| 171 | break; |
| 172 | |
| 173 | case MP_STATION: |
| 174 | if (HasStationRail(tile)) { |
| 175 | SetRailStationReservation(tile, false); |
| 176 | MarkTileDirtyByTile(tile); |
| 177 | } |
| 178 | break; |
| 179 | |
| 180 | case MP_TUNNELBRIDGE: |
| 181 | if (GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL) SetTunnelBridgeReservation(tile, false); |
| 182 | break; |
| 183 | |
| 184 | default: |
| 185 | break; |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | |
| 190 | /** Follow a reservation starting from a specific tile to the end. */ |
no test coverage detected