OpenTTD Source
20241120-master-g6d3adc6169
|
Handling of trains. More...
#include "stdafx.h"
#include "error.h"
#include "articulated_vehicles.h"
#include "command_func.h"
#include "error_func.h"
#include "pathfinder/yapf/yapf.hpp"
#include "news_func.h"
#include "company_func.h"
#include "newgrf_sound.h"
#include "newgrf_text.h"
#include "strings_func.h"
#include "viewport_func.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
#include "newgrf_station.h"
#include "effectvehicle_func.h"
#include "network/network.h"
#include "spritecache.h"
#include "core/random_func.hpp"
#include "company_base.h"
#include "newgrf.h"
#include "order_backup.h"
#include "zoom_func.h"
#include "newgrf_debug.h"
#include "framerate_type.h"
#include "train_cmd.h"
#include "misc_cmd.h"
#include "timer/timer_game_calendar.h"
#include "timer/timer_game_economy.h"
#include "table/strings.h"
#include "table/train_sprites.h"
#include "safeguards.h"
Go to the source code of this file.
Data Structures | |
class | VehicleOrderSaver |
This class will save the current order of a vehicle and restore it on destruction. More... | |
struct | AccelerationSlowdownParams |
Data structure for storing engine speed changes of an acceleration type. More... | |
struct | TrainCollideChecker |
Temporary data storage for testing collisions. More... | |
Typedefs | |
typedef std::vector< Train * > | TrainList |
Helper type for lists/vectors of trains. | |
Functions | |
static Track | ChooseTrainTrack (Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool force_res, bool *got_reservation, bool mark_stuck) |
static bool | TrainCheckIfLineEnds (Train *v, bool reverse) |
Checks for line end. More... | |
bool | TrainController (Train *v, Vehicle *nomove, bool reverse) |
Move a vehicle chain one movement stop forwards. More... | |
static TileIndex | TrainApproachingCrossingTile (const Train *v) |
Determines whether train is approaching a rail-road crossing (thus making it barred) More... | |
static void | CheckIfTrainNeedsService (Train *v) |
Check whether a train needs service, and if so, find a depot or service it. More... | |
static void | CheckNextTrainTile (Train *v) |
Check if the train is on the last reserved tile and try to extend the path then. More... | |
template<> | |
bool | IsValidImageIndex< VEH_TRAIN > (uint8_t image_index) |
uint8_t | FreightWagonMult (CargoID cargo) |
Return the cargo weight multiplier to use for a rail vehicle. More... | |
void | CheckTrainsLengths () |
Checks if lengths of all rail vehicles are valid. More... | |
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. More... | |
static SpriteID | GetDefaultTrainSprite (uint8_t spritenum, Direction direction) |
static void | GetRailIcon (EngineID engine, bool rear_head, int &y, EngineImageType image_type, VehicleSpriteSeq *result) |
void | DrawTrainEngine (int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) |
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). More... | |
static CommandCost | CmdBuildRailWagon (DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **ret) |
Build a railroad wagon. More... | |
void | NormalizeTrainVehInDepot (const Train *u) |
Move all free vehicles in the depot to the train. | |
static void | AddRearEngineToMultiheadedTrain (Train *v) |
CommandCost | CmdBuildRailVehicle (DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **ret) |
Build a railroad vehicle. More... | |
static Train * | FindGoodVehiclePos (const Train *src) |
static void | MakeTrainBackup (TrainList &list, Train *t) |
Make a backup of a train into a train list. More... | |
static void | RestoreTrainBackup (TrainList &list) |
Restore the train from the backup list. More... | |
static void | RemoveFromConsist (Train *part, bool chain=false) |
Remove the given wagon from its consist. More... | |
static void | InsertInConsist (Train *dst, Train *chain) |
Inserts a chain into the train at dst. More... | |
static void | NormaliseDualHeads (Train *t) |
Normalise the dual heads in the train, i.e. More... | |
static void | NormaliseSubtypes (Train *chain) |
Normalise the sub types of the parts in this chain. More... | |
static CommandCost | CheckNewTrain (Train *original_dst, Train *dst, Train *original_src, Train *src) |
Check/validate whether we may actually build a new train. More... | |
static CommandCost | CheckTrainAttachment (Train *t) |
Check whether the train parts can be attached. More... | |
static CommandCost | ValidateTrains (Train *original_dst, Train *dst, Train *original_src, Train *src, bool check_limit) |
Validate whether we are going to create valid trains. More... | |
static void | ArrangeTrains (Train **dst_head, Train *dst, Train **src_head, Train *src, bool move_chain) |
Arrange the trains in the wanted way. More... | |
static void | NormaliseTrainHead (Train *head) |
Normalise the head of the train again, i.e. More... | |
CommandCost | CmdMoveRailVehicle (DoCommandFlag flags, VehicleID src_veh, VehicleID dest_veh, bool move_chain) |
Move a rail vehicle around inside the depot. More... | |
CommandCost | CmdSellRailWagon (DoCommandFlag flags, Vehicle *t, bool sell_chain, bool backup_order, ClientID user) |
Sell a (single) train wagon/engine. More... | |
static void | MarkTrainAsStuck (Train *v) |
Mark a train as stuck and stop it if it isn't stopped right now. More... | |
static void | SwapTrainFlags (uint16_t *swap_flag1, uint16_t *swap_flag2) |
Swap the two up/down flags in two ways: More... | |
static void | UpdateStatusAfterSwap (Train *v) |
Updates some variables after swapping the vehicle. More... | |
void | ReverseTrainSwapVeh (Train *v, int l, int r) |
Swap vehicles l and r in consist v, and reverse their direction. More... | |
static Vehicle * | TrainOnTileEnum (Vehicle *v, void *) |
Check if the vehicle is a train. More... | |
bool | TrainOnCrossing (TileIndex tile) |
Check if a level crossing tile has a train on it. More... | |
static Vehicle * | TrainApproachingCrossingEnum (Vehicle *v, void *data) |
Checks if a train is approaching a rail-road crossing. More... | |
static bool | TrainApproachingCrossing (TileIndex tile) |
Finds a vehicle approaching rail-road crossing. More... | |
static bool | CheckLevelCrossing (TileIndex tile) |
Check if a level crossing should be barred. More... | |
static void | UpdateLevelCrossingTile (TileIndex tile, bool sound, bool force_barred) |
Sets a level crossing tile to the correct state. More... | |
void | UpdateLevelCrossing (TileIndex tile, bool sound, bool force_bar) |
Update a level crossing to barred or open (crossing may include multiple adjacent tiles). More... | |
void | MarkDirtyAdjacentLevelCrossingTiles (TileIndex tile, Axis road_axis) |
Find adjacent level crossing tiles in this multi-track crossing and mark them dirty. More... | |
void | UpdateAdjacentLevelCrossingTilesOnLevelCrossingRemoval (TileIndex tile, Axis road_axis) |
Update adjacent level crossing tiles in this multi-track crossing, due to removal of a level crossing tile. More... | |
static void | MaybeBarCrossingWithSound (TileIndex tile) |
Bars crossing and plays ding-ding sound if not barred already. More... | |
static void | AdvanceWagonsBeforeSwap (Train *v) |
Advances wagons for train reversing, needed for variable length wagons. More... | |
static void | AdvanceWagonsAfterSwap (Train *v) |
Advances wagons for train reversing, needed for variable length wagons. More... | |
static bool | IsWholeTrainInsideDepot (const Train *v) |
void | ReverseTrainDirection (Train *v) |
Turn a train around. More... | |
CommandCost | CmdReverseTrainDirection (DoCommandFlag flags, VehicleID veh_id, bool reverse_single_veh) |
Reverse train. More... | |
CommandCost | CmdForceTrainProceed (DoCommandFlag flags, VehicleID veh_id) |
Force a train through a red signal. More... | |
static FindDepotData | FindClosestTrainDepot (Train *v, int max_distance) |
Try to find a depot nearby. More... | |
static bool | CheckTrainStayInDepot (Train *v) |
Will the train stay in the depot the next tick? More... | |
static void | ClearPathReservation (const Train *v, TileIndex tile, Trackdir track_dir) |
Clear the reservation of tile that was just left by a wagon on track_dir. More... | |
void | FreeTrainTrackReservation (const Train *v) |
Free the reserved path in front of a vehicle. More... | |
static Track | DoTrainPathfind (const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool do_track_reservation, PBSTileInfo *dest, TileIndex *final_dest) |
Perform pathfinding for a train. More... | |
static PBSTileInfo | ExtendTrainReservation (const Train *v, TrackBits *new_tracks, DiagDirection *enterdir) |
Extend a train path as far as possible. More... | |
static bool | TryReserveSafeTrack (const Train *v, TileIndex tile, Trackdir td, bool override_railtype) |
Try to reserve any path to a safe tile, ignoring the vehicle's destination. More... | |
bool | TryPathReserve (Train *v, bool mark_as_stuck, bool first_tile_okay) |
Try to reserve a path to a safe position. More... | |
static bool | CheckReverseTrain (const Train *v) |
static void | TrainEnterStation (Train *v, StationID station) |
Trains enters a station, send out a news item if it is the first train, and start loading. More... | |
static bool | CheckCompatibleRail (const Train *v, TileIndex tile) |
static void | AffectSpeedByZChange (Train *v, int old_z) |
Modify the speed of the vehicle due to a change in altitude. More... | |
static bool | TrainMovedChangeSignals (TileIndex tile, DiagDirection dir) |
static uint | TrainCrashed (Train *v) |
Marks train as crashed and creates an AI event. More... | |
static Vehicle * | FindTrainCollideEnum (Vehicle *v, void *data) |
Collision test function. More... | |
static bool | CheckTrainCollision (Train *v) |
Checks whether the specified train has a collision with another vehicle. More... | |
static Vehicle * | CheckTrainAtSignal (Vehicle *v, void *data) |
static Vehicle * | CollectTrackbitsFromCrashedVehiclesEnum (Vehicle *v, void *data) |
Collect trackbits of all crashed train vehicles on a tile. More... | |
static bool | IsRailStationPlatformOccupied (TileIndex tile) |
static void | DeleteLastWagon (Train *v) |
Deletes/Clears the last wagon of a crashed train. More... | |
static void | ChangeTrainDirRandomly (Train *v) |
Rotate all vehicles of a (crashed) train chain randomly to animate the crash. More... | |
static bool | HandleCrashedTrain (Train *v) |
Handle a crashed train. More... | |
static bool | TrainApproachingLineEnd (Train *v, bool signal, bool reverse) |
Train is approaching line end, slow down and possibly reverse. More... | |
static bool | TrainCanLeaveTile (const Train *v) |
Determines whether train would like to leave the tile. More... | |
static bool | TrainLocoHandler (Train *v, bool mode) |
Variables | |
static const uint8_t | _vehicle_initial_x_fract [4] = {10, 8, 4, 8} |
static const uint8_t | _vehicle_initial_y_fract [4] = { 8, 4, 8, 10} |
static const uint8_t | _initial_tile_subcoord [6][4][3] |
static const AccelerationSlowdownParams | _accel_slowdown [] |
Speed update fractions for each acceleration type. More... | |
static const uint16_t | _breakdown_speeds [16] |
Maximum speeds for train that is broken down or approaching line end. More... | |
Handling of trains.
Definition in file train_cmd.cpp.
|
static |
Advances wagons for train reversing, needed for variable length wagons.
This one is called after the train is reversed.
v | First vehicle in chain |
Definition at line 1902 of file train_cmd.cpp.
References GetRailDepotTrack(), SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), TicksToLeaveDepot(), Vehicle::tile, TRACK_BIT_DEPOT, TrackToTrackBits(), TrainController(), Vehicle::vehstatus, and VS_HIDDEN.
|
static |
Advances wagons for train reversing, needed for variable length wagons.
This one is called before the train is reversed.
v | First vehicle in chain |
Definition at line 1874 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::Last().
|
inlinestatic |
Modify the speed of the vehicle due to a change in altitude.
v | Train to update. |
old_z | Previous height. |
Definition at line 3059 of file train_cmd.cpp.
References _settings_game, VehicleSettings::train_acceleration_model, GameSettings::vehicle, and Vehicle::z_pos.
|
static |
Arrange the trains in the wanted way.
dst_head | The destination chain of the to be moved vehicle. |
dst | The destination for the to be moved vehicle. |
src_head | The source chain of the to be moved vehicle. |
src | The to be moved vehicle. |
move_chain | Whether to move all vehicles after src or not. |
Definition at line 1122 of file train_cmd.cpp.
References Train::GetNextUnit(), SpecializedVehicle< T, Type >::GetNextVehicle(), InsertInConsist(), GroundVehicle< T, Type >::IsMultiheaded(), NormaliseDualHeads(), and RemoveFromConsist().
Referenced by CmdSellRailWagon().
|
static |
Rotate all vehicles of a (crashed) train chain randomly to animate the crash.
v | First crashed vehicle. |
Definition at line 3707 of file train_cmd.cpp.
References ChangeDir(), DIRDIFF_45LEFT, DIRDIFF_45RIGHT, DIRDIFF_SAME, Vehicle::direction, GB(), Vehicle::vehstatus, and VS_HIDDEN.
|
static |
Check whether a train needs service, and if so, find a depot or service it.
Definition at line 4138 of file train_cmd.cpp.
References _settings_game, FindDepotData::best_length, Vehicle::current_order, FindClosestTrainDepot(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GroundVehicle< T, Type >::IsChainInDepot(), Order::IsType(), YAPFSettings::maximum_go_to_depot_penalty, Vehicle::NeedsAutomaticServicing(), Vehicle::owner, GameSettings::pf, VehicleServiceInDepot(), and PathfinderSettings::yapf.
|
inlinestatic |
Check if a level crossing should be barred.
tile | The tile to check. |
Definition at line 1738 of file train_cmd.cpp.
References HasCrossingReservation(), TrainApproachingCrossing(), and TrainOnCrossing().
Referenced by UpdateAdjacentLevelCrossingTilesOnLevelCrossingRemoval(), UpdateLevelCrossing(), and UpdateLevelCrossingTile().
|
static |
Check/validate whether we may actually build a new train.
original_dst | The original destination chain. |
dst | The destination chain after constructing the train. |
original_src | The original source chain. |
src | The source chain after constructing the train. |
Definition at line 969 of file train_cmd.cpp.
References _settings_game, GetFreeUnitNumber(), GroundVehicle< T, Type >::IsEngine(), VehicleSettings::max_trains, return_cmd_error, VEH_TRAIN, and GameSettings::vehicle.
Referenced by ValidateTrains().
|
static |
Check if the train is on the last reserved tile and try to extend the path then.
v | Train that needs its path extended. |
Definition at line 2201 of file train_cmd.cpp.
References _settings_game, Vehicle::current_order, Order::GetType(), PathfinderSettings::path_backoff_interval, GameSettings::pf, and TRACK_BIT_DEPOT.
|
static |
Check whether the train parts can be attached.
t | the train to check |
Definition at line 993 of file train_cmd.cpp.
References _settings_game, GroundVehicleCache::cached_veh_length, GroundVehicleCache::first_engine, GroundVehicle< T, Type >::gcache, INVALID_ENGINE, Vehicle::InvalidateNewGRFCache(), Vehicle::IsArticulatedPart(), GroundVehicle< T, Type >::IsEngine(), GroundVehicle< T, Type >::IsRearDualheaded(), VehicleSettings::max_train_length, SpecializedVehicle< T, Type >::Next(), return_cmd_error, Vehicle::SetNext(), TILE_SIZE, and GameSettings::vehicle.
Referenced by ValidateTrains().
|
static |
Checks whether the specified train has a collision with another vehicle.
If so, destroys this vehicle, and the other vehicle if its subtype has TS_Front. Reports the incident in a flashy news item, modifies station ratings and plays a sound.
v | Train to test. |
Definition at line 3226 of file train_cmd.cpp.
References FindTrainCollideEnum(), FindVehicleOnPos(), FindVehicleOnPosXY(), GetOtherTunnelBridgeEnd(), TrainCollideChecker::num, SetDParam(), Vehicle::tile, TileVirtXY(), TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, TrainCollideChecker::v, Vehicle::x_pos, and Vehicle::y_pos.
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(), INVALID_STRING_ID, SpecializedVehicle< T, Type >::Iterate(), SpecializedVehicle< T, Type >::Next(), PM_PAUSED_ERROR, SetDParam(), ShowErrorMessage(), TicksToLeaveDepot(), TRACK_BIT_DEPOT, VS_CRASHED, and WL_CRITICAL.
|
static |
Will the train stay in the depot the next tick?
v | Train to check. |
Definition at line 2263 of file train_cmd.cpp.
References _settings_game, GroundVehicleCache::cached_power, Vehicle::current_order, GroundVehicle< T, Type >::gcache, HasDepotReservation(), INVALID_DIAGDIR, Order::IsType(), Vehicle::IsWaitingForUnbunching(), SpecializedVehicle< T, Type >::Next(), Vehicle::owner, GameSettings::pf, PathfinderSettings::reserve_paths, SetWindowClassesDirty(), SetWindowDirty(), SIGSEG_FULL, SIGSEG_PBS, TFP_NONE, Vehicle::tile, TRACK_BIT_DEPOT, UpdateSignalsOnSegment(), Vehicle::vehstatus, VS_STOPPED, Train::wait_counter, WC_TRAINS_LIST, and WC_VEHICLE_DEPOT.
Clear the reservation of tile that was just left by a wagon on track_dir.
v | Train owning the reservation. |
tile | Tile with reservation to clear. |
track_dir | Track direction to clear. |
Definition at line 2345 of file train_cmd.cpp.
References _settings_client, GetOtherTunnelBridgeEnd(), GetTunnelBridgeDirection(), ClientSettings::gui, IsBridge(), IsCompatibleTrainStationTile(), IsRailStationTile(), IsTileType(), MarkBridgeDirty(), MarkTileDirtyByTile(), MP_TUNNELBRIDGE, ReverseDiagDir(), SetRailStationPlatformReservation(), SetTunnelBridgeReservation(), GUISettings::show_track_reservation, TileAddByDiagDir(), TrackdirToExitdir(), TrackdirToTrack(), TunnelBridgeIsFree(), and UnreserveRailTrack().
Referenced by Train::Crash().
CommandCost CmdBuildRailVehicle | ( | DoCommandFlag | flags, |
TileIndex | tile, | ||
const Engine * | e, | ||
Vehicle ** | ret | ||
) |
Build a railroad vehicle.
flags | type of operation. | |
tile | tile of the depot where rail-vehicle is built. | |
e | the engine to build. | |
[out] | ret | the vehicle that has been built. |
Definition at line 750 of file train_cmd.cpp.
References CMD_ERROR, CmdBuildRailWagon(), DC_EXEC, GetRailDepotDirection(), GetRailType(), HasPowerOnRail(), RailVehicleInfo::railtype, and RAILVEH_WAGON.
|
static |
Build a railroad wagon.
flags | type of operation. | |
tile | tile of the depot where rail-vehicle is built. | |
e | the engine to build. | |
[out] | ret | the vehicle that has been built. |
< Same depot
< A free wagon chain
< Same type
< Don't connect to ourself
< Not crashed/flooded
Definition at line 616 of file train_cmd.cpp.
References CMD_ERROR, DC_EXEC, DiagDirToDir(), Vehicle::direction, Vehicle::engine_type, GroundVehicleCache::first_engine, GroundVehicle< T, Type >::gcache, GetRailDepotDirection(), GetRailType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_ENGINE, IsCompatibleRail(), RailVehicleInfo::railtype, Vehicle::spritenum, and Vehicle::tile.
Referenced by CmdBuildRailVehicle().
CommandCost CmdForceTrainProceed | ( | DoCommandFlag | flags, |
VehicleID | veh_id | ||
) |
Force a train through a red signal.
flags | type of operation |
veh_id | train to ignore the red signal |
Definition at line 2132 of file train_cmd.cpp.
References CheckOwnership(), CMD_ERROR, DC_EXEC, CommandCost::Failed(), SpecializedVehicle< T, Type >::GetIfValid(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, GroundVehicle< T, Type >::IsChainInDepot(), Train::IsPrimaryVehicle(), Vehicle::owner, BaseConsist::ResetDepotUnbunching(), SetWindowDirty(), TFP_NONE, TFP_SIGNAL, TFP_STUCK, VRF_TRAIN_STUCK, and WC_VEHICLE_VIEW.
CommandCost CmdMoveRailVehicle | ( | DoCommandFlag | flags, |
VehicleID | src_veh, | ||
VehicleID | dest_veh, | ||
bool | move_chain | ||
) |
Move a rail vehicle around inside the depot.
flags | type of operation Note: DC_AUTOREPLACE is set when autoreplace tries to undo its modifications or moves vehicles to temporary locations inside the depot. |
src_veh | source vehicle index |
dest_veh | what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line |
move_chain | move all vehicles following the source vehicle |
Definition at line 1193 of file train_cmd.cpp.
References CheckOwnership(), CMD_ERROR, DC_AUTOREPLACE, CommandCost::Failed(), SpecializedVehicle< T, Type >::GetIfValid(), INVALID_VEHICLE, GroundVehicle< T, Type >::IsEngine(), Vehicle::owner, Vehicle::vehstatus, and VS_CRASHED.
CommandCost CmdReverseTrainDirection | ( | DoCommandFlag | flags, |
VehicleID | veh_id, | ||
bool | reverse_single_veh | ||
) |
Reverse train.
flags | type of operation |
veh_id | train to reverse |
reverse_single_veh | if true, reverse a unit in a train (needs to be in a depot) |
Definition at line 2059 of file train_cmd.cpp.
References CheckOwnership(), CMD_ERROR, CommandCost::Failed(), SpecializedVehicle< T, Type >::GetIfValid(), HasBit(), GroundVehicle< T, Type >::IsMultiheaded(), and Vehicle::owner.
CommandCost CmdSellRailWagon | ( | DoCommandFlag | flags, |
Vehicle * | t, | ||
bool | sell_chain, | ||
bool | backup_order, | ||
ClientID | user | ||
) |
Sell a (single) train wagon/engine.
flags | type of operation |
t | the train wagon to sell |
sell_chain | the selling mode
|
backup_order | make order backup? |
user | the user for the order backup. |
Definition at line 1391 of file train_cmd.cpp.
References CommandCost::AddCost(), Vehicle::AddToShared(), ArrangeTrains(), OrderBackup::Backup(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::CanAllocateItem(), Vehicle::CopyVehicleConfigAndStatistics(), GroupStatistics::CountVehicle(), DC_AUTOREPLACE, DC_EXEC, DeleteVehicleOrders(), EXPENSES_NEW_VEHICLES, CommandCost::Failed(), SpecializedVehicle< T, Type >::First(), SpecializedVehicle< T, Type >::From(), InvalidateWindowClassesData(), InvalidateWindowData(), GroundVehicle< T, Type >::IsEngine(), Vehicle::IsFrontEngine(), Train::IsPrimaryVehicle(), GroundVehicle< T, Type >::IsRearDualheaded(), MakeTrainBackup(), SpecializedVehicle< T, Type >::Next(), NormaliseSubtypes(), NormaliseTrainHead(), Vehicle::orders, RestoreTrainBackup(), return_cmd_error, Vehicle::tile, ValidateTrains(), WC_TRAINS_LIST, and WC_VEHICLE_DEPOT.
Referenced by CmdSellVehicle().
Collect trackbits of all crashed train vehicles on a tile.
v | Vehicle passed from Find/HasVehicleOnPos() |
data | trackdirbits for the result |
Definition at line 3599 of file train_cmd.cpp.
References DiagDirToDiagTrackBits(), SpecializedVehicle< T, Type >::From(), GetTunnelBridgeDirection(), Vehicle::tile, TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, BaseVehicle::type, VEH_TRAIN, Vehicle::vehstatus, and VS_CRASHED.
Referenced by DeleteLastWagon().
|
static |
Deletes/Clears the last wagon of a crashed train.
It takes the engine of the train, then goes to the last wagon and deletes that. Each call to this function will remove the last wagon of a crashed train. If this wagon was on a crossing, or inside a tunnel/bridge, recalculate the signals as they might need updating
v | the Vehicle of which last wagon is to be removed |
Definition at line 3637 of file train_cmd.cpp.
References CCF_ARRANGE, CollectTrackbitsFromCrashedVehiclesEnum(), Train::ConsistChanged(), DiagDirToDiagTrackBits(), FindVehicleOnPos(), SpecializedVehicle< T, Type >::First(), GetTunnelBridgeDirection(), HasReservedTracks(), Vehicle::last_station_visited, SpecializedVehicle< T, Type >::Next(), Vehicle::owner, Vehicle::SetNext(), SetWindowDirty(), Vehicle::tile, TRACK_BEGIN, TRACK_BIT_DEPOT, TRACK_BIT_NONE, TRACK_BIT_WORMHOLE, TRACK_X, TRACK_Y, TrackBitsToTrack(), UnreserveRailTrack(), and WC_VEHICLE_DEPOT.
|
static |
Perform pathfinding for a train.
v | The train | |
tile | The tile the train is about to enter | |
enterdir | Diagonal direction the train is coming from | |
tracks | Usable tracks on the new tile | |
[out] | path_found | Whether a path has been found or not. |
do_track_reservation | Path reservation is requested | |
[out] | dest | State and destination of the requested path |
[out] | final_dest | Final tile of the best path found |
Definition at line 2469 of file train_cmd.cpp.
References INVALID_TILE, and YapfTrainChooseTrack().
|
static |
Extend a train path as far as possible.
Stops on encountering a safe tile, another reservation or a track choice.
Definition at line 2480 of file train_cmd.cpp.
References _settings_game, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::exitdir, FindFirstTrackdir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), FollowTrainReservation(), PathfinderSettings::forbid_90_deg, GetSignalStateByTrackdir(), GetTileRailType(), HasOnewaySignalBlockingTrackdir(), HasPbsSignalOnTrackdir(), HasReservedTracks(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::is_station, IsPlainRail(), IsSafeWaitingPosition(), IsTileType(), IsWaitingPositionFree(), KillFirstBit(), MarkTileDirtyByTile(), MP_RAILWAY, 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, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::old_td, CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::old_tile, GameSettings::pf, Rail90DegTurnDisallowed(), ReverseTrackdir(), SetSignalStateByTrackdir(), SIGNAL_STATE_GREEN, SIGNAL_STATE_RED, PBSTileInfo::tile, TileOffsByDiagDir(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::tiles_skipped, PBSTileInfo::trackdir, TRACKDIR_BIT_NONE, TrackdirBitsToTrackBits(), TrackdirCrossesTrackdirs(), TrackdirReachesTrackdirs(), TrackdirToTrack(), TryReserveRailTrack(), and UnreserveRailTrack().
|
static |
Try to find a depot nearby.
v | Train that wants a depot. |
max_distance | Maximal search distance. |
Definition at line 2166 of file train_cmd.cpp.
References Vehicle::vehstatus, VS_CRASHED, and YapfTrainFindNearestDepot().
Referenced by CheckIfTrainNeedsService(), and Train::FindClosestDepot().
Collision test function.
v | Train vehicle to test collision with. |
data | Train being examined. |
nullptr
(always continue search) Definition at line 3179 of file train_cmd.cpp.
References abs(), GroundVehicleCache::cached_veh_length, SpecializedVehicle< T, Type >::From(), GroundVehicle< T, Type >::gcache, TrainCollideChecker::num, Vehicle::owner, TRACK_BIT_DEPOT, TrainCrashed(), BaseVehicle::type, TrainCollideChecker::v, VEH_TRAIN, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.
Referenced by CheckTrainCollision().
void FreeTrainTrackReservation | ( | const Train * | v | ) |
Free the reserved path in front of a vehicle.
v | Train owning the reserved path. |
Definition at line 2386 of file train_cmd.cpp.
References GetStationIndex(), Train::GetVehicleTrackdir(), Vehicle::IsFrontEngine(), IsRailStationTile(), IsTileType(), MP_TUNNELBRIDGE, and Vehicle::tile.
Referenced by CmdConvertRail(), Train::Crash(), and FreeTrainReservation().
uint8_t FreightWagonMult | ( | CargoID | cargo | ) |
Return the cargo weight multiplier to use for a rail vehicle.
cargo | Cargo type to get multiplier for |
Definition at line 69 of file train_cmd.cpp.
References _settings_game, VehicleSettings::freight_trains, CargoSpec::Get(), and GameSettings::vehicle.
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).
engine | The engine to get the sprite from. | |
[out] | width | The width of the sprite. |
[out] | height | The height of the sprite. |
[out] | xoffs | Number of pixels to shift the sprite to the right. |
[out] | yoffs | Number of pixels to shift the sprite downwards. |
image_type | Context the sprite is used in. |
Definition at line 581 of file train_cmd.cpp.
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.
station_id | the ID of the station where we're stopping |
tile | the tile where the vehicle currently is |
v | the 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 |
Definition at line 263 of file train_cmd.cpp.
References GroundVehicleCache::cached_total_length, Vehicle::current_order, Vehicle::direction, DirToDiagDir(), GroundVehicle< T, Type >::gcache, SpecializedStation< Station, false >::Get(), Station::GetPlatformLength(), Order::IsType(), OSL_PLATFORM_FAR_END, OSL_PLATFORM_MIDDLE, and TILE_SIZE.
|
static |
Handle a crashed train.
v | First train vehicle. |
Definition at line 3735 of file train_cmd.cpp.
References Chance16R(), Train::crash_anim_pos, CreateEffectVehicleRel(), EV_EXPLOSION_LARGE, Vehicle::vehstatus, and VS_HIDDEN.
Inserts a chain into the train at dst.
dst | the place where to append after. |
chain | the chain to actually add. |
Definition at line 901 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), and Vehicle::SetNext().
Referenced by ArrangeTrains(), and NormaliseDualHeads().
Make a backup of a train into a train list.
list | to make the backup in |
t | the train to make the backup of |
Definition at line 852 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::Next().
Referenced by CmdSellRailWagon().
Find adjacent level crossing tiles in this multi-track crossing and mark them dirty.
tile | The tile which causes the update. |
road_axis | The road axis. |
Definition at line 1805 of file train_cmd.cpp.
References AxisToDiagDir(), GetCrossingRoadAxis(), IsLevelCrossingTile(), MarkTileDirtyByTile(), ReverseDiagDir(), Map::Size(), and TileAddByDiagDir().
|
static |
Mark a train as stuck and stop it if it isn't stopped right now.
v | Train to mark as being stuck. |
Definition at line 1541 of file train_cmd.cpp.
References Vehicle::cur_speed, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, SetBit(), GroundVehicle< T, Type >::SetLastSpeed(), SetWindowWidgetDirty(), Vehicle::subspeed, VRF_TRAIN_STUCK, Train::wait_counter, WC_VEHICLE_VIEW, and WID_VV_START_STOP.
Referenced by TryPathReserve().
|
inlinestatic |
Bars crossing and plays ding-ding sound if not barred already.
tile | tile with crossing |
Definition at line 1860 of file train_cmd.cpp.
References IsCrossingBarred(), SetCrossingReservation(), and UpdateLevelCrossing().
|
static |
Normalise the dual heads in the train, i.e.
if one is missing move that one to this train.
t | the train to normalise. |
Definition at line 915 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::GetNextVehicle(), InsertInConsist(), GroundVehicle< T, Type >::IsEngine(), GroundVehicle< T, Type >::IsMultiheaded(), SpecializedVehicle< T, Type >::Next(), and RemoveFromConsist().
Referenced by ArrangeTrains().
|
static |
Normalise the sub types of the parts in this chain.
chain | the chain to normalise. |
Definition at line 937 of file train_cmd.cpp.
References GroundVehicle< T, Type >::ClearFreeWagon(), GroundVehicle< T, Type >::ClearFrontEngine(), GroundVehicle< T, Type >::IsEngine(), GroundVehicle< T, Type >::IsWagon(), SpecializedVehicle< T, Type >::Next(), SpecializedVehicle< T, Type >::Previous(), GroundVehicle< T, Type >::SetFreeWagon(), and GroundVehicle< T, Type >::SetFrontEngine().
Referenced by CmdSellRailWagon().
|
static |
Normalise the head of the train again, i.e.
that is tell the world that we have changed and update all kinds of variables.
head | the train to update. |
Definition at line 1163 of file train_cmd.cpp.
References CCF_ARRANGE, Train::ConsistChanged(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetFreeUnitNumber(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InvalidateWindowData(), Vehicle::IsFrontEngine(), Vehicle::owner, SetWindowWidgetDirty(), BaseVehicle::type, Vehicle::unitnumber, UpdateTrainGroupID(), VEH_TRAIN, VIWD_CONSIST_CHANGED, WC_VEHICLE_REFIT, WC_VEHICLE_VIEW, and WID_VV_REFIT.
Referenced by CmdSellRailWagon().
|
static |
Remove the given wagon from its consist.
part | the part of the train to remove. |
chain | whether to remove the whole chain. |
Definition at line 884 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::GetLastEnginePart(), SpecializedVehicle< T, Type >::Last(), SpecializedVehicle< T, Type >::Next(), SpecializedVehicle< T, Type >::Previous(), and Vehicle::SetNext().
Referenced by ArrangeTrains(), and NormaliseDualHeads().
|
static |
Restore the train from the backup list.
list | the train to restore. |
Definition at line 861 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::Previous(), and Vehicle::SetNext().
Referenced by CmdSellRailWagon().
void ReverseTrainDirection | ( | Train * | v | ) |
Turn a train around.
v | Train to turn around. |
Definition at line 1967 of file train_cmd.cpp.
References IsRailDepotTile(), and Vehicle::tile.
void ReverseTrainSwapVeh | ( | Train * | v, |
int | l, | ||
int | r | ||
) |
Swap vehicles l and r in consist v, and reverse their direction.
v | Consist to change. |
l | Vehicle index in the consist of the first vehicle. |
r | Vehicle index in the consist of the second vehicle. |
Definition at line 1630 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::Next().
|
static |
Swap the two up/down flags in two ways:
[in,out] | swap_flag1 | First train flag. |
[in,out] | swap_flag2 | Second train flag. |
Definition at line 1565 of file train_cmd.cpp.
|
static |
Finds a vehicle approaching rail-road crossing.
tile | tile to test |
Definition at line 1718 of file train_cmd.cpp.
References AxisToDiagDir(), GetCrossingRailAxis(), HasVehicleOnPos(), IsLevelCrossingTile(), ReverseDiagDir(), TileOffsByDiagDir(), and TrainApproachingCrossingEnum().
Referenced by CheckLevelCrossing().
Checks if a train is approaching a rail-road crossing.
v | vehicle on tile |
data | tile with crossing we are testing |
Definition at line 1697 of file train_cmd.cpp.
References SpecializedVehicle< T, Type >::From(), Vehicle::IsFrontEngine(), TrainApproachingCrossingTile(), BaseVehicle::type, VEH_TRAIN, Vehicle::vehstatus, and VS_CRASHED.
Referenced by TrainApproachingCrossing().
Determines whether train is approaching a rail-road crossing (thus making it barred)
v | front engine of train |
Definition at line 3862 of file train_cmd.cpp.
References DiagDirToAxis(), Vehicle::direction, GetCrossingRoadAxis(), INVALID_TILE, Vehicle::IsFrontEngine(), IsLevelCrossingTile(), Vehicle::tile, TileOffsByDiagDir(), TrainCanLeaveTile(), VehicleExitDir(), Vehicle::vehstatus, and VS_CRASHED.
Referenced by Train::Crash(), and TrainApproachingCrossingEnum().
|
static |
Train is approaching line end, slow down and possibly reverse.
v | front train engine |
signal | not line end, just a red signal |
reverse | Set to false to not execute the vehicle reversing. This does not change any other logic. |
Definition at line 3787 of file train_cmd.cpp.
|
static |
Determines whether train would like to leave the tile.
v | train to test |
Definition at line 3832 of file train_cmd.cpp.
References DiagDirToDir(), Vehicle::direction, GetRailDepotDirection(), GetTunnelBridgeDirection(), IsRailDepotTile(), IsTileType(), MP_TUNNELBRIDGE, ReverseDiagDir(), Vehicle::tile, TRACK_BIT_DEPOT, and TRACK_BIT_WORMHOLE.
Referenced by TrainApproachingCrossingTile().
|
static |
Checks for line end.
Also, bars crossing at next tile if needed
v | vehicle we are checking |
reverse | Set to false to not execute the vehicle reversing. This does not change any other logic. |
Definition at line 3889 of file train_cmd.cpp.
References Vehicle::breakdown_ctr, Vehicle::vehstatus, and VS_TRAIN_SLOWING.
Referenced by TrainController().
Move a vehicle chain one movement stop forwards.
v | First vehicle to move. |
nomove | Stop moving this and all following vehicles. |
reverse | Set to false to not execute the vehicle reversing. This does not change any other logic. |
Definition at line 3278 of file train_cmd.cpp.
References DIAGDIR_BEGIN, DiagdirBetweenTiles(), DiagdirReachesTrackdirs(), FindFirstTrack(), SpecializedVehicle< T, Type >::First(), GetNewVehiclePos(), GetTileRailType(), GetTileTrackStatus(), HasBit(), Vehicle::IsFrontEngine(), IsValidDiagDirection(), GetNewVehiclePosResult::new_tile, SpecializedVehicle< T, Type >::Next(), GetNewVehiclePosResult::old_tile, SpecializedVehicle< T, Type >::Previous(), Rail90DegTurnDisallowed(), ReverseDiagDir(), TRACK_BIT_DEPOT, TRACK_BIT_NONE, TRACK_BIT_WORMHOLE, TrackCrossesTracks(), TrackdirBitsToTrackBits(), TrackStatusToRedSignals(), TrackStatusToTrackdirBits(), TrainCheckIfLineEnds(), TrainEnterStation(), TRANSPORT_RAIL, VehicleEnterTile(), VETS_CANNOT_ENTER, VETS_ENTERED_STATION, VETS_STATION_ID_OFFSET, Vehicle::x_pos, GetNewVehiclePosResult::y, and Vehicle::y_pos.
Referenced by AdvanceWagonsAfterSwap(), and FixupTrainLengths().
|
static |
Marks train as crashed and creates an AI event.
Doesn't do anything if the train is crashed already.
v | first vehicle of chain |
Definition at line 3149 of file train_cmd.cpp.
References Train::Crash(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Game::NewEvent(), AI::NewEvent(), Vehicle::owner, Train::ReserveTrackUnderConsist(), Vehicle::tile, Vehicle::vehstatus, and VS_CRASHED.
Referenced by FindTrainCollideEnum().
|
static |
Trains enters a station, send out a news item if it is the first train, and start loading.
Definition at line 3003 of file train_cmd.cpp.
References _local_company, AddVehicleNewsItem(), Vehicle::BeginLoading(), SpecializedStation< Station, false >::Get(), HVOT_TRAIN, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Vehicle::last_station_visited, Game::NewEvent(), AI::NewEvent(), NT_ARRIVAL_COMPANY, NT_ARRIVAL_OTHER, Vehicle::owner, SetDParam(), SetWindowDirty(), SRT_TRAIN_ARRIVES, TFP_NONE, Vehicle::tile, TriggerStationRandomisation(), and WC_VEHICLE_VIEW.
Referenced by TrainController().
bool TrainOnCrossing | ( | TileIndex | tile | ) |
Check if a level crossing tile has a train on it.
tile | tile to test |
Definition at line 1683 of file train_cmd.cpp.
References HasVehicleOnPos(), IsLevelCrossingTile(), and TrainOnTileEnum().
Referenced by CheckLevelCrossing().
Check if the vehicle is a train.
v | vehicle on tile |
Definition at line 1672 of file train_cmd.cpp.
References BaseVehicle::type, and VEH_TRAIN.
Referenced by TrainOnCrossing().
bool TryPathReserve | ( | Train * | v, |
bool | mark_as_stuck, | ||
bool | first_tile_okay | ||
) |
Try to reserve a path to a safe position.
v | The vehicle |
mark_as_stuck | Should the train be marked as stuck on a failed reservation? |
first_tile_okay | True if no path should be reserved if the current tile is a safe position. |
Definition at line 2866 of file train_cmd.cpp.
References _settings_client, ClrBit(), DiagdirReachesTrackdirs(), DiagdirReachesTracks(), FollowTrainReservation(), GetRailDepotDirection(), GetTileRailType(), GetTileTrackStatus(), ClientSettings::gui, HasBit(), HasDepotReservation(), HasReservedTracks(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Vehicle::IsFrontEngine(), MarkTileDirtyByTile(), MarkTrainAsStuck(), PBSTileInfo::okay, Rail90DegTurnDisallowed(), SetDepotReservation(), SetWindowWidgetDirty(), GUISettings::show_track_reservation, PBSTileInfo::tile, Vehicle::tile, TileAddByDiagDir(), TRACK_BIT_DEPOT, TrackCrossesTracks(), PBSTileInfo::trackdir, TrackdirBitsToTrackBits(), TrackdirToExitdir(), TrackdirToTrack(), TrackStatusToTrackdirBits(), TRANSPORT_RAIL, VRF_TRAIN_STUCK, WC_VEHICLE_VIEW, and WID_VV_START_STOP.
Referenced by CmdConvertRail(), and RestoreTrainReservation().
|
static |
Try to reserve any path to a safe tile, ignoring the vehicle's destination.
Safe tiles are tiles in front of a signal, depots and station tiles at end of line.
v | The vehicle. |
tile | The tile the search should start from. |
td | The trackdir the search should start from. |
override_railtype | Whether all physically compatible railtypes should be followed. |
Definition at line 2593 of file train_cmd.cpp.
References YapfTrainFindNearestSafeTile().
Update adjacent level crossing tiles in this multi-track crossing, due to removal of a level crossing tile.
tile | The crossing tile which has been or is about to be removed, and which caused the update. |
road_axis | The road axis. |
Definition at line 1822 of file train_cmd.cpp.
References AxisToDiagDir(), CheckLevelCrossing(), GetCrossingRoadAxis(), IsCrossingBarred(), IsLevelCrossingTile(), MarkTileDirtyByTile(), ReverseDiagDir(), SetCrossingBarred(), Map::Size(), and TileOffsByDiagDir().
void UpdateLevelCrossing | ( | TileIndex | tile, |
bool | sound, | ||
bool | force_bar | ||
) |
Update a level crossing to barred or open (crossing may include multiple adjacent tiles).
tile | Tile which causes the update. |
sound | Should we play sound? |
force_bar | Should we force the crossing to be barred? |
Definition at line 1773 of file train_cmd.cpp.
References AxisToDiagDir(), CheckLevelCrossing(), GetCrossingRoadAxis(), IsLevelCrossingTile(), ReverseDiagDir(), Map::Size(), TileAddByDiagDir(), and UpdateLevelCrossingTile().
Referenced by Train::Crash(), MaybeBarCrossingWithSound(), TryReserveRailTrack(), and UnreserveRailTrack().
|
static |
Sets a level crossing tile to the correct state.
tile | Tile to update. |
sound | Should we play sound? |
force_barred | Should we set the crossing to barred? |
Definition at line 1751 of file train_cmd.cpp.
References _settings_client, SoundSettings::ambient, CheckLevelCrossing(), IsCrossingBarred(), IsLevelCrossingTile(), and ClientSettings::sound.
Referenced by UpdateLevelCrossing().
|
static |
Updates some variables after swapping the vehicle.
v | swapped vehicle |
Definition at line 1593 of file train_cmd.cpp.
References Vehicle::direction, IsBridgeTile(), IsTileType(), MP_TUNNELBRIDGE, ReverseDir(), Vehicle::tile, TileVirtXY(), TRACK_BIT_DEPOT, TRACK_BIT_WORMHOLE, GroundVehicle< T, Type >::UpdateInclination(), Vehicle::UpdatePosition(), SpecializedVehicle< T, Type >::UpdateViewport(), VehicleEnterTile(), Vehicle::x_pos, and Vehicle::y_pos.
|
static |
Validate whether we are going to create valid trains.
original_dst | The original destination chain. |
dst | The destination chain after constructing the train. |
original_src | The original source chain. |
src | The source chain after constructing the train. |
check_limit | Whether to check the vehicle limit. |
Definition at line 1102 of file train_cmd.cpp.
References CheckNewTrain(), CheckTrainAttachment(), and CommandCost::Failed().
Referenced by CmdSellRailWagon().
|
static |
Speed update fractions for each acceleration type.
Definition at line 3047 of file train_cmd.cpp.
|
static |
Maximum speeds for train that is broken down or approaching line end.
Definition at line 3774 of file train_cmd.cpp.
|
static |
Definition at line 2447 of file train_cmd.cpp.