OpenTTD Source: src/roadveh_cmd.cpp File Reference

OpenTTD Source 13.1

Data Structures | Macros | Functions | Variables
roadveh_cmd.cpp File Reference
`#include "stdafx.h"`
`#include "roadveh.h"`
`#include "command_func.h"`
`#include "news_func.h"`
`#include "pathfinder/npf/npf_func.h"`
`#include "station_base.h"`
`#include "company_func.h"`
`#include "articulated_vehicles.h"`
`#include "newgrf_sound.h"`
`#include "pathfinder/yapf/yapf.h"`
`#include "strings_func.h"`
`#include "tunnelbridge_map.h"`
`#include "date_func.h"`
`#include "vehicle_func.h"`
`#include "sound_func.h"`
`#include "ai/ai.hpp"`
`#include "game/game.hpp"`
`#include "depot_map.h"`
`#include "effectvehicle_func.h"`
`#include "roadstop_base.h"`
`#include "spritecache.h"`
`#include "core/random_func.hpp"`
`#include "company_base.h"`
`#include "core/backup_type.hpp"`
`#include "newgrf.h"`
`#include "zoom_func.h"`
`#include "framerate_type.h"`
`#include "roadveh_cmd.h"`
`#include "road_cmd.h"`
`#include "table/strings.h"`
`#include "safeguards.h"`
`#include "table/roadveh_movement.h"`

Go to the source code of this file.

## Data Structures
struct | RoadVehFindData
struct | OvertakeData
struct | RoadDriveEntry

## Macros
#define | return_track(x) { best_track = (Trackdir)x; goto found_best_track; }

## Functions
template<>
bool | IsValidImageIndex< VEH_ROAD > (uint8 image_index)
static void | GetRoadVehIcon (EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result)
void | DrawRoadVehEngine (int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
| Draw a road vehicle engine. More...
void | GetRoadVehSpriteSize (EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
| Get the size of the sprite of a road vehicle sprite heading west (used for lists). More...
static uint | GetRoadVehLength (const RoadVehicle *v)
| Get length of a road vehicle. More...
void | RoadVehUpdateCache (RoadVehicle *v, bool same_length)
| Update the cache of a road vehicle. More...
CommandCost | CmdBuildRoadVehicle (DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **ret)
| Build a road vehicle. More...
static FindDepotData | FindClosestRoadDepot (const RoadVehicle *v, int max_distance)
CommandCost | CmdTurnRoadVeh (DoCommandFlag flags, VehicleID veh_id)
| Turn a roadvehicle around. More...
static void | DeleteLastRoadVeh (RoadVehicle *v)
| Delete last vehicle of a chain road vehicles. More...
static void | RoadVehSetRandomDirection (RoadVehicle *v)
static bool | RoadVehIsCrashed (RoadVehicle *v)
| Road vehicle chain has crashed. More...
static Vehicle * | EnumCheckRoadVehCrashTrain (Vehicle *v, void *data)
| Check routine whether a road and a train vehicle have collided. More...
static void | RoadVehCrash (RoadVehicle *v)
static bool | RoadVehCheckTrainCrash (RoadVehicle *v)
static void | StartRoadVehSound (const RoadVehicle *v)
static Vehicle * | EnumCheckRoadVehClose (Vehicle *v, void *data)
static RoadVehicle * | RoadVehFindCloseTo (RoadVehicle *v, int x, int y, Direction dir, bool update_blocked_ctr=true)
static void | RoadVehArrivesAt (const RoadVehicle *v, Station *st)
| A road vehicle arrives at a station. More...
static Direction | RoadVehGetNewDirection (const RoadVehicle *v, int x, int y)
static Direction | RoadVehGetSlidingDirection (const RoadVehicle *v, int x, int y)
static Vehicle * | EnumFindVehBlockingOvertake (Vehicle *v, void *data)
static bool | CheckRoadBlockedForOvertaking (OvertakeData *od)
| Check if overtaking is possible on a piece of track. More...
static void | RoadVehCheckOvertake (RoadVehicle *v, RoadVehicle *u)
static void | RoadZPosAffectSpeed (RoadVehicle *v, int old_z)
static int | PickRandomBit (uint bits)
static Trackdir | RoadFindPathToDest (RoadVehicle *v, TileIndex tile, DiagDirection enterdir)
| Returns direction to for a road vehicle to take or INVALID_TRACKDIR if the direction is currently blocked. More...
bool | RoadVehLeaveDepot (RoadVehicle *v, bool first)
static Trackdir | FollowPreviousRoadVehicle (const RoadVehicle *v, const RoadVehicle *prev, TileIndex tile, DiagDirection entry_dir, bool already_reversed)
static bool | CanBuildTramTrackOnTile (CompanyID c, TileIndex t, RoadType rt, RoadBits r)
| Can a tram track build without destruction on the given tile? More...
bool | IndividualRoadVehicleController (RoadVehicle *v, const RoadVehicle *prev)
static bool | RoadVehController (RoadVehicle *v)
static void | CheckIfRoadVehNeedsService (RoadVehicle *v)

## Variables
static const uint16 | _roadveh_images []
static const uint16 | _roadveh_full_adder []
static const Trackdir | _road_reverse_table [DIAGDIR_END]

## Detailed Description

Handling of road vehicles.

Definition in file roadveh_cmd.cpp.

## Function Documentation

## ◆ CanBuildTramTrackOnTile()

static bool CanBuildTramTrackOnTile | ( | CompanyID | c,
|  | TileIndex | t,
|  | RoadType | rt,
|  | RoadBits | r
| ) |  |
| static

Can a tram track build without destruction on the given tile?

Parameters

  c | the company that would be building the tram tracks
  t | the tile to build on.
  rt | the tram type to build.
  r | the road bits needed.

Returns
  true when a track track can be build on 't'

Definition at line 1128 of file roadveh_cmd.cpp.

References _current_company.

## ◆ CheckRoadBlockedForOvertaking()

static bool CheckRoadBlockedForOvertaking | ( | OvertakeData * | od | ) |
| static

Check if overtaking is possible on a piece of track.

Parameters

  od | Information about the tile and the involved vehicles

Returns
  true if we have to abort overtaking

Definition at line 784 of file roadveh_cmd.cpp.

References RoadVehicle::compatible_roadtypes, GetTileTrackStatus(), HasTileAnyRoadType(), and TRANSPORT_ROAD.

## ◆ CmdBuildRoadVehicle()

CommandCost CmdBuildRoadVehicle | ( | DoCommandFlag | flags,
|  | TileIndex | tile,
|  | const Engine * | e,
|  | Vehicle ** | ret
| ) |  |

Build a road vehicle.

Parameters

  | flags | type of operation.
  | tile | tile of the depot where road vehicle is built.
  | e | the engine to build.
  [out] | ret | the vehicle that has been built.

Returns
  the cost of this operation or an error.

Definition at line 260 of file roadveh_cmd.cpp.

References _current_company, DC_EXEC, DiagDirToDir(), Vehicle::direction, GetRoadDepotDirection(), GetRoadTypeInfo(), HasTileAnyRoadType(), Vehicle::owner, RoadTypeInfo::powered_roadtypes, return_cmd_error, RoadVehicleInfo::roadtype, and Vehicle::tile.

## ◆ CmdTurnRoadVeh()

CommandCost CmdTurnRoadVeh | ( | DoCommandFlag | flags,
|  | VehicleID | veh_id
| ) |  |

Turn a roadvehicle around.

Parameters

  flags | operation to perform
  veh_id | vehicle ID to turn

Returns
  the cost of this operation or an error

Definition at line 366 of file roadveh_cmd.cpp.

References Vehicle::breakdown_ctr, CheckOwnership(), CMD_ERROR, Vehicle::current_order, CommandCost::Failed(), SpecializedVehicle< RoadVehicle, Type >::GetIfValid(), RoadVehicle::IsInDepot(), RoadVehicle::IsPrimaryVehicle(), Order::IsType(), RoadVehicle::overtaking, Vehicle::owner, RVSB_WORMHOLE, RoadVehicle::state, Vehicle::vehstatus, VS_CRASHED, and VS_STOPPED.

## ◆ DeleteLastRoadVeh()

static void DeleteLastRoadVeh | ( | RoadVehicle * | v | ) |
| static

Delete last vehicle of a chain road vehicles.

Parameters

  v | First roadvehicle.

Definition at line 464 of file roadveh_cmd.cpp.

References Vehicle::first, SpecializedVehicle< T, Type >::First(), IsInsideMM(), Vehicle::last_station_visited, SpecializedVehicle< T, Type >::Next(), RVSB_IN_ROAD_STOP, Vehicle::SetNext(), and RoadVehicle::state.

## ◆ DrawRoadVehEngine()

void DrawRoadVehEngine | ( | int | left,
|  | int | right,
|  | int | preferred_x,
|  | int | y,
|  | EngineID | engine,
|  | PaletteID | pal,
|  | EngineImageType | image_type
| ) |  |

Draw a road vehicle engine.

Parameters

  left | Left edge to draw within.
  right | Right edge to draw within.
  preferred_x | Preferred position of the engine.
  y | Vertical position of the engine.
  engine | Engine to draw
  pal | Palette to use.

Definition at line 147 of file roadveh_cmd.cpp.

## ◆ EnumCheckRoadVehCrashTrain()

static Vehicle* EnumCheckRoadVehCrashTrain | ( | Vehicle * | v,
|  | void * | data
| ) |  |
| static

Check routine whether a road and a train vehicle have collided.

Parameters

  v | Train vehicle to test.
  data | Road vehicle to test.

Returns
  Train vehicle if the vehicles collided, else `nullptr`.

Definition at line 519 of file roadveh_cmd.cpp.

References abs(), BaseVehicle::type, VEH_TRAIN, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

## ◆ GetRoadVehLength()

static uint GetRoadVehLength | ( | const RoadVehicle * | v | ) |
| static

Get length of a road vehicle.

Parameters

  v | Road vehicle to query length.

Returns
  Length of the given road vehicle.

Definition at line 189 of file roadveh_cmd.cpp.

References CALLBACK_FAILED, Vehicle::GetEngine(), Engine::GetGRF(), and VEHICLE_LENGTH.

Referenced by RoadVehUpdateCache().

## ◆ GetRoadVehSpriteSize()

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

Get the size of the sprite of a road vehicle sprite heading west (used for lists).

Parameters

  | 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 170 of file roadveh_cmd.cpp.

## ◆ RoadFindPathToDest()

static Trackdir RoadFindPathToDest | ( | RoadVehicle * | v,
|  | TileIndex | tile,
|  | DiagDirection | enterdir
| ) |  |
| static

Returns direction to for a road vehicle to take or INVALID_TRACKDIR if the direction is currently blocked.

Parameters

  v | the Vehicle to do the pathfinding for
  tile | the where to start the pathfinding
  enterdir | the direction the vehicle enters the tile from

Returns
  the Trackdir to take

Definition at line 880 of file roadveh_cmd.cpp.

References GetTileTrackStatus(), and TRANSPORT_ROAD.

## ◆ RoadVehArrivesAt()

static void RoadVehArrivesAt | ( | const RoadVehicle * | v,
|  | Station * | st
| ) |  |
| static

A road vehicle arrives at a station.

If it is the first time, create a news item.

Parameters

  v | Road vehicle that arrived.
  st | Station where the road vehicle arrived.

Definition at line 686 of file roadveh_cmd.cpp.

References AddVehicleNewsItem(), HVOT_BUS, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, RoadVehicle::IsBus(), and SetDParam().

## ◆ RoadVehIsCrashed()

static bool RoadVehIsCrashed | ( | RoadVehicle * | v | ) |
| static

Road vehicle chain has crashed.

Parameters

  v | First roadvehicle.

Returns
  whether the chain still exists.

Definition at line 497 of file roadveh_cmd.cpp.

References RoadVehicle::crashed_ctr, CreateEffectVehicleRel(), EV_EXPLOSION_LARGE, and Vehicle::tick_counter.

## ◆ RoadVehUpdateCache()

void RoadVehUpdateCache | ( | RoadVehicle * | v,
|  | bool | same_length
| ) |  |

Update the cache of a road vehicle.

Parameters

  v | Road vehicle needing an update of its cache.
  same_length | should length of vehicles stay the same?

Precondition
  v must be first road vehicle.

Definition at line 217 of file roadveh_cmd.cpp.

References GroundVehicleCache::cached_total_length, Vehicle::engine_type, GroundVehicle< T, Type >::gcache, GetRoadVehLength(), INVALID_ENGINE, Vehicle::InvalidateNewGRFCacheOfChain(), Vehicle::IsFrontEngine(), SpecializedVehicle< T, Type >::Next(), BaseVehicle::type, VEH_ROAD, and VehicleLengthChanged().

## Variable Documentation

## ◆ _road_reverse_table

const Trackdir _road_reverse_table[DIAGDIR_END]
| static

Initial value:
= {
TRACKDIR_RVREV_NE, TRACKDIR_RVREV_SE, TRACKDIR_RVREV_SW, TRACKDIR_RVREV_NW
}

Definition at line 73 of file roadveh_cmd.cpp.

## ◆ _roadveh_full_adder

const uint16 _roadveh_full_adder[]
| static

Initial value:
= {
0, 88, 0, 0, 0, 0, 48, 48,
48, 48, 0, 0, 64, 64, 0, 16,
16, 0, 88, 0, 0, 0, 0, 48,
48, 48, 48, 0, 0, 64, 64, 0,
16, 16, 0, 88, 0, 0, 0, 0,
48, 48, 48, 48, 0, 0, 64, 64,
0, 16, 16, 0, 8, 8, 8, 8,
0, 0, 0, 8, 8, 8, 8
}

Definition at line 55 of file roadveh_cmd.cpp.

## ◆ _roadveh_images

const uint16 _roadveh_images[]
| static

Initial value:
= {
0xCD4, 0xCDC, 0xCE4, 0xCEC, 0xCF4, 0xCFC, 0xD0C, 0xD14,
0xD24, 0xD1C, 0xD2C, 0xD04, 0xD1C, 0xD24, 0xD6C, 0xD74,
0xD7C, 0xC14, 0xC1C, 0xC24, 0xC2C, 0xC34, 0xC3C, 0xC4C,
0xC54, 0xC64, 0xC5C, 0xC6C, 0xC44, 0xC5C, 0xC64, 0xCAC,
0xCB4, 0xCBC, 0xD94, 0xD9C, 0xDA4, 0xDAC, 0xDB4, 0xDBC,
0xDCC, 0xDD4, 0xDE4, 0xDDC, 0xDEC, 0xDC4, 0xDDC, 0xDE4,
0xE2C, 0xE34, 0xE3C, 0xC14, 0xC1C, 0xC2C, 0xC3C, 0xC4C,
0xC5C, 0xC64, 0xC6C, 0xC74, 0xC84, 0xC94, 0xCA4
}

Definition at line 44 of file roadveh_cmd.cpp.

TRACKDIR_RVREV_SW
@ TRACKDIR_RVREV_SW
(Road vehicle) reverse direction south-west
Definition: track_type.h:86
TRACKDIR_RVREV_NW
@ TRACKDIR_RVREV_NW
(Road vehicle) reverse direction north-west
Definition: track_type.h:87
TRACKDIR_RVREV_SE
@ TRACKDIR_RVREV_SE
(Road vehicle) reverse direction south-east
Definition: track_type.h:79
TRACKDIR_RVREV_NE
@ TRACKDIR_RVREV_NE
(Road vehicle) reverse direction north-east
Definition: track_type.h:78