Data Structures | Functions

# pbs.h File Reference

PBS support routines. More...

`#include "tile_type.h"`
`#include "direction_type.h"`
`#include "track_type.h"`
`#include "vehicle_type.h"`

Go to the source code of this file.

## Data Structures
struct | PBSTileInfo
| This struct contains information about the end of a reserved path. More...
## Functions
TrackBits | GetReservedTrackbits (TileIndex t)
| Get the reserved trackbits for any tile, regardless of type.
void | SetRailStationPlatformReservation (TileIndex start, DiagDirection dir, bool b)
| Set the reservation for a complete station platform.
bool | TryReserveRailTrack (TileIndex tile, Track t)
| Try to reserve a specific track on a tile.
void | UnreserveRailTrack (TileIndex tile, Track t)
| Lift the reservation of a specific track on a tile.
PBSTileInfo | FollowTrainReservation (const Train *v, Vehicle **train_on_res=NULL)
| Follow a train reservation to the last tile.
bool | IsSafeWaitingPosition (const Train *v, TileIndex tile, Trackdir trackdir, bool include_line_end, bool forbid_90deg=false)
| Determine whether a certain track on a tile is a safe position to end a path.
bool | IsWaitingPositionFree (const Train *v, TileIndex tile, Trackdir trackdir, bool forbid_90deg=false)
| Check if a safe position is free.
Train * | GetTrainForReservation (TileIndex tile, Track track)
| Find the train which has reserved a specific path.
static bool | HasReservedTracks (TileIndex tile, TrackBits tracks)
| Check whether some of tracks is reserved on a tile.

## Detailed Description

PBS support routines.

Definition in file pbs.h.

## Function Documentation

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 278 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(), and VEH_TRAIN.

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

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 23 of file pbs.cpp.

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

Referenced by CmdConvertRail(), CmdRemoveSingleSignal(), FollowReservation(), FreeTrainTrackReservation(), HasReservedTracks(), IsWaitingPositionFree(), CYapfCostRailT< Types >::ReservationCost(), and TrainController().

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 NULL if the path is stray.

Definition at line 320 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 CheckFlatLandRailStation(), CmdBuildRailStation(), CmdBuildSingleSignal(), CmdConvertRail(), CmdRemoveSingleRail(), CmdRemoveSingleSignal(), DoClearBridge(), DoClearTunnel(), RemoveFromRailBaseStation(), and RemoveRailStation().

static bool HasReservedTracks | ( | TileIndex | tile,
|  | TrackBits | tracks |
| ) |  |  | `[inline, static]`

Check whether some of tracks is reserved on a tile.

Parameters:

  | tile | the tile
  | tracks | the tracks to test

Returns:
  true if at least on of tracks is reserved

Definition at line 60 of file pbs.h.

References GetReservedTrackbits().

Referenced by CheckNextTrainTile(), CmdBuildSingleSignal(), CmdRemoveSingleRail(), CmdRemoveSingleSignal(), DeleteLastWagon(), DrawTrackBits(), ExtendTrainReservation(), FollowReservation(), GetTrainForReservation(), IsWaitingPositionFree(), TrainController(), and TryPathReserve().

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 370 of file pbs.cpp.

References RailtypeInfo::compatible_railtypes, DiagdirReachesTrackdirs(), FindFirstTrackdir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetRailTypeInfo(), HasPbsSignalOnTrackdir(), HasSignalOnTrackdir(), IsRailDepotTile(), IsTileType(), KillFirstBit(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_exitdir, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_td_bits, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_tile, MP_RAILWAY, ReverseTrackdir(), SIGTYPE_PBS_ONEWAY, TRACKDIR_BIT_NONE, TrackdirCrossesTrackdirs(), and TrackdirToTrack().

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

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 416 of file pbs.cpp.

References RailtypeInfo::compatible_railtypes, DiagdirReachesTrackdirs(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetRailTypeInfo(), GetReservedTrackbits(), HasReservedTracks(), HasSignalOnTrackdir(), IsRailDepotTile(), IsTileType(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_exitdir, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_td_bits, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_tile, MP_RAILWAY, TrackdirBitsToTrackBits(), TrackdirCrossesTrackdirs(), TrackdirToTrack(), and TrackOverlapsTracks().

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

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 56 of file pbs.cpp.

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

Referenced by ClearPathReservation(), CmdBuildRailStation(), NPFSaveTargetData(), RemoveFromRailBaseStation(), and ReverseTrainDirection().

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

Try to reserve a specific track on a tile.

Parameters:

  | tile | the tile
  | t | the track

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

Definition at line 78 of file pbs.cpp.

References _settings_client, BarCrossing(), GetTileTrackStatus(), GetTileType(), GetTunnelBridgeReservationTrackBits(), GetTunnelBridgeTransportType(), ClientSettings::gui, HasCrossingReservation(), HasDepotReservation(), HasStationRail(), HasStationReservation(), IsLevelCrossing(), IsPlainRail(), IsRailDepot(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, SetCrossingReservation(), SetDepotReservation(), SetRailStationReservation(), SetTunnelBridgeReservation(), GUISettings::show_track_reservation, TrackToTrackBits(), TRANSPORT_RAIL, and TryReserveTrack().

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

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 134 of file pbs.cpp.

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

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