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 VehicleType *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 VehicleType *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 VehicleType * | 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 | |
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 28 of file follow_track.hpp.
| bool CFollowTrackT< Ttr_type_, VehicleType, 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 115 of file follow_track.hpp.
References CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanEnterNewTile(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanExitOldTile(), DiagdirReachesTrackdirs(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::FollowTileExit(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::ForcedReverse(), SpecializedVehicle< RoadVehicle, VEH_ROAD >::From(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::GetSingleTramBit(), GetTileTrackStatus(), INVALID_DIAGDIR, 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_old_td, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_old_tile, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_veh, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::QueryNewTileTrackStatus(), TRACKDIR_BIT_NONE, TrackdirCrossesTrackdirs(), TrackdirToExitdir(), TrackdirToTrackdirBits(), TrackStatusToTrackdirBits(), and CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::TryReverse().
Referenced by CheckNextTrainTile(), ExtendTrainReservation(), FollowReservation(), FreeTrainTrackReservation(), IsSafeWaitingPosition(), IsWaitingPositionFree(), and CYapfCostRailT< Types >::PfCalcCost().
1.6.1