OpenTTD Source: src/articulated_vehicles.cpp File Reference

OpenTTD Source 13.2.1

Functions | Variables
articulated_vehicles.cpp File Reference
`#include "stdafx.h"`
`#include "train.h"`
`#include "roadveh.h"`
`#include "vehicle_func.h"`
`#include "engine_func.h"`
`#include "company_func.h"`
`#include "newgrf.h"`
`#include "table/strings.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Functions
static EngineID | GetNextArticulatedPart (uint index, EngineID front_type, Vehicle *front=nullptr, bool *mirrored=nullptr)
| Determines the next articulated part to attach. More...
bool | IsArticulatedEngine (EngineID engine_type)
| Does a NewGRF report that this should be an articulated vehicle? More...
uint | CountArticulatedParts (EngineID engine_type, bool purchase_window)
| Count the number of articulated parts of an engine. More...
static uint16 | GetVehicleDefaultCapacity (EngineID engine, CargoID *cargo_type)
| Returns the default (non-refitted) capacity of a specific EngineID. More...
static CargoTypes | GetAvailableVehicleCargoTypes (EngineID engine, bool include_initial_cargo_type)
| Returns all cargoes a vehicle can carry. More...
CargoArray | GetCapacityOfArticulatedParts (EngineID engine)
| Get the capacity of the parts of a given engine. More...
bool | IsArticulatedVehicleRefittable (EngineID engine)
| Checks whether any of the articulated parts is refittable. More...
void | GetArticulatedRefitMasks (EngineID engine, bool include_initial_cargo_type, CargoTypes *union_mask, CargoTypes *intersection_mask)
| Merges the refit_masks of all articulated parts. More...
CargoTypes | GetUnionOfArticulatedRefitMasks (EngineID engine, bool include_initial_cargo_type)
| Ors the refit_masks of all articulated parts. More...
CargoTypes | GetIntersectionOfArticulatedRefitMasks (EngineID engine, bool include_initial_cargo_type)
| Ands the refit_masks of all articulated parts. More...
bool | IsArticulatedVehicleCarryingDifferentCargoes (const Vehicle *v, CargoID *cargo_type)
| Tests if all parts of an articulated vehicle are refitted to the same cargo. More...
void | CheckConsistencyOfArticulatedVehicle (const Vehicle *v)
| Checks whether the specs of freshly build articulated vehicles are consistent with the information specified in the purchase list. More...
void | AddArticulatedParts (Vehicle *first)
| Add the remaining articulated parts to the given vehicle. More...

## Variables
static const uint | MAX_ARTICULATED_PARTS = 100
| Maximum of articulated parts per vehicle, i.e. when to abort calling the articulated vehicle callback.

## Detailed Description

Implementation of articulated vehicles.

Definition in file articulated_vehicles.cpp.

## Function Documentation

## ◆ AddArticulatedParts()

void AddArticulatedParts | ( | Vehicle * | first | ) |

Add the remaining articulated parts to the given vehicle.

Parameters

  first | The head of the articulated bit.

Definition at line 318 of file articulated_vehicles.cpp.

References HasBit(), and BaseVehicle::type.

## ◆ CheckConsistencyOfArticulatedVehicle()

void CheckConsistencyOfArticulatedVehicle | ( | const Vehicle * | v | ) |

Checks whether the specs of freshly build articulated vehicles are consistent with the information specified in the purchase list.

Only essential information is checked to leave room for magic tricks/workarounds to grfcoders. It checks: For autoreplace/-renew:

- Default cargo type (without capacity)
- intersection and union of refit masks.

Definition at line 276 of file articulated_vehicles.cpp.

References Vehicle::engine_type, GetArticulatedRefitMasks(), GetCapacityOfArticulatedParts(), and Vehicle::GetEngine().

## ◆ CountArticulatedParts()

uint CountArticulatedParts | ( | EngineID | engine_type,
|  | bool | purchase_window
| ) |  |

Count the number of articulated parts of an engine.

Parameters

  engine_type | The engine to get the number of parts of.
  purchase_window | Whether we are in the scope of the purchase window or not, i.e. whether we cannot allocate vehicles.

Returns
  The number of parts.

Definition at line 73 of file articulated_vehicles.cpp.

References HasBit().

Referenced by CmdBuildVehicle().

## ◆ GetArticulatedRefitMasks()

void GetArticulatedRefitMasks | ( | EngineID | engine,
|  | bool | include_initial_cargo_type,
|  | CargoTypes * | union_mask,
|  | CargoTypes * | intersection_mask
| ) |  |

Merges the refit_masks of all articulated parts.

Parameters

  engine | the first part
  include_initial_cargo_type | if true the default cargo type of the vehicle is included; if false only the refit_mask
  union_mask | returns bit mask of CargoIDs which are a refit option for at least one articulated part
  intersection_mask | returns bit mask of CargoIDs which are a refit option for every articulated part (with default capacity > 0)

Definition at line 194 of file articulated_vehicles.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), and GetAvailableVehicleCargoTypes().

Referenced by CheckConsistencyOfArticulatedVehicle(), GetIntersectionOfArticulatedRefitMasks(), GetNewCargoTypeForReplace(), GetUnionOfArticulatedRefitMasks(), and Vehicle::NeedsServicing().

## ◆ GetAvailableVehicleCargoTypes()

static CargoTypes GetAvailableVehicleCargoTypes | ( | EngineID | engine,
|  | bool | include_initial_cargo_type
| ) |  |
| inlinestatic

Returns all cargoes a vehicle can carry.

Parameters

  engine | the EngineID of interest
  include_initial_cargo_type | if true the default cargo type of the vehicle is included; if false only the refit_mask

Returns
  bit set of CargoIDs

Definition at line 120 of file articulated_vehicles.cpp.

References Engine::CanCarryCargo(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Engine::GetDefaultCargoType(), and SetBit().

Referenced by GetArticulatedRefitMasks().

## ◆ GetCapacityOfArticulatedParts()

CargoArray GetCapacityOfArticulatedParts | ( | EngineID | engine | ) |

Get the capacity of the parts of a given engine.

Parameters

  engine | The engine to get the capacities from.

Returns
  The cargo capacities.

Definition at line 139 of file articulated_vehicles.cpp.

References EngineInfo::callback_mask, CBM_VEHICLE_ARTIC_ENGINE, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), GetNextArticulatedPart(), GetVehicleDefaultCapacity(), HasBit(), INVALID_ENGINE, Engine::IsGroundVehicle(), MAX_ARTICULATED_PARTS, and NUM_CARGO.

Referenced by CheckConsistencyOfArticulatedVehicle(), and GetTotalCapacityOfArticulatedParts().

## ◆ GetIntersectionOfArticulatedRefitMasks()

CargoTypes GetIntersectionOfArticulatedRefitMasks | ( | EngineID | engine,
|  | bool | include_initial_cargo_type
| ) |  |

Ands the refit_masks of all articulated parts.

Parameters

  engine | the first part
  include_initial_cargo_type | if true the default cargo type of the vehicle is included; if false only the refit_mask

Returns
  bit mask of CargoIDs which are a refit option for every articulated part (with default capacity > 0)

Definition at line 233 of file articulated_vehicles.cpp.

References GetArticulatedRefitMasks().

## ◆ GetNextArticulatedPart()

static EngineID GetNextArticulatedPart | ( | uint | index,
|  | EngineID | front_type,
|  | Vehicle * | front = `nullptr`,
|  | bool * | mirrored = `nullptr`
| ) |  |
| static

Determines the next articulated part to attach.

Parameters

  index | Position in chain
  front_type | Front engine type
  front | Front engine
  mirrored | Returns whether the part shall be flipped.

Returns
  engine to add or INVALID_ENGINE

Definition at line 32 of file articulated_vehicles.cpp.

References CALLBACK_FAILED, CBID_VEHICLE_ARTIC_ENGINE, GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Engine::GetGRF(), GetNewEngineID(), GetVehicleCallback(), HasBit(), INVALID_ENGINE, and Engine::type.

Referenced by GetCapacityOfArticulatedParts(), and IsArticulatedVehicleRefittable().

## ◆ GetUnionOfArticulatedRefitMasks()

CargoTypes GetUnionOfArticulatedRefitMasks | ( | EngineID | engine,
|  | bool | include_initial_cargo_type
| ) |  |

Ors the refit_masks of all articulated parts.

Parameters

  engine | the first part
  include_initial_cargo_type | if true the default cargo type of the vehicle is included; if false only the refit_mask

Returns
  bit mask of CargoIDs which are a refit option for at least one articulated part

Definition at line 220 of file articulated_vehicles.cpp.

References GetArticulatedRefitMasks().

Referenced by CargoAndEngineFilter(), EnginesHaveCargoInCommon(), GetIncompatibleRefitOrderIdForAutoreplace(), GetPreviewCompany(), and VerifyAutoreplaceRefitForOrders().

## ◆ GetVehicleDefaultCapacity()

static uint16 GetVehicleDefaultCapacity | ( | EngineID | engine,
|  | CargoID * | cargo_type
| ) |  |
| inlinestatic

Returns the default (non-refitted) capacity of a specific EngineID.

Parameters

  engine | the EngineID of interest
  cargo_type | returns the default cargo type, if needed

Returns
  capacity

Definition at line 105 of file articulated_vehicles.cpp.

References Engine::CanCarryCargo(), CT_INVALID, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Engine::GetDefaultCargoType(), and Engine::GetDisplayDefaultCapacity().

Referenced by GetCapacityOfArticulatedParts().

## ◆ IsArticulatedEngine()

bool IsArticulatedEngine | ( | EngineID | engine_type | ) |

Does a NewGRF report that this should be an articulated vehicle?

Parameters

  engine_type | The engine to check.

Returns
  True iff the articulated engine callback flag is set.

Definition at line 62 of file articulated_vehicles.cpp.

References HasBit().

## ◆ IsArticulatedVehicleCarryingDifferentCargoes()

bool IsArticulatedVehicleCarryingDifferentCargoes | ( | const Vehicle * | v,
|  | CargoID * | cargo_type
| ) |  |

Tests if all parts of an articulated vehicle are refitted to the same cargo.

Note: Vehicles not carrying anything are ignored

Parameters

  v | the first vehicle in the chain
  cargo_type | returns the common CargoID if needed. (CT_INVALID if no part is carrying something or they are carrying different things)

Returns
  true if some parts are carrying different cargoes, false if all parts are carrying the same (nothing is also the same)

Definition at line 248 of file articulated_vehicles.cpp.

References Engine::CanCarryCargo(), Vehicle::cargo_type, CT_INVALID, Vehicle::GetEngine(), Vehicle::GetNextArticulatedPart(), and Vehicle::HasArticulatedPart().

Referenced by GetNewCargoTypeForReplace(), and Vehicle::NeedsServicing().

## ◆ IsArticulatedVehicleRefittable()

bool IsArticulatedVehicleRefittable | ( | EngineID | engine | ) |

Checks whether any of the articulated parts is refittable.

Parameters

  engine | the first part

Returns
  true if refittable

Definition at line 168 of file articulated_vehicles.cpp.

References EngineInfo::callback_mask, CBM_VEHICLE_ARTIC_ENGINE, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), GetNextArticulatedPart(), HasBit(), INVALID_ENGINE, IsEngineRefittable(), Engine::IsGroundVehicle(), and MAX_ARTICULATED_PARTS.