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:

Generated on Mon Feb 16 23:12:35 2009 for openttd by  doxygen 1.5.6