OpenTTD Source: src/pbs.cpp File Reference

OpenTTD Source 14.0-RC3

Data Structures | Functions
pbs.cpp File Reference
`#include "stdafx.h"`
`#include "viewport_func.h"`
`#include "vehicle_func.h"`
`#include "newgrf_station.h"`
`#include "pathfinder/follow_track.hpp"`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
struct | FindTrainOnTrackInfo
| Helper struct for finding the best matching vehicle on a specific track. More...

## Functions
TrackBits | GetReservedTrackbits (TileIndex t)
| Get the reserved trackbits for any tile, regardless of type. More...
void | SetRailStationPlatformReservation (TileIndex start, DiagDirection dir, bool b)
| Set the reservation for a complete station platform. More...
bool | TryReserveRailTrack (TileIndex tile, Track t, bool trigger_stations)
| Try to reserve a specific track on a tile. More...
void | UnreserveRailTrack (TileIndex tile, Track t)
| Lift the reservation of a specific track on a tile. More...
static PBSTileInfo | FollowReservation (Owner o, RailTypes rts, TileIndex tile, Trackdir trackdir, bool ignore_oneway=false)
| Follow a reservation starting from a specific tile to the end.
static Vehicle * | FindTrainOnTrackEnum (Vehicle *v, void *data)
| Callback for Has/FindVehicleOnPos to find a train on a specific track.
PBSTileInfo | FollowTrainReservation (const Train *v, Vehicle **train_on_res)
| Follow a train reservation to the last tile. More...
Train * | GetTrainForReservation (TileIndex tile, Track track)
| Find the train which has reserved a specific path. More...
bool | IsSafeWaitingPosition (const Train *v, TileIndex tile, Trackdir trackdir, bool include_line_end, bool forbid_90deg)
| Determine whether a certain track on a tile is a safe position to end a path. More...
bool | IsWaitingPositionFree (const Train *v, TileIndex tile, Trackdir trackdir, bool forbid_90deg)
| Check if a safe position is free. More...

## Detailed Description

PBS support routines

Definition in file pbs.cpp.

## Function Documentation

## ◆ FollowTrainReservation()

PBSTileInfo FollowTrainReservation | ( | const Train * | v,
|  | Vehicle ** | train_on_res
| ) |  |

Follow a train reservation to the last tile.

Parameters

  v | the vehicle
  train_on_res | Is set to a train we might encounter

Returns
  The last tile of the reservation or the current train tile if no reservation present.

Definition at line 288 of file pbs.cpp.

References _settings_game, FindTrainOnTrackInfo::best, RailTypeInfo::compatible_railtypes, FindTrainOnTrackEnum(), FindVehicleOnPos(), SpecializedVehicle< T, Type >::First(), FollowReservation(), PathfinderSettings::forbid_90_deg, GetDepotReservationTrackBits(), GetOtherTunnelBridgeEnd(), GetRailTypeInfo(), Train::GetVehicleTrackdir(), IsCompatibleTrainStationTile(), IsRailDepotTile(), IsRailStationTile(), IsSafeWaitingPosition(), IsTileType(), MP_TUNNELBRIDGE, PBSTileInfo::okay, Vehicle::owner, GameSettings::pf, FindTrainOnTrackInfo::res, ReverseTrackdir(), PBSTileInfo::tile, Vehicle::tile, TileOffsByDiagDir(), PBSTileInfo::trackdir, TrackdirToExitdir(), BaseVehicle::type, and VEH_TRAIN.

Referenced by ExtendTrainReservation(), FindClosestTrainDepot(), TryPathReserve(), and YapfTrainFindNearestDepot().

## ◆ GetReservedTrackbits()

TrackBits GetReservedTrackbits | ( | TileIndex | t | ) |

Get the reserved trackbits for any tile, regardless of type.

Parameters

  t | the tile

Returns
  the reserved trackbits. TRACK_BIT_NONE on nothing reserved or a tile without rail.

Definition at line 24 of file pbs.cpp.

References GetCrossingReservationTrackBits(), GetDepotReservationTrackBits(), GetRailReservationTrackBits(), GetStationReservationTrackBits(), GetTileType(), GetTunnelBridgeReservationTrackBits(), GetTunnelBridgeTransportType(), HasStationRail(), IsLevelCrossing(), IsPlainRail(), IsRailDepot(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, TRACK_BIT_NONE, and TRANSPORT_RAIL.

Referenced by CmdConvertRail(), FollowReservation(), HasReservedTracks(), and IsWaitingPositionFree().

## ◆ GetTrainForReservation()

Train* GetTrainForReservation | ( | TileIndex | tile,
|  | Track | track
| ) |  |

Find the train which has reserved a specific path.

Parameters

  tile | A tile on the path.
  track | A reserved track on the tile.

Returns
  The vehicle holding the reservation or nullptr if the path is stray.

Definition at line 330 of file pbs.cpp.

References FindTrainOnTrackInfo::best, RailTypeInfo::compatible_railtypes, FindTrainOnTrackEnum(), FindVehicleOnPos(), FollowReservation(), GetOtherTunnelBridgeEnd(), GetRailTypeInfo(), GetTileOwner(), GetTileRailType(), HasOnewaySignalBlockingTrackdir(), HasPbsSignalOnTrackdir(), HasReservedTracks(), IsCompatibleTrainStationTile(), IsRailStationTile(), IsTileType(), MP_TUNNELBRIDGE, FindTrainOnTrackInfo::res, ReverseTrackdir(), PBSTileInfo::tile, TileOffsByDiagDir(), PBSTileInfo::trackdir, TrackdirToExitdir(), TrackToTrackBits(), and TrackToTrackdir().

Referenced by CmdConvertRail().

## ◆ IsSafeWaitingPosition()

bool IsSafeWaitingPosition | ( | const Train * | v,
|  | TileIndex | tile,
|  | Trackdir | trackdir,
|  | bool | include_line_end,
|  | bool | forbid_90deg
| ) |  |

Determine whether a certain track on a tile is a safe position to end a path.

Parameters

  v | the vehicle to test for
  tile | The tile
  trackdir | The trackdir to test
  include_line_end | Should end-of-line tiles be considered safe?
  forbid_90deg | Don't allow trains to make 90 degree turns

Returns
  True if it is a safe position

Definition at line 380 of file pbs.cpp.

References HasSignalOnTrackdir(), IsRailDepotTile(), IsTileType(), and MP_RAILWAY.

Referenced by ExtendTrainReservation(), FindSafePosition(), FollowTrainReservation(), NPFFindSafeTile(), and CYapfDestinationAnySafeTileRailT< Types >::PfDetectDestination().

## ◆ IsWaitingPositionFree()

bool IsWaitingPositionFree | ( | const Train * | v,
|  | TileIndex | tile,
|  | Trackdir | trackdir,
|  | bool | forbid_90deg
| ) |  |

Check if a safe position is free.

Parameters

  v | the vehicle to test for
  tile | The tile
  trackdir | The trackdir to test
  forbid_90deg | Don't allow trains to make 90 degree turns

Returns
  True if the position is free

Definition at line 426 of file pbs.cpp.

References GetReservedTrackbits(), HasSignalOnTrackdir(), IsRailDepotTile(), IsTileType(), MP_RAILWAY, TrackdirToTrack(), and TrackOverlapsTracks().

Referenced by ExtendTrainReservation(), NPFFindSafeTile(), NPFSaveTargetData(), CYapfDestinationAnySafeTileRailT< Types >::PfDetectDestination(), and CYapfReserveTrack< Types >::TryReservePath().

## ◆ SetRailStationPlatformReservation()

void SetRailStationPlatformReservation | ( | TileIndex | start,
|  | DiagDirection | dir,
|  | bool | b
| ) |  |

Set the reservation for a complete station platform.

Precondition
  IsRailStationTile(start)

Parameters

  start | starting tile of the platform
  dir | the direction in which to follow the platform
  b | the state the reservation should be set to

Definition at line 57 of file pbs.cpp.

References DiagDirToAxis(), GetRailStationAxis(), IsCompatibleTrainStationTile(), IsRailStationTile(), MarkTileDirtyByTile(), SetRailStationReservation(), Vehicle::tile, TILE_ADD, and TileOffsByDiagDir().

Referenced by ClearPathReservation(), FreeTrainReservation(), NPFSaveTargetData(), and RestoreTrainReservation().

## ◆ TryReserveRailTrack()

bool TryReserveRailTrack | ( | TileIndex | tile,
|  | Track | t,
|  | bool | trigger_stations
| ) |  |

Try to reserve a specific track on a tile.

Parameters

  tile | the tile
  t | the track
  trigger_stations | whether to call station randomisation trigger

Returns
  `true` if reservation was successful, i.e. the track was free and didn't cross any other reserved tracks.

Definition at line 80 of file pbs.cpp.

References _settings_client, GetTileTrackStatus(), GetTileType(), GetTunnelBridgeReservationTrackBits(), GetTunnelBridgeTransportType(), ClientSettings::gui, HasCrossingReservation(), HasDepotReservation(), HasStationRail(), HasStationReservation(), HasTrack(), IsBridgeTile(), IsLevelCrossing(), IsPlainRail(), IsRailDepot(), IsRailStation(), MarkBridgeDirty(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, SetCrossingReservation(), SetDepotReservation(), SetRailStationReservation(), SetTunnelBridgeReservation(), GUISettings::show_track_reservation, SRT_PATH_RESERVATION, Vehicle::tile, TrackStatusToTrackBits(), TRANSPORT_RAIL, TriggerStationRandomisation(), TryReserveTrack(), and UpdateLevelCrossing().

Referenced by ExtendTrainReservation(), NPFSaveTargetData(), CYapfReserveTrack< Types >::ReserveSingleTrack(), and Train::ReserveTrackUnderConsist().

## ◆ UnreserveRailTrack()

void UnreserveRailTrack | ( | TileIndex | tile,
|  | Track | t
| ) |  |

Lift the reservation of a specific track on a tile.

Parameters

  tile | the tile
  t | the track

Definition at line 140 of file pbs.cpp.

References _settings_client, GetTileTrackStatus(), GetTileType(), GetTunnelBridgeTransportType(), ClientSettings::gui, HasStationRail(), HasTrack(), IsBridgeTile(), IsLevelCrossing(), IsPlainRail(), IsRailDepot(), MarkBridgeDirty(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, SetCrossingReservation(), SetDepotReservation(), SetRailStationReservation(), SetTunnelBridgeReservation(), GUISettings::show_track_reservation, Vehicle::tile, TrackStatusToTrackBits(), TRANSPORT_RAIL, UnreserveTrack(), and UpdateLevelCrossing().

Referenced by ClearPathReservation(), DeleteLastWagon(), ExtendTrainReservation(), and CYapfReserveTrack< Types >::UnreserveSingleTrack().