OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Macros | Functions
track_func.h File Reference

Different conversion functions from one kind of track to another. More...

`#include "core/bitmath_func.hpp"`
`#include "track_type.h"`
`#include "direction_func.h"`
`#include "slope_func.h"`

Go to the source code of this file.

## Macros
#define | FOR_EACH_SET_TRACK(var, track_bits) FOR_EACH_SET_BIT_EX(Track, var, TrackBits, track_bits)
| Iterate through each set Track in a TrackBits value.

## Functions
static bool | IsValidTrack (Track track)
| Checks if a Track is valid.
static bool | IsValidTrackdirForRoadVehicle (Trackdir trackdir)
| Checks if a Trackdir is valid for road vehicles.
static bool | IsValidTrackdir (Trackdir trackdir)
| Checks if a Trackdir is valid for non-road vehicles.
static Track | AxisToTrack (Axis a)
| Convert an Axis to the corresponding Track AXIS_X -> TRACK_X AXIS_Y -> TRACK_Y Uses the fact that they share the same internal encoding.
static TrackBits | TrackToTrackBits (Track track)
| Maps a Track to the corresponding TrackBits value.
static TrackBits | AxisToTrackBits (Axis a)
| Maps an Axis to the corresponding TrackBits value.
static TrackBits | CornerToTrackBits (Corner corner)
| Returns a single horizontal/vertical trackbit that is in a specific tile corner.
static TrackdirBits | TrackdirToTrackdirBits (Trackdir trackdir)
| Maps a Trackdir to the corresponding TrackdirBits value.
static Track | RemoveFirstTrack (TrackBits *tracks)
| Removes first Track from TrackBits and returns it.
static Trackdir | RemoveFirstTrackdir (TrackdirBits *trackdirs)
| Removes first Trackdir from TrackdirBits and returns it.
static Track | FindFirstTrack (TrackBits tracks)
| Returns first Track from TrackBits or INVALID_TRACK.
static Track | TrackBitsToTrack (TrackBits tracks)
| Converts TrackBits to Track.
static Trackdir | FindFirstTrackdir (TrackdirBits trackdirs)
| Returns first Trackdir from TrackdirBits or INVALID_TRACKDIR.
static Track | TrackToOppositeTrack (Track t)
| Find the opposite track to a given track.
static Trackdir | ReverseTrackdir (Trackdir trackdir)
| Maps a trackdir to the reverse trackdir.
static Track | TrackdirToTrack (Trackdir trackdir)
| Returns the Track that a given Trackdir represents.
static Trackdir | TrackToTrackdir (Track track)
| Returns a Trackdir for the given Track.
static TrackdirBits | TrackToTrackdirBits (Track track)
| Returns a TrackdirBit mask from a given Track.
static TrackBits | TrackdirBitsToTrackBits (TrackdirBits bits)
| Discards all directional information from a TrackdirBits value.
static TrackdirBits | TrackBitsToTrackdirBits (TrackBits bits)
| Converts TrackBits to TrackdirBits while allowing both directions.
static TrackdirBits | TrackStatusToTrackdirBits (TrackStatus ts)
| Returns the present-trackdir-information of a TrackStatus.
static TrackBits | TrackStatusToTrackBits (TrackStatus ts)
| Returns the present-track-information of a TrackStatus.
static TrackdirBits | TrackStatusToRedSignals (TrackStatus ts)
| Returns the red-signal-information of a TrackStatus.
static TrackStatus | CombineTrackStatus (TrackdirBits trackdirbits, TrackdirBits red_signals)
| Builds a TrackStatus.
static Trackdir | NextTrackdir (Trackdir trackdir)
| Maps a trackdir to the trackdir that you will end up on if you go straight ahead.
static TrackBits | TrackCrossesTracks (Track track)
| Maps a track to all tracks that make 90 deg turns with it.
static DiagDirection | TrackdirToExitdir (Trackdir trackdir)
| Maps a trackdir to the (4-way) direction the tile is exited when following that trackdir.
static Trackdir | TrackExitdirToTrackdir (Track track, DiagDirection diagdir)
| Maps a track and an (4-way) dir to the trackdir that represents the track with the exit in the given direction.
static Trackdir | TrackEnterdirToTrackdir (Track track, DiagDirection diagdir)
| Maps a track and an (4-way) dir to the trackdir that represents the track with the entry in the given direction.
static Trackdir | TrackDirectionToTrackdir (Track track, Direction dir)
| Maps a track and a full (8-way) direction to the trackdir that represents the track running in the given direction.
static Track | DiagDirToDiagTrack (DiagDirection diagdir)
| Maps a (4-way) direction to the diagonal track incidating with that diagdir.
static TrackBits | DiagDirToDiagTrackBits (DiagDirection diagdir)
| Maps a (4-way) direction to the diagonal track bits incidating with that diagdir.
static Trackdir | DiagDirToDiagTrackdir (DiagDirection diagdir)
| Maps a (4-way) direction to the diagonal trackdir that runs in that direction.
static TrackdirBits | DiagdirReachesTrackdirs (DiagDirection diagdir)
| Returns all trackdirs that can be reached when entering a tile from a given (diagonal) direction.
static TrackBits | DiagdirReachesTracks (DiagDirection diagdir)
| Returns all tracks that can be reached when entering a tile from a given (diagonal) direction.
static TrackdirBits | TrackdirReachesTrackdirs (Trackdir trackdir)
| Maps a trackdir to the trackdirs that can be reached from it (ie, when entering the next tile.
static TrackdirBits | TrackdirCrossesTrackdirs (Trackdir trackdir)
| Maps a trackdir to all trackdirs that make 90 deg turns with it.
static bool | IsDiagonalTrack (Track track)
| Checks if a given Track is diagonal.
static bool | IsDiagonalTrackdir (Trackdir trackdir)
| Checks if a given Trackdir is diagonal.
static bool | TracksOverlap (TrackBits bits)
| Checks if the given tracks overlap, ie form a crossing.
static bool | TrackOverlapsTracks (TrackBits tracks, Track track)
| Check if a given track is contained within or overlaps some other tracks.
static bool | IsReversingRoadTrackdir (Trackdir dir)
| Checks whether the trackdir means that we are reversing.
static bool | IsStraightRoadTrackdir (Trackdir dir)
| Checks whether the given trackdir is a straight road.
static bool | IsUphillTrackdir (Slope slope, Trackdir dir)
| Checks whether a trackdir on a specific slope is going uphill.

## Detailed Description

Different conversion functions from one kind of track to another.

Definition in file track_func.h.

## Macro Definition Documentation

#define FOR_EACH_SET_TRACK | ( |  | var,
|  |  | track_bits
| ) |  | FOR_EACH_SET_BIT_EX(Track, var, TrackBits, track_bits)

Iterate through each set Track in a TrackBits value.

For more informations see FOR_EACH_SET_BIT_EX.

Parameters

  var | Loop index variable that stores fallowing set track. Must be of type Track.
  track_bits | The value to iterate through (any expression).

See Also
  FOR_EACH_SET_BIT_EX

Definition at line 29 of file track_func.h.

Referenced by DeleteLastWagon(), and DrawRailCatenaryRailway().

## Function Documentation

static Track AxisToTrack | ( | Axis | a | ) |
| inline static

Convert an Axis to the corresponding Track AXIS_X -> TRACK_X AXIS_Y -> TRACK_Y Uses the fact that they share the same internal encoding.

Parameters

  a | the axis to convert

Returns
  the track corresponding to the axis

Definition at line 76 of file track_func.h.

References IsValidAxis().

Referenced by AxisToTrackBits(), CmdBuildBridge(), CmdBuildRailStation(), CmdBuildRailWaypoint(), CmdBuildRoad(), GetCrossingRailTrack(), and GetRailStationTrack().

static TrackBits AxisToTrackBits | ( | Axis | a | ) |
| inline static

Maps an Axis to the corresponding TrackBits value.

Parameters

  a | the axis to convert

Returns
  the converted TrackBits value of the axis

Definition at line 98 of file track_func.h.

References AxisToTrack(), and TrackToTrackBits().

Referenced by GetCrossingRailBits(), and GetRailStationTrackBits().

static TrackStatus CombineTrackStatus | ( | TrackdirBits | trackdirbits,
|  | TrackdirBits | red_signals
| ) |  |
| inline static

Builds a TrackStatus.

Parameters

  trackdirbits | present trackdirs
  red_signals | red signals

Returns
  the TrackStatus representing the given information

Definition at line 376 of file track_func.h.

static TrackBits CornerToTrackBits | ( | Corner | corner | ) |
| inline static

Returns a single horizontal/vertical trackbit that is in a specific tile corner.

Parameters

  corner | The corner of a tile.

Returns
  The TrackBits of the track in the corner.

Definition at line 109 of file track_func.h.

References IsValidCorner().

Referenced by DrawTrackBits(), FloodHalftile(), and GetRailFoundation().

static TrackdirBits DiagdirReachesTrackdirs | ( | DiagDirection | diagdir | ) |
| inline static

Returns all trackdirs that can be reached when entering a tile from a given (diagonal) direction.

This will obviously include 90 degree turns, since no information is available about the exact angle of entering

Parameters

  diagdir | The joining direction

Returns
  The TrackdirBits which can be used from the given direction

See Also
  DiagdirReachesTracks

Definition at line 543 of file track_func.h.

References DIAGDIR_END, and IsValidDiagDirection().

Referenced by DiagdirReachesTracks(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), IsSafeWaitingPosition(), IsWaitingPositionFree(), MaskWireBits(), RoadFindPathToDest(), TrainCheckIfLineEnds(), TrainController(), TryPathReserve(), and CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::TryReverse().

static TrackBits DiagdirReachesTracks | ( | DiagDirection | diagdir | ) |
| inline static

Returns all tracks that can be reached when entering a tile from a given (diagonal) direction.

This will obviously include 90 degree turns, since no information is available about the exact angle of entering

Parameters

  diagdir | The joining direction

Returns
  The tracks which can be used

See Also
  DiagdirReachesTrackdirs

Definition at line 561 of file track_func.h.

References DiagdirReachesTrackdirs(), and TrackdirBitsToTrackBits().

Referenced by MaskWireBits(), OPFShipChooseTrack(), PlaceExtraDepotRail(), and TryPathReserve().

static Track DiagDirToDiagTrack | ( | DiagDirection | diagdir | ) |
| inline static

Maps a (4-way) direction to the diagonal track incidating with that diagdir.

Parameters

  diagdir | The direction

Returns
  The resulting Track

Definition at line 500 of file track_func.h.

References IsValidDiagDirection().

Referenced by CmdBuildTrainDepot(), CmdBuildTunnel(), CmdConvertRail(), DiagDirToDiagTrackBits(), DoClearBridge(), DoClearTunnel(), GetRailDepotTrack(), Train::ReserveTrackUnderConsist(), and TrainController().

static TrackBits DiagDirToDiagTrackBits | ( | DiagDirection | diagdir | ) |
| inline static

Maps a (4-way) direction to the diagonal track bits incidating with that diagdir.

Parameters

  diagdir | The direction

Returns
  The resulting TrackBits

Definition at line 512 of file track_func.h.

References DiagDirToDiagTrack(), IsValidDiagDirection(), and TrackToTrackBits().

Referenced by AfterLoadGame(), CollectTrackbitsFromCrashedVehiclesEnum(), DeleteLastWagon(), GetRailTrackBitsUniversal(), and GetTunnelBridgeReservationTrackBits().

static Trackdir DiagDirToDiagTrackdir | ( | DiagDirection | diagdir | ) |
| inline static

Maps a (4-way) direction to the diagonal trackdir that runs in that direction.

Parameters

  diagdir | The direction

Returns
  The resulting Trackdir direction

Definition at line 525 of file track_func.h.

References DIAGDIR_END, and IsValidDiagDirection().

Referenced by AfterLoadGame(), FollowReservation(), Ship::GetVehicleTrackdir(), RoadVehicle::GetVehicleTrackdir(), Train::GetVehicleTrackdir(), NPFRoadVehicleChooseTrack(), and CYapfCostRoadT< Types >::PfCalcCost().

static Track FindFirstTrack | ( | TrackBits | tracks | ) |
| inline static

Returns first Track from TrackBits or INVALID_TRACK.

This function returns the first Track found in the TrackBits value as Track-value. It returns INVALID_TRACK if the parameter is TRACK_BIT_NONE or INVALID_TRACK_BIT.

Parameters

  tracks | The TrackBits value

Returns
  The first Track found or INVALID_TRACK

See Also
  RemoveFirstTrack

Definition at line 187 of file track_func.h.

References FIND_FIRST_BIT, INVALID_TRACK, INVALID_TRACK_BIT, and TRACK_BIT_NONE.

Referenced by GenericPlaceSignals(), Ship::GetVehicleTrackdir(), Train::GetVehicleTrackdir(), NPFTrainChooseTrack(), ReverseTrainDirection(), TrainCheckIfLineEnds(), TrainController(), and YapfTrainChooseTrack().

static Trackdir FindFirstTrackdir | ( | TrackdirBits | trackdirs | ) |
| inline static

Returns first Trackdir from TrackdirBits or INVALID_TRACKDIR.

This function returns the first Trackdir in the given TrackdirBits value or INVALID_TRACKDIR if the value is TRACKDIR_BIT_NONE. The TrackdirBits must not be INVALID_TRACKDIR_BIT.

Parameters

  trackdirs | The TrackdirBits value

Returns
  The first Trackdir from the TrackdirBits or INVALID_TRACKDIR on TRACKDIR_BIT_NONE.

Precondition
  trackdirs must not be INVALID_TRACKDIR_BIT

See Also
  RemoveFirstTrackdir

Definition at line 221 of file track_func.h.

References FindFirstBit2x64(), INVALID_TRACKDIR, TRACKDIR_BIT_MASK, and TRACKDIR_BIT_NONE.

Referenced by CheckNextTrainTile(), ExtendTrainReservation(), FollowReservation(), IsSafeWaitingPosition(), and TrainController().

static bool IsDiagonalTrack | ( | Track | track | ) |
| inline static

Checks if a given Track is diagonal.

Parameters

  track | The given track to check

Returns
  true if diagonal, else false

Definition at line 607 of file track_func.h.

References IsValidTrack(), TRACK_X, and TRACK_Y.

Referenced by IsDiagonalTrackdir().

static bool IsDiagonalTrackdir | ( | Trackdir | trackdir | ) |
| inline static

Checks if a given Trackdir is diagonal.

Parameters

  trackdir | The given trackdir

Returns
  true if the trackdir use a diagonal track

Definition at line 619 of file track_func.h.

References IsDiagonalTrack(), IsValidTrackdir(), and TrackdirToTrack().

Referenced by CmdRailTrackHelper(), CmdSignalTrackHelper(), CYapfCostRoadT< Types >::OneTileCost(), CYapfCostRailT< Types >::OneTileCost(), CYapfCostShipT< Types >::PfCalcCost(), CYapfCostRailT< Types >::ReservationCost(), and CYapfCostBase::stSlopeCost().

static bool IsReversingRoadTrackdir | ( | Trackdir | dir | ) |
| inline static

Checks whether the trackdir means that we are reversing.

Parameters

  dir | the trackdir to check

Returns
  true if it is a reversing road trackdir

Definition at line 661 of file track_func.h.

References IsValidTrackdirForRoadVehicle().

Referenced by RoadVehicle::GetCurrentMaxSpeed(), RoadVehicle::GetVehicleTrackdir(), and RoadVehicle::HasToUseGetSlopePixelZ().

static bool IsStraightRoadTrackdir | ( | Trackdir | dir | ) |
| inline static

Checks whether the given trackdir is a straight road.

Parameters

  dir | the trackdir to check

Returns
  true if it is a straight road trackdir

Definition at line 672 of file track_func.h.

References IsValidTrackdirForRoadVehicle().

static bool IsUphillTrackdir | ( | Slope | slope,
|  | Trackdir | dir
| ) |  |
| inline static

Checks whether a trackdir on a specific slope is going uphill.

Valid for rail and road tracks. Valid for tile-slopes (under foundation) and foundation-slopes (on foundation).

Parameters

  slope | The slope of the tile.
  dir | The trackdir of interest.

Returns
  true iff the track goes upwards.

Definition at line 688 of file track_func.h.

References HasBit(), IsValidTrackdirForRoadVehicle(), and RemoveHalftileSlope().

Referenced by CYapfCostBase::stSlopeCost().

static bool IsValidTrack | ( | Track | track | ) |
| inline static

Checks if a Track is valid.

Parameters

  track | The value to check

Returns
  true if the given value is a valid track.

Note
  Use this in an assert()

Definition at line 38 of file track_func.h.

References TRACK_END.

Referenced by HasSignalOnTrack(), IsDiagonalTrack(), TrackCrossesTracks(), TrackDirectionToTrackdir(), TrackEnterdirToTrackdir(), TrackExitdirToTrackdir(), TrackToOppositeTrack(), TrackToTrackBits(), and TrackToTrackdir().

static bool IsValidTrackdir | ( | Trackdir | trackdir | ) |
| inline static

Checks if a Trackdir is valid for non-road vehicles.

Parameters

  trackdir | The value to check

Returns
  true if the given value is a valid Trackdir

Note
  Use this in an assert()

Definition at line 62 of file track_func.h.

References TRACKDIR_BIT_MASK.

Referenced by FreeTrainTrackReservation(), GetSignalStateByTrackdir(), HasSignalOnTrackdir(), IsDiagonalTrackdir(), NextTrackdir(), NPFHash(), NPFTrainChooseTrack(), TrackdirReachesTrackdirs(), TrackdirToTrack(), and TrackdirToTrackdirBits().

static bool IsValidTrackdirForRoadVehicle | ( | Trackdir | trackdir | ) |
| inline static

Checks if a Trackdir is valid for road vehicles.

Parameters

  trackdir | The value to check

Returns
  true if the given value is a valid Trackdir

Note
  Use this in an assert()

Definition at line 50 of file track_func.h.

References TRACKDIR_END.

Referenced by IsReversingRoadTrackdir(), IsStraightRoadTrackdir(), IsUphillTrackdir(), ReverseTrackdir(), TrackdirCrossesTrackdirs(), and TrackdirToExitdir().

static Trackdir NextTrackdir | ( | Trackdir | trackdir | ) |
| inline static

Maps a trackdir to the trackdir that you will end up on if you go straight ahead.

This will be the same trackdir for diagonal trackdirs, but a different (alternating) one for straight trackdirs

Parameters

  trackdir | The given trackdir

Returns
  The next Trackdir value of the next tile.

Definition at line 391 of file track_func.h.

References IsValidTrackdir(), and TRACKDIR_END.

Referenced by CYapfCostShipT< Types >::PfCalcCost().

static Track RemoveFirstTrack | ( | TrackBits * | tracks | ) |
| inline static

Removes first Track from TrackBits and returns it.

This function searchs for the first bit in the TrackBits, remove this bit from the parameter and returns the found bit as Track value. It returns INVALID_TRACK if the parameter was TRACK_BIT_NONE or INVALID_TRACK_BIT. This is basically used in while-loops to get up to 6 possible tracks on a tile until the parameter becomes TRACK_BIT_NONE.

Parameters

  tracks | The value with the TrackBits

Returns
  The first Track from the TrackBits value

See Also
  FindFirstTrack

Definition at line 141 of file track_func.h.

References ClrBit(), FIND_FIRST_BIT, INVALID_TRACK, INVALID_TRACK_BIT, TRACK_BIT_MASK, and TRACK_BIT_NONE.

Referenced by ChangeOwnershipOfCompanyItems(), CheckFlatLandRailStation(), CmdConvertRail(), and SetTrackReservation().

static Trackdir RemoveFirstTrackdir | ( | TrackdirBits * | trackdirs | ) |
| inline static

Removes first Trackdir from TrackdirBits and returns it.

This function searches for the first bit in the TrackdirBits parameter, remove this bit from the parameter and returns the fnound bit as Trackdir value. It returns INVALID_TRACKDIR if the trackdirs is TRACKDIR_BIT_NONE or INVALID_TRACKDIR_BIT. This is basically used in a while-loop to get all track-directions step by step until the value reaches TRACKDIR_BIT_NONE.

Parameters

  trackdirs | The value with the TrackdirBits

Returns
  The first Trackdir from the TrackdirBits value

See Also
  FindFirstTrackdir

Definition at line 166 of file track_func.h.

References ClrBit(), FindFirstBit2x64(), INVALID_TRACKDIR, INVALID_TRACKDIR_BIT, TRACKDIR_BIT_MASK, and TRACKDIR_BIT_NONE.

Referenced by FreeTrainTrackReservation(), and CYapfCostRailT< Types >::PfCalcCost().

static Trackdir ReverseTrackdir | ( | Trackdir | trackdir | ) |
| inline static

Maps a trackdir to the reverse trackdir.

Returns the reverse trackdir of a Trackdir value. The reverse trackdir is the same track with the other direction on it.

Parameters

  trackdir | The Trackdir value

Returns
  The reverse trackdir

Precondition
  trackdir must not be INVALID_TRACKDIR

Definition at line 257 of file track_func.h.

References IsValidTrackdirForRoadVehicle().

Referenced by CmdRemoveSingleSignal(), ExploreSegment(), FollowTrainReservation(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::ForcedReverse(), FreeTrainReservation(), FreeTrainTrackReservation(), GetTrainForReservation(), HasOnewaySignalBlockingTrackdir(), CYapfCostRailT< Types >::IsAnyStationTileReserved(), IsSafeWaitingPosition(), NPFRoadVehicleFindNearestDepot(), NPFShipCheckReverse(), NPFTrainCheckReverse(), NPFTrainFindNearestDepot(), CYapfCostRailT< Types >::PfCalcCost(), CYapfReserveTrack< Types >::ReserveSingleTrack(), RestoreTrainReservation(), TrackToTrackdirBits(), TrainController(), CYapfReserveTrack< Types >::UnreserveSingleTrack(), UpdateSignalsAroundSegment(), YapfShipCheckReverse(), YapfTrainCheckReverse(), and YapfTrainFindNearestDepot().

static Track TrackBitsToTrack | ( | TrackBits | tracks | ) |
| inline static

Converts TrackBits to Track.

This function converts a TrackBits value to a Track value. As it is not possible to convert two or more tracks to one track the parameter must contain only one track or be the INVALID_TRACK_BIT value.

Parameters

  tracks | The TrackBits value to convert

Returns
  The Track from the value or INVALID_TRACK

Precondition
  tracks must contains only one Track or be INVALID_TRACK_BIT

Definition at line 203 of file track_func.h.

References FIND_FIRST_BIT, INVALID_TRACK, INVALID_TRACK_BIT, KillFirstBit(), TRACK_BIT_MASK, and TRACK_BIT_NONE.

Referenced by CmdRemoveSingleSignal(), DeleteLastWagon(), ExploreSegment(), Train::ReserveTrackUnderConsist(), and TrainController().

static TrackdirBits TrackBitsToTrackdirBits | ( | TrackBits | bits | ) |
| inline static

Converts TrackBits to TrackdirBits while allowing both directions.

Parameters

  bits | The TrackBits

Returns
  The TrackdirBits containing of bits in both directions.

Definition at line 329 of file track_func.h.

Referenced by FollowReservation(), and FreeTrainTrackReservation().

static TrackBits TrackCrossesTracks | ( | Track | track | ) |
| inline static

Maps a track to all tracks that make 90 deg turns with it.

For the diagonal directions these are the complement of the direction, for the straight directions these are the two vertical or horizontal tracks, depend on the given direction

Parameters

  track | The given track

Returns
  The TrackBits with the tracks marked which cross the given track by 90 deg.

Definition at line 408 of file track_func.h.

References IsValidTrack(), and TRACK_END.

Referenced by CheckNextTrainTile(), TrainCheckIfLineEnds(), TrainController(), and TryPathReserve().

static TrackBits TrackdirBitsToTrackBits | ( | TrackdirBits | bits | ) |
| inline static

Discards all directional information from a TrackdirBits value.

Any Track which is present in either direction will be present in the result.

Parameters

  bits | The TrackdirBits to get the TrackBits from

Returns
  The TrackBits

Definition at line 318 of file track_func.h.

References TRACK_BIT_MASK.

Referenced by CheckNextTrainTile(), CheckRoadBlockedForOvertaking(), CmdRemoveSingleSignal(), DiagdirReachesTracks(), ExtendTrainReservation(), IsWaitingPositionFree(), MaskWireBits(), OPFShipChooseTrack(), TrackStatusToTrackBits(), TrainCheckIfLineEnds(), TrainController(), and TryPathReserve().

static TrackdirBits TrackdirCrossesTrackdirs | ( | Trackdir | trackdir | ) |
| inline static

Maps a trackdir to all trackdirs that make 90 deg turns with it.

For the diagonal tracks this returns the track direction bits of the other axis in both directions, which cannot be joined by the given track direction. For the straight tracks this returns all possible 90 deg turns either on the current tile (which no train can joined) or on the bordering tiles.

Parameters

  trackdir | The track direction

Returns
  The TrackdirBits which are (more or less) 90 deg turns.

Definition at line 594 of file track_func.h.

References IsValidTrackdirForRoadVehicle(), TRACK_END, and TrackdirToTrack().

Referenced by ExtendTrainReservation(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetDriveableTrackdirBits(), IsSafeWaitingPosition(), and IsWaitingPositionFree().

static TrackdirBits TrackdirReachesTrackdirs | ( | Trackdir | trackdir | ) |
| inline static

Maps a trackdir to the trackdirs that can be reached from it (ie, when entering the next tile.

This will include 90 degree turns!

Parameters

  trackdir | The track direction which will be leaved

Returns
  The track directions which can be used from this direction (in the next tile)

Definition at line 572 of file track_func.h.

References DIAGDIR_END, IsValidTrackdir(), and TrackdirToExitdir().

Referenced by CmdRemoveSingleSignal(), ExtendTrainReservation(), and GetDriveableTrackdirBits().

static DiagDirection TrackdirToExitdir | ( | Trackdir | trackdir | ) |
| inline static

Maps a trackdir to the (4-way) direction the tile is exited when following that trackdir.

For the diagonal directions these are the same directions. For the straight directions these are the directions from the imagined base-tile to the bordering tile which will be joined if the given straight direction is leaved from the base-tile.

Parameters

  trackdir | The given track direction

Returns
  The direction which points to the resulting tile if following the Trackdir

Definition at line 427 of file track_func.h.

References IsValidTrackdirForRoadVehicle(), and TRACKDIR_END.

Referenced by CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanEnterNewTile(), ClearPathReservation(), CmdRemoveSingleSignal(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), FollowTrainReservation(), FreeTrainReservation(), FreeTrainTrackReservation(), GetTrainForReservation(), CYapfCostRailT< Types >::IsAnyStationTileReserved(), NPFSaveTargetData(), CYapfCostRoadT< Types >::OneTileCost(), CYapfCostRailT< Types >::PfCalcCost(), CYapfDestinationTileT< Types >::PfCalcEstimate(), CYapfDestinationTileOrStationRailT< Types >::PfCalcEstimate(), CYapfDestinationTileRoadT< Types >::PfCalcEstimate(), CYapfReserveTrack< Types >::ReserveSingleTrack(), RestoreTrainReservation(), ReverseTrainDirection(), CYapfCostBase::stSlopeCost(), TrackdirReachesTrackdirs(), TrainController(), TryPathReserve(), CYapfReserveTrack< Types >::UnreserveSingleTrack(), UpdateSignalsAroundSegment(), and YapfTrainCheckReverse().

static Track TrackdirToTrack | ( | Trackdir | trackdir | ) |
| inline static

Returns the Track that a given Trackdir represents.

This function filters the Track which is used in the Trackdir value and returns it as a Track value.

Parameters

  trackdir | The trackdir value

Returns
  The Track which is used in the value

Definition at line 272 of file track_func.h.

References IsValidTrackdir().

Referenced by CheckNextTrainTile(), ClearPathReservation(), CmdRailTrackHelper(), CmdSignalTrackHelper(), ExtendTrainReservation(), FindTrainOnTrackEnum(), FollowReservation(), FreeTrainTrackReservation(), GetSignalStateByTrackdir(), HasOnewaySignalBlockingTrackdir(), HasPbsSignalOnTrackdir(), IsDiagonalTrackdir(), IsSafeWaitingPosition(), IsWaitingPositionFree(), NPFSaveTargetData(), NPFShipChooseTrack(), NPFTrainChooseTrack(), CYapfCostRailT< Types >::PfCalcCost(), CYapfDestinationTileOrStationRailT< Types >::PfDetectDestination(), CYapfCostRailT< Types >::ReservationCost(), CYapfReserveTrack< Types >::ReserveSingleTrack(), TrackdirCrossesTrackdirs(), TrainController(), TryPathReserve(), CYapfReserveTrack< Types >::UnreserveSingleTrack(), UpdateSignalsAroundSegment(), YapfShipChooseTrack(), and YapfTrainChooseTrack().

static TrackdirBits TrackdirToTrackdirBits | ( | Trackdir | trackdir | ) |
| inline static

Maps a Trackdir to the corresponding TrackdirBits value.

Parameters

  trackdir | the track direction to convert

Returns
  the converted TrackdirBits value

Definition at line 121 of file track_func.h.

References IsValidTrackdir().

Referenced by CYapfFollowShipT< Types >::CheckShipReverse(), CYapfFollowRoadT< Types >::FindNearestDepot(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::ForcedReverse(), OPFShipChooseTrack(), CYapfCostRailT< Types >::PfCalcCost(), CYapfDestinationTileT< Types >::PfDetectDestination(), CYapfDestinationTileOrStationRailT< Types >::PfDetectDestination(), CYapfFollowRoadT< Types >::SetOriginFromVehiclePos(), TrackToTrackdirBits(), and YapfRoadVehicleFindNearestDepot().

static Trackdir TrackEnterdirToTrackdir | ( | Track | track,
|  | DiagDirection | diagdir
| ) |  |
| inline static

Maps a track and an (4-way) dir to the trackdir that represents the track with the entry in the given direction.

For the diagonal tracks the return value is clear, its either the matching track direction or INVALID_TRACKDIR. For the straight tracks this returns the track direction which results if you follow the DiagDirection and then turn by 45 deg left or right on the next tile. The new direction on the new track will be the returning Trackdir value. If the parameters makes no sense like the track TRACK_UPPER and the direction DIAGDIR_NE (target track cannot be reached) this function returns INVALID_TRACKDIR.

Parameters

  track | The target track
  diagdir | The direction to "come from"

Returns
  the resulting Trackdir or INVALID_TRACKDIR if not possible.

Definition at line 474 of file track_func.h.

References DIAGDIR_END, IsValidDiagDirection(), IsValidTrack(), and TRACK_END.

static Trackdir TrackExitdirToTrackdir | ( | Track | track,
|  | DiagDirection | diagdir
| ) |  |
| inline static

Maps a track and an (4-way) dir to the trackdir that represents the track with the exit in the given direction.

For the diagonal tracks the resulting track direction are clear for a given DiagDirection. It either matches the direction or it returns INVALID_TRACKDIR, as a TRACK_X cannot be applied with DIAG_SE. For the straight tracks the resulting track direction will be the direction which the DiagDirection is pointing. But this will be INVALID_TRACKDIR if the DiagDirection is pointing 'away' the track.

Parameters

  track | The track to apply an direction on
  diagdir | The DiagDirection to apply on

Returns
  The resulting track direction or INVALID_TRACKDIR if not possible.

Definition at line 449 of file track_func.h.

References DIAGDIR_END, IsValidDiagDirection(), IsValidTrack(), and TRACK_END.

static bool TrackOverlapsTracks | ( | TrackBits | tracks,
|  | Track | track
| ) |  |
| inline static

Check if a given track is contained within or overlaps some other tracks.

Parameters

  tracks | Tracks to be tested against
  track | The track to test

Returns
  true if the track is already in the tracks or overlaps the tracks.

Definition at line 650 of file track_func.h.

References HasBit(), TracksOverlap(), and TrackToTrackBits().

Referenced by IsWaitingPositionFree(), and CYapfCostRailT< Types >::ReservationCost().

static bool TracksOverlap | ( | TrackBits | bits | ) |
| inline static

Checks if the given tracks overlap, ie form a crossing.

Basically this means when there is more than one track on the tile, exept when there are two parallel tracks.

Parameters

  bits | The tracks present.

Returns
  Whether the tracks present overlap in any way.

Definition at line 633 of file track_func.h.

References KillFirstBit(), TRACK_BIT_HORZ, TRACK_BIT_NONE, and TRACK_BIT_VERT.

Referenced by AfterLoadCompanyStats(), CmdBuildSingleRail(), CmdBuildSingleSignal(), CmdConvertRail(), CmdRemoveSingleRail(), FreeTrainTrackReservation(), GetRailFoundation(), MaskWireBits(), SetTrackReservation(), TrackOverlapsTracks(), and TryReserveTrack().

static TrackdirBits TrackStatusToRedSignals | ( | TrackStatus | ts | ) |
| inline static

Returns the red-signal-information of a TrackStatus.

Note: The result may contain red signals for non-present tracks.

Parameters

  ts | The TrackStatus returned by GetTileTrackStatus()

Returns
  the The trackdirs that are blocked by red-signals

Definition at line 364 of file track_func.h.

References TRACKDIR_BIT_MASK.

Referenced by CheckRoadBlockedForOvertaking(), RoadFindPathToDest(), TrainCheckIfLineEnds(), and TrainController().

static TrackBits TrackStatusToTrackBits | ( | TrackStatus | ts | ) |
| inline static

Returns the present-track-information of a TrackStatus.

Parameters

  ts | The TrackStatus returned by GetTileTrackStatus()

Returns
  the present tracks

Definition at line 351 of file track_func.h.

References TrackdirBitsToTrackBits(), and TrackStatusToTrackdirBits().

Referenced by AfterLoadGame(), DisasterTick_Submarine(), GenericPlaceSignals(), MaskWireBits(), OPFShipChooseTrack(), RoadVehicle::TileMayHaveSlopedTrack(), and UpdateSignalsInBuffer().

static TrackdirBits TrackStatusToTrackdirBits | ( | TrackStatus | ts | ) |
| inline static

Returns the present-trackdir-information of a TrackStatus.

Parameters

  ts | The TrackStatus returned by GetTileTrackStatus()

Returns
  the present trackdirs

Definition at line 340 of file track_func.h.

References TRACKDIR_BIT_MASK.

Referenced by CheckRoadBlockedForOvertaking(), CYapfFollowShipT< Types >::CheckShipReverse(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetDriveableTrackdirBits(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::QueryNewTileTrackStatus(), RoadFindPathToDest(), CYapfFollowRoadT< Types >::SetOriginFromVehiclePos(), TrackStatusToTrackBits(), TrainCheckIfLineEnds(), TrainController(), TryPathReserve(), and YapfRoadVehicleFindNearestDepot().

static Track TrackToOppositeTrack | ( | Track | t | ) |
| inline static

Find the opposite track to a given track.

TRACK_LOWER -> TRACK_UPPER and vice versa, likewise for left/right. TRACK_X is mapped to TRACK_Y and reversed.

Parameters

  t | the track to convert

Returns
  the opposite track

Definition at line 241 of file track_func.h.

References IsValidTrack().

Referenced by GetRailReservationTrackBits().

static TrackBits TrackToTrackBits | ( | Track | track | ) |
| inline static

Maps a Track to the corresponding TrackBits value.

Parameters

  track | the track to convert

Returns
  the converted TrackBits value of the track

Definition at line 87 of file track_func.h.

References IsValidTrack().

Referenced by AdvanceWagonsAfterSwap(), AxisToTrackBits(), CmdBuildSingleRail(), CmdBuildSingleSignal(), CmdRemoveSingleRail(), CmdRemoveSingleSignal(), DiagDirToDiagTrackBits(), EnsureNoTrainOnTrack(), FixupTrainLengths(), FollowReservation(), FreeTrainTrackReservation(), GetDepotReservationTrackBits(), GetRailReservationTrackBits(), GetRailTrackBitsUniversal(), GetTrainForReservation(), RemoveFromRailBaseStation(), TrackOverlapsTracks(), TrainController(), TryReserveRailTrack(), TryReserveTrack(), UnreserveRailTrack(), and UnreserveTrack().

static Trackdir TrackToTrackdir | ( | Track | track | ) |
| inline static

Returns a Trackdir for the given Track.

Since every Track corresponds to two Trackdirs, we choose the one which points between NE and S. Note that the actual implementation is quite futile, but this might change in the future.

Parameters

  track | The given Track

Returns
  The Trackdir from the given Track

Definition at line 289 of file track_func.h.

References IsValidTrack().

Referenced by CmdRailTrackHelper(), CmdRemoveSingleSignal(), CmdSignalTrackHelper(), GetTrainForReservation(), and TrackToTrackdirBits().

static TrackdirBits TrackToTrackdirBits | ( | Track | track | ) |
| inline static

Returns a TrackdirBit mask from a given Track.

The TrackdirBit mask contains the two TrackdirBits that correspond with the given Track (one for each direction).

Parameters

  track | The track to get the TrackdirBits from

Returns
  The TrackdirBits which the selected tracks

Definition at line 304 of file track_func.h.

References ReverseTrackdir(), TrackdirToTrackdirBits(), and TrackToTrackdir().