OpenTTD

Data Structures | Functions
pbs.cpp File Reference

PBS support routines. More...

`#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. More...
static Vehicle * | FindTrainOnTrackEnum (Vehicle *v, void *data)
| Callback for Has/FindVehicleOnPos to find a train on a specific track. More...
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

## ◆ FindTrainOnTrackEnum()

static Vehicle* FindTrainOnTrackEnum | ( | Vehicle * | v,
|  | void * | data
| ) |  |
| static

Callback for Has/FindVehicleOnPos to find a train on a specific track.

Definition at line 266 of file pbs.cpp.

References FindTrainOnTrackInfo::best, SpecializedVehicle< T, Type >::First(), SpecializedVehicle< Train, Type >::From(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, FindTrainOnTrackInfo::res, TRACK_BIT_WORMHOLE, PBSTileInfo::trackdir, TrackdirToTrack(), BaseVehicle::type, VEH_TRAIN, Vehicle::vehstatus, and VS_CRASHED.

## ◆ FollowReservation()

static PBSTileInfo FollowReservation | ( | Owner | o,
|  | RailTypes | rts,
|  | TileIndex | tile,
|  | Trackdir | trackdir,
|  | bool | ignore_oneway = `false`
| ) |  |
| static

Follow a reservation starting from a specific tile to the end.

Definition at line 190 of file pbs.cpp.

References DiagDirToDiagTrackdir(), FindFirstTrackdir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetReservedTrackbits(), HasOnewaySignalBlockingTrackdir(), HasReservedTracks(), HasSignalOnTrackdir(), HasStationReservation(), 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_is_station, 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, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_tiles_skipped, MP_RAILWAY, TileOffsByDiagDir(), TrackBitsToTrackdirBits(), TRACKDIR_BIT_NONE, TrackdirToTrack(), and TrackToTrackBits().

## ◆ 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 291 of file pbs.cpp.

Referenced by ExtendTrainReservation(), PBSTileInfo::PBSTileInfo(), 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 26 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 NULL if the path is stray.

Definition at line 333 of file pbs.cpp.

Referenced by CmdConvertRail(), and PBSTileInfo::PBSTileInfo().

## ◆ 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 383 of file pbs.cpp.

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

Referenced by ExtendTrainReservation(), FindSafePosition(), NPFFindSafeTile(), PBSTileInfo::PBSTileInfo(), 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 429 of file pbs.cpp.

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

Referenced by ExtendTrainReservation(), NPFFindSafeTile(), NPFSaveTargetData(), PBSTileInfo::PBSTileInfo(), 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 59 of file pbs.cpp.

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

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

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