# CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks > Struct Template Reference

Track follower helper template class (can serve pathfinders and vehicle controllers). More...

`#include <follow_track.hpp>`

## Public Types

enum | ErrorCode { EC_NONE, EC_OWNER, EC_RAIL_TYPE, EC_90DEG, EC_NO_WAY, EC_RESERVED }

## Public Member Functions

FORCEINLINE | CFollowTrackT (const Vehicle *v=NULL, RailTypes railtype_override=INVALID_RAILTYPES, CPerformanceTimer *pPerf=NULL)
FORCEINLINE | CFollowTrackT (Owner o, RailTypes railtype_override=INVALID_RAILTYPES, CPerformanceTimer *pPerf=NULL)
FORCEINLINE void | Init (const Vehicle *v, RailTypes railtype_override, CPerformanceTimer *pPerf)
FORCEINLINE void | Init (Owner o, RailTypes railtype_override, CPerformanceTimer *pPerf)
FORCEINLINE bool | IsTram ()
FORCEINLINE DiagDirection | GetSingleTramBit (TileIndex tile)
| Tests if a tile is a road tile with a single tramtrack (tram can reverse).
bool | Follow (TileIndex old_tile, Trackdir old_td)
| main follower routine.
bool | MaskReservedTracks ()
int | GetSpeedLimit (int *pmin_speed=NULL) const
| Helper for pathfinders - get min/max speed on the m_old_tile/m_old_td.

## Static Public Member Functions

static FORCEINLINE TransportType | TT ()
static FORCEINLINE bool | IsWaterTT ()
static FORCEINLINE bool | IsRailTT ()
static FORCEINLINE bool | IsRoadTT ()
static FORCEINLINE bool | Allow90degTurns ()
static FORCEINLINE bool | DoTrackMasking ()

## Data Fields

const Vehicle * | m_veh
| moving vehicle
Owner | m_veh_owner
| owner of the vehicle
TileIndex | m_old_tile
| the origin (vehicle moved from) before move
Trackdir | m_old_td
| the trackdir (the vehicle was on) before move
TileIndex | m_new_tile
| the new tile (the vehicle has entered)
TrackdirBits | m_new_td_bits
| the new set of available trackdirs
DiagDirection | m_exitdir
| exit direction (leaving the old tile)
bool | m_is_tunnel
| last turn passed tunnel
bool | m_is_bridge
| last turn passed bridge ramp
bool | m_is_station
| last turn passed station
int | m_tiles_skipped
| number of skipped tunnel or station tiles
ErrorCode | m_err
CPerformanceTimer * | m_pPerf
RailTypes | m_railtypes

## Protected Member Functions

FORCEINLINE void | FollowTileExit ()
| Follow the m_exitdir from m_old_tile and fill m_new_tile and m_tiles_skipped.
FORCEINLINE bool | QueryNewTileTrackStatus ()
| stores track status (available trackdirs) for the new tile into m_new_td_bits
FORCEINLINE bool | CanExitOldTile ()
| return true if we can leave m_old_tile in m_exitdir
FORCEINLINE bool | CanEnterNewTile ()
| return true if we can enter m_new_tile from m_exitdir
FORCEINLINE bool | ForcedReverse ()
| return true if we must reverse (in depots and single tram bits)
FORCEINLINE bool | TryReverse ()
| return true if we successfully reversed at end of road/track

## Detailed Description

### template<TransportType Ttr_type_, bool T90deg_turns_allowed_ = true, bool Tmask_reserved_tracks = false>
struct CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >

Track follower helper template class (can serve pathfinders and vehicle controllers).

See 6 different typedefs below for 3 different transport types w/ or w/o 90-deg turns allowed

Definition at line 15 of file follow_track.hpp.

## Member Function Documentation

template<TransportType Ttr_type_, bool T90deg_turns_allowed_ = true, bool Tmask_reserved_tracks = false>

bool CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow | ( | TileIndex | old_tile,
|  | Trackdir | old_td |
| ) |  |  | `[inline]`

main follower routine.

Fills all members and return true on success. Otherwise returns false if track can't be followed.

Definition at line 102 of file follow_track.hpp.

References CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanEnterNewTile(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanExitOldTile(), DiagdirReachesTrackdirs(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::FollowTileExit(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::ForcedReverse(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::GetSingleTramBit(), GetTileTrackStatus(), INVALID_DIAGDIR, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_exitdir, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_td_bits, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_old_td, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_old_tile, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_veh, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::QueryNewTileTrackStatus(), TRACKDIR_BIT_NONE, TrackdirCrossesTrackdirs(), TrackdirToExitdir(), TrackdirToTrackdirBits(), TrackStatusToTrackdirBits(), and CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::TryReverse().

Referenced by CheckNextTrainTile(), ExtendTrainReservation(), FollowReservation(), FreeTrainTrackReservation(), IsSafeWaitingPosition(), and IsWaitingPositionFree().

The documentation for this struct was generated from the following file:

- src/yapf/follow_track.hpp