OpenTTD Source 20250312-master-gcdcc6b491d
train.h File Reference

Base for the train class. More...

#include "core/enum_type.hpp"
#include "newgrf_engine.h"
#include "cargotype.h"
#include "rail.h"
#include "engine_base.h"
#include "rail_map.h"
#include "ground_vehicle.hpp"

Go to the source code of this file.

Data Structures

struct  TrainCache
 Variables that are cached to improve performance and such. More...
 
struct  Train
 'Train' is either a loco or a wagon. More...
 

Typedefs

using ConsistChangeFlags = EnumBitSet< ConsistChangeFlag, uint8_t >
 

Enumerations

enum  VehicleRailFlags : uint8_t {
  VRF_REVERSING = 0 , VRF_POWEREDWAGON = 3 , VRF_REVERSE_DIRECTION = 4 , VRF_EL_ENGINE_ALLOWED_NORMAL_RAIL = 6 ,
  VRF_TOGGLE_REVERSE = 7 , VRF_TRAIN_STUCK = 8 , VRF_LEAVING_STATION = 9
}
 Rail vehicle flags. More...
 
enum  TrainForceProceeding : uint8_t { TFP_NONE = 0 , TFP_STUCK = 1 , TFP_SIGNAL = 2 }
 Modes for ignoring signals. More...
 
enum class  ConsistChangeFlag : uint8_t { Length , Capacity }
 Flags for Train::ConsistChanged. More...
 

Functions

uint8_t FreightWagonMult (CargoType cargo)
 Return the cargo weight multiplier to use for a rail vehicle.
 
void CheckTrainsLengths ()
 Checks if lengths of all rail vehicles are valid.
 
void FreeTrainTrackReservation (const Train *v)
 Free the reserved path in front of a vehicle.
 
bool TryPathReserve (Train *v, bool mark_as_stuck=false, bool first_tile_okay=false)
 Try to reserve a path to a safe position.
 
int GetTrainStopLocation (StationID station_id, TileIndex tile, const Train *v, int *station_ahead, int *station_length)
 Get the stop location of (the center) of the front vehicle of a train at a platform of a station.
 
void GetTrainSpriteSize (EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
 Get the size of the sprite of a train sprite heading west, or both heads (used for lists).
 
bool TrainOnCrossing (TileIndex tile)
 Check if a level crossing tile has a train on it.
 
void NormalizeTrainVehInDepot (const Train *u)
 Move all free vehicles in the depot to the train.
 

Variables

static constexpr ConsistChangeFlags CCF_TRACK {}
 Valid changes while vehicle is driving, and possibly changing tracks.
 
static constexpr ConsistChangeFlags CCF_LOADUNLOAD {}
 Valid changes while vehicle is loading/unloading.
 
static constexpr ConsistChangeFlags CCF_AUTOREFIT {ConsistChangeFlag::Capacity}
 Valid changes for autorefitting in stations.
 
static constexpr ConsistChangeFlags CCF_REFIT {ConsistChangeFlag::Length, ConsistChangeFlag::Capacity}
 Valid changes for refitting in a depot.
 
static constexpr ConsistChangeFlags CCF_ARRANGE {ConsistChangeFlag::Length, ConsistChangeFlag::Capacity}
 Valid changes for arranging the consist in a depot.
 
static constexpr ConsistChangeFlags CCF_SAVELOAD {ConsistChangeFlag::Length}
 Valid changes when loading a savegame. (Everything that is not stored in the save.)
 

Detailed Description

Base for the train class.

Definition in file train.h.

Typedef Documentation

◆ ConsistChangeFlags

Definition at line 49 of file train.h.

Enumeration Type Documentation

◆ ConsistChangeFlag

enum class ConsistChangeFlag : uint8_t
strong

Flags for Train::ConsistChanged.

Enumerator
Length 

Allow vehicles to change length.

Capacity 

Allow vehicles to change capacity.

Definition at line 44 of file train.h.

◆ TrainForceProceeding

enum TrainForceProceeding : uint8_t

Modes for ignoring signals.

Enumerator
TFP_NONE 

Normal operation.

TFP_STUCK 

Proceed till next signal, but ignore being stuck till then. This includes force leaving depots.

TFP_SIGNAL 

Ignore next signal, after the signal ignore being stuck.

Definition at line 37 of file train.h.

◆ VehicleRailFlags

enum VehicleRailFlags : uint8_t

Rail vehicle flags.

Enumerator
VRF_POWEREDWAGON 

Wagon is powered.

VRF_REVERSE_DIRECTION 

Reverse the visible direction of the vehicle.

VRF_EL_ENGINE_ALLOWED_NORMAL_RAIL 

Electric train engine is allowed to run on normal rail. *‍/.

VRF_TOGGLE_REVERSE 

Used for vehicle var 0xFE bit 8 (toggled each time the train is reversed, accurate for first vehicle only).

VRF_TRAIN_STUCK 

Train can't get a path reservation.

VRF_LEAVING_STATION 

Train is just leaving a station.

Definition at line 25 of file train.h.

Function Documentation

◆ CheckTrainsLengths()

void CheckTrainsLengths ( )

Checks if lengths of all rail vehicles are valid.

If not, shows an error message.

Definition at line 76 of file train_cmd.cpp.

References _networking, abs(), Crashed, Error, GetEncodedString(), SpecializedVehicle< T, Type >::Iterate(), SpecializedVehicle< T, Type >::Next(), ShowErrorMessage(), TicksToLeaveDepot(), TRACK_BIT_DEPOT, and WL_CRITICAL.

Referenced by InitializeWindowsAndCaches(), and ReloadNewGRFData().

◆ FreeTrainTrackReservation()

void FreeTrainTrackReservation ( const Train v)

Free the reserved path in front of a vehicle.

Parameters
vTrain owning the reserved path.

Definition at line 2386 of file train_cmd.cpp.

References AddSideToSignalBuffer(), ClearPathReservation(), RailTypeInfo::compatible_railtypes, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetRailDepotDirection(), GetRailTypeInfo(), GetReservedTrackbits(), GetSignalStateByTrackdir(), GetStationIndex(), Train::GetVehicleTrackdir(), HasPbsSignalOnTrackdir(), HasSignalOnTrackdir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::is_bridge, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::is_station, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::is_tunnel, Vehicle::IsFrontEngine(), IsOnewaySignal(), IsRailDepotTile(), IsRailStationTile(), IsTileType(), IsValidTrackdir(), MarkTileDirtyByTile(), MP_RAILWAY, MP_TUNNELBRIDGE, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::new_td_bits, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::new_tile, SpecializedVehicle< T, Type >::Next(), Vehicle::owner, RemoveFirstTrackdir(), ReverseTrackdir(), SetSignalStateByTrackdir(), SIGNAL_STATE_RED, Vehicle::tile, TRACK_BIT_DEPOT, TrackBitsToTrackdirBits(), TRACKDIR_BIT_NONE, TrackdirToExitdir(), TrackdirToTrack(), TracksOverlap(), TrackToTrackBits(), UnreserveRailTrack(), and UpdateSignalsInBuffer().

Referenced by CmdBuildSingleSignal(), CmdConvertRail(), CmdRemoveSingleRail(), Train::Crash(), DoClearBridge(), DoClearTunnel(), FreeTrainReservation(), and ReverseTrainDirection().

◆ FreightWagonMult()

uint8_t FreightWagonMult ( CargoType  cargo)

Return the cargo weight multiplier to use for a rail vehicle.

Parameters
cargoCargo type to get multiplier for
Returns
Cargo weight multiplier

Definition at line 69 of file train_cmd.cpp.

References _settings_game, VehicleSettings::freight_trains, CargoSpec::Get(), and GameSettings::vehicle.

Referenced by DrawTrainDetails(), TrainDetailsCapacityTab(), and TrainDetailsCargoTab().

◆ GetTrainSpriteSize()

void GetTrainSpriteSize ( EngineID  engine,
uint &  width,
uint &  height,
int &  xoffs,
int &  yoffs,
EngineImageType  image_type 
)

Get the size of the sprite of a train sprite heading west, or both heads (used for lists).

Parameters
engineThe engine to get the sprite from.
[out]widthThe width of the sprite.
[out]heightThe height of the sprite.
[out]xoffsNumber of pixels to shift the sprite to the right.
[out]yoffsNumber of pixels to shift the sprite downwards.
image_typeContext the sprite is used in.

Definition at line 579 of file train_cmd.cpp.

References VehicleSpriteSeq::GetBounds(), Rect::Height(), RAILVEH_MULTIHEAD, ScaleSpriteTrad(), UnScaleGUI(), and Rect::Width().

Referenced by EnginePreviewWindow::UpdateWidgetSize().

◆ GetTrainStopLocation()

int GetTrainStopLocation ( StationID  station_id,
TileIndex  tile,
const Train v,
int *  station_ahead,
int *  station_length 
)

Get the stop location of (the center) of the front vehicle of a train at a platform of a station.

Parameters
station_idthe ID of the station where we're stopping
tilethe tile where the vehicle currently is
vthe vehicle to get the stop location of
station_ahead'return' the amount of 1/16th tiles in front of the train
station_length'return' the station length in 1/16th tiles
Returns
the location, calculated from the begin of the station to stop at.

Definition at line 261 of file train_cmd.cpp.

References GroundVehicleCache::cached_total_length, GroundVehicleCache::cached_veh_length, Vehicle::current_order, Vehicle::direction, DirToDiagDir(), GroundVehicle< T, Type >::gcache, SpecializedStation< Station, false >::Get(), Order::GetDestination(), Station::GetPlatformLength(), Order::GetStopLocation(), Order::IsType(), OSL_PLATFORM_FAR_END, OSL_PLATFORM_MIDDLE, OSL_PLATFORM_NEAR_END, and TILE_SIZE.

Referenced by Train::GetCurrentMaxSpeed().

◆ NormalizeTrainVehInDepot()

void NormalizeTrainVehInDepot ( const Train u)

◆ TrainOnCrossing()

bool TrainOnCrossing ( TileIndex  tile)

Check if a level crossing tile has a train on it.

Parameters
tiletile to test
Returns
true if a train is on the crossing
Precondition
tile is a level crossing

Definition at line 1683 of file train_cmd.cpp.

References HasVehicleOnPos(), IsLevelCrossingTile(), and TrainOnTileEnum().

Referenced by CheckLevelCrossing().

◆ TryPathReserve()

Variable Documentation

◆ CCF_ARRANGE

Valid changes for arranging the consist in a depot.

Definition at line 55 of file train.h.

Referenced by CmdBuildRailVehicle(), CmdBuildRailWagon(), CmdReverseTrainDirection(), DeleteLastWagon(), NormaliseTrainHead(), and VehicleEnterDepot().

◆ CCF_AUTOREFIT

constexpr ConsistChangeFlags CCF_AUTOREFIT {ConsistChangeFlag::Capacity}
staticconstexpr

Valid changes for autorefitting in stations.

Definition at line 53 of file train.h.

Referenced by CmdRefitVehicle().

◆ CCF_LOADUNLOAD

constexpr ConsistChangeFlags CCF_LOADUNLOAD {}
staticconstexpr

Valid changes while vehicle is loading/unloading.

Definition at line 52 of file train.h.

Referenced by TransferCargo().

◆ CCF_REFIT

Valid changes for refitting in a depot.

Definition at line 54 of file train.h.

Referenced by CmdRefitVehicle().

◆ CCF_SAVELOAD

constexpr ConsistChangeFlags CCF_SAVELOAD {ConsistChangeFlag::Length}
staticconstexpr

Valid changes when loading a savegame. (Everything that is not stored in the save.)

Definition at line 56 of file train.h.

Referenced by AfterLoadVehiclesPhase2().

◆ CCF_TRACK

constexpr ConsistChangeFlags CCF_TRACK {}
staticconstexpr

Valid changes while vehicle is driving, and possibly changing tracks.

Definition at line 51 of file train.h.

Referenced by CheckCaches(), CmdConvertRail(), FixupTrainLengths(), ReverseTrainDirection(), and TrainController().