OpenTTD Source  20240917-master-g9ab0a47812
cargotype.h File Reference
#include "economy_type.h"
#include "cargo_type.h"
#include "gfx_type.h"
#include "strings_type.h"
#include "landscape_type.h"
#include "core/bitmath_func.hpp"

Go to the source code of this file.

Data Structures

struct  CargoSpec
 Specification of a cargo type. More...
 
struct  CargoSpec::Iterator
 Iterator to iterate all valid CargoSpec. More...
 
struct  CargoSpec::IterateWrapper
 
struct  CargoIDComparator
 Comparator to sort CargoID by according to desired order. More...
 

Typedefs

using CargoClasses = uint16_t
 Bitmask of cargo classes.
 
using SetCargoBitIterator = SetBitIterator< CargoID, CargoTypes >
 

Enumerations

enum  TownAcceptanceEffect : uint8_t {
  TAE_BEGIN = 0, TAE_NONE = TAE_BEGIN, TAE_PASSENGERS, TAE_MAIL,
  TAE_GOODS, TAE_WATER, TAE_FOOD, TAE_END,
  NUM_TAE = TAE_END
}
 Town growth effect when delivering cargo. More...
 
enum  TownProductionEffect : uint8_t {
  TPE_NONE, TPE_PASSENGERS, TPE_MAIL, NUM_TPE,
  INVALID_TPE
}
 Town effect when producing cargo. More...
 
enum  CargoClass : uint16_t {
  CC_NOAVAILABLE = 0, CC_PASSENGERS = 1 << 0, CC_MAIL = 1 << 1, CC_EXPRESS = 1 << 2,
  CC_ARMOURED = 1 << 3, CC_BULK = 1 << 4, CC_PIECE_GOODS = 1 << 5, CC_LIQUID = 1 << 6,
  CC_REFRIGERATED = 1 << 7, CC_HAZARDOUS = 1 << 8, CC_COVERED = 1 << 9, CC_SPECIAL = 1 << 15
}
 Cargo classes. More...
 

Functions

void SetupCargoForClimate (LandscapeID l)
 Set up the default cargo types for the given landscape type. More...
 
bool IsDefaultCargo (CargoID cid)
 Test if a cargo is a default cargo type. More...
 
void BuildCargoLabelMap ()
 Build cargo label map. More...
 
CargoID GetCargoIDByBitnum (uint8_t bitnum)
 Find the CargoID of a 'bitnum' value. More...
 
CargoID GetCargoIDByLabel (CargoLabel label)
 
Dimension GetLargestCargoIconSize ()
 Get dimensions of largest cargo icon. More...
 
void InitializeSortedCargoSpecs ()
 Initialize the list of sorted cargo specifications.
 
bool IsCargoInClass (CargoID c, CargoClass cc)
 Does cargo c have cargo class cc? More...
 

Variables

static const uint8_t INVALID_CARGO_BITNUM = 0xFF
 Constant representing invalid cargo.
 
static const uint TOWN_PRODUCTION_DIVISOR = 256
 
CargoTypes _cargo_mask
 Bitmask of cargo types available. More...
 
CargoTypes _standard_cargo_mask
 Bitmask of real cargo types available. More...
 
std::array< uint8_t, NUM_CARGO_sorted_cargo_types
 Sort order of cargoes by cargo ID.
 
std::vector< const CargoSpec * > _sorted_cargo_specs
 Cargo specifications sorted alphabetically by name.
 
std::span< const CargoSpec * > _sorted_standard_cargo_specs
 Standard cargo specifications sorted alphabetically by name.
 

Detailed Description

Types/functions related to cargoes.

Definition in file cargotype.h.

Enumeration Type Documentation

◆ CargoClass

enum CargoClass : uint16_t

Cargo classes.

Enumerator
CC_NOAVAILABLE 

No cargo class has been specified.

CC_PASSENGERS 

Passengers.

CC_MAIL 

Mail.

CC_EXPRESS 

Express cargo (Goods, Food, Candy, but also possible for passengers)

CC_ARMOURED 

Armoured cargo (Valuables, Gold, Diamonds)

CC_BULK 

Bulk cargo (Coal, Grain etc., Ores, Fruit)

CC_PIECE_GOODS 

Piece goods (Livestock, Wood, Steel, Paper)

CC_LIQUID 

Liquids (Oil, Water, Rubber)

CC_REFRIGERATED 

Refrigerated cargo (Food, Fruit)

CC_HAZARDOUS 

Hazardous cargo (Nuclear Fuel, Explosives, etc.)

CC_COVERED 

Covered/Sheltered Freight (Transportation in Box Vans, Silo Wagons, etc.)

CC_SPECIAL 

Special bit used for livery refit tricks instead of normal cargoes.

Definition at line 48 of file cargotype.h.

◆ TownAcceptanceEffect

enum TownAcceptanceEffect : uint8_t

Town growth effect when delivering cargo.

Enumerator
TAE_NONE 

Cargo has no effect.

TAE_PASSENGERS 

Cargo behaves passenger-like.

TAE_MAIL 

Cargo behaves mail-like.

TAE_GOODS 

Cargo behaves goods/candy-like.

TAE_WATER 

Cargo behaves water-like.

TAE_FOOD 

Cargo behaves food/fizzy-drinks-like.

TAE_END 

End of town effects.

NUM_TAE 

Amount of town effects.

Definition at line 21 of file cargotype.h.

◆ TownProductionEffect

enum TownProductionEffect : uint8_t

Town effect when producing cargo.

Enumerator
TPE_NONE 

Town will not produce this cargo type.

TPE_PASSENGERS 

Cargo behaves passenger-like for production.

TPE_MAIL 

Cargo behaves mail-like for production.

INVALID_TPE 

Invalid town production effect.

Used as a sentinel to indicate if a NewGRF has explicitly set an effect. This does not 'exist' after cargo types are finalised.

Definition at line 34 of file cargotype.h.

Function Documentation

◆ BuildCargoLabelMap()

void BuildCargoLabelMap ( )

Build cargo label map.

This is called multiple times during NewGRF initialization as cargos are defined, so that TranslateRefitMask() and GetCargoTranslation(), also used during initialization, get the correct information.

Definition at line 93 of file cargotype.cpp.

References CargoSpec::array, CT_INVALID, and CargoSpec::label_map.

◆ GetCargoIDByBitnum()

CargoID GetCargoIDByBitnum ( uint8_t  bitnum)

Find the CargoID of a 'bitnum' value.

Parameters
bitnum'bitnum' to find.
Returns
First CargoID with the given bitnum, or #INVALID_CARGO if not found or if the provided bitnum is invalid.

Definition at line 138 of file cargotype.cpp.

References INVALID_CARGO_BITNUM.

◆ GetLargestCargoIconSize()

Dimension GetLargestCargoIconSize ( )

Get dimensions of largest cargo icon.

Returns
Dimensions of largest cargo icon.

Definition at line 124 of file cargotype.cpp.

References _sorted_cargo_specs, GetSpriteSize(), and maxdim().

Referenced by SubsidyListWindow::OnInit(), and IndustryViewWindow::OnInit().

◆ IsCargoInClass()

bool IsCargoInClass ( CargoID  c,
CargoClass  cc 
)
inline

Does cargo c have cargo class cc?

Parameters
cCargo type.
ccCargo class.
Returns
The type fits in the class.

Definition at line 233 of file cargotype.h.

References CargoSpec::Get().

Referenced by CargoFilterSingle(), Vehicle::Crash(), RoadVehicle::IsBus(), and UpdateStationAcceptance().

◆ IsDefaultCargo()

bool IsDefaultCargo ( CargoID  cid)

Test if a cargo is a default cargo type.

Parameters
cidCargo ID.
Returns
true iff the cargo type is a default cargo type.

Definition at line 111 of file cargotype.cpp.

References _default_cargo_labels, and CargoSpec::Get().

Referenced by CalculateRefitMasks().

◆ SetupCargoForClimate()

void SetupCargoForClimate ( LandscapeID  l)

Set up the default cargo types for the given landscape type.

Parameters
lLandscape

Definition at line 48 of file cargotype.cpp.

References _cargo_mask, _default_cargo, _default_cargo_labels, _default_climate_cargo, CargoSpec::array, CargoSpec::label, and lengthof.

Variable Documentation

◆ _cargo_mask

CargoTypes _cargo_mask

Bitmask of cargo types available.

This includes phony cargoes like regearing cargoes. Initialized during a call to SetupCargoForClimate.

Definition at line 31 of file cargotype.cpp.

Referenced by SetupCargoForClimate().

◆ _standard_cargo_mask

CargoTypes _standard_cargo_mask

Bitmask of real cargo types available.

Phony cargoes like regearing cargoes are excluded.

Definition at line 36 of file cargotype.cpp.

Referenced by CargoAndEngineFilter(), InitializeSortedCargoSpecs(), and BuildVehicleWindow::SetCargoFilterArray().