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

Types/functions related to cargoes. More...

#include "economy_type.h"
#include "cargo_type.h"
#include "gfx_type.h"
#include "newgrf_callbacks.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  CargoTypeComparator
 Comparator to sort CargoType by according to desired order. More...
 

Typedefs

using CargoClasses = EnumBitSet< CargoClass, uint16_t >
 
using SetCargoBitIterator = SetBitIterator< CargoType, 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 class  CargoClass : uint8_t {
  Passengers = 0 , Mail = 1 , Express = 2 , Armoured = 3 ,
  Bulk = 4 , PieceGoods = 5 , Liquid = 6 , Refrigerated = 7 ,
  Hazardous = 8 , Covered = 9 , Oversized = 10 , Powderized = 11 ,
  NotPourable = 12 , Potable = 13 , NonPotable = 14 , Special = 15
}
 Cargo classes. More...
 

Functions

void SetupCargoForClimate (LandscapeType l)
 Set up the default cargo types for the given landscape type.
 
bool IsDefaultCargo (CargoType cargo_type)
 Test if a cargo is a default cargo type.
 
void BuildCargoLabelMap ()
 Build cargo label map.
 
std::optional< std::string > BuildCargoAcceptanceString (const CargoArray &acceptance, StringID label)
 Build comma-separated cargo acceptance string.
 
CargoType GetCargoTypeByLabel (CargoLabel label)
 
Dimension GetLargestCargoIconSize ()
 Get dimensions of largest cargo icon.
 
void InitializeSortedCargoSpecs ()
 Initialize the list of sorted cargo specifications.
 
bool IsCargoInClass (CargoType c, CargoClasses cc)
 Does cargo c have cargo class cc?
 

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.
 
CargoTypes _standard_cargo_mask
 Bitmask of real cargo types available.
 
std::array< uint8_t, NUM_CARGO_sorted_cargo_types
 Sort order of cargoes by cargo type.
 
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.

Typedef Documentation

◆ CargoClasses

using CargoClasses = EnumBitSet<CargoClass, uint16_t>

Definition at line 67 of file cargotype.h.

◆ SetCargoBitIterator

Definition at line 241 of file cargotype.h.

Enumeration Type Documentation

◆ CargoClass

enum class CargoClass : uint8_t
strong

Cargo classes.

Enumerator
Passengers 

Passengers.

Mail 

Mail.

Express 

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

Armoured 

Armoured cargo (Valuables, Gold, Diamonds)

Bulk 

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

PieceGoods 

Piece goods (Livestock, Wood, Steel, Paper)

Liquid 

Liquids (Oil, Water, Rubber)

Refrigerated 

Refrigerated cargo (Food, Fruit)

Hazardous 

Hazardous cargo (Nuclear Fuel, Explosives, etc.)

Covered 

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

Oversized 

Oversized (stake/flatbed wagon)

Powderized 

Powderized, moist protected (powder/silo wagon)

NotPourable 

Not Pourable (open wagon, but not hopper wagon)

Potable 

Potable / food / clean.

NonPotable 

Non-potable / non-food / dirty.

Special 

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

Definition at line 49 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 22 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 35 of file cargotype.h.

Function Documentation

◆ BuildCargoAcceptanceString()

std::optional< std::string > BuildCargoAcceptanceString ( const CargoArray acceptance,
StringID  label 
)

Build comma-separated cargo acceptance string.

Parameters
acceptanceCargoArray filled with accepted cargo.
labelLabel to prefix cargo acceptance list.
Returns
String of accepted cargo, or nullopt if no cargo is accepted.

Definition at line 269 of file cargotype.cpp.

References _sorted_cargo_specs, GetListSeparator(), and GetString().

Referenced by BuildHouseWindow::GetHouseInformation(), and LandInfoWindow::OnInit().

◆ 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 202 of file cargotype.cpp.

Referenced by CargoChangeInfo().

◆ GetCargoTypeByLabel()

CargoType GetCargoTypeByLabel ( CargoLabel  label)
inline

Definition at line 216 of file cargotype.h.

◆ GetLargestCargoIconSize()

Dimension GetLargestCargoIconSize ( )

Get dimensions of largest cargo icon.

Returns
Dimensions of largest cargo icon.

Definition at line 165 of file cargotype.cpp.

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

Referenced by BaseVehicleListWindow::BuildCargoDropDownList(), DrawAircraftImage(), IndustryCargoesWindow::OnClick(), IndustryViewWindow::OnInit(), and SubsidyListWindow::OnInit().

◆ InitializeSortedCargoSpecs()

void InitializeSortedCargoSpecs ( )

◆ IsCargoInClass()

bool IsCargoInClass ( CargoType  c,
CargoClasses  cc 
)
inline

◆ IsDefaultCargo()

bool IsDefaultCargo ( CargoType  cargo_type)

Test if a cargo is a default cargo type.

Parameters
cargo_typeCargo type.
Returns
true iff the cargo type is a default cargo type.

Definition at line 152 of file cargotype.cpp.

References _default_cargo_labels, and CargoSpec::Get().

Referenced by CalculateRefitMasks().

◆ SetupCargoForClimate()

void SetupCargoForClimate ( LandscapeType  l)

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

Parameters
lLandscape

Definition at line 201 of file cargotype.cpp.

Referenced by ResetNewGRFData().

Variable Documentation

◆ _cargo_mask

CargoTypes _cargo_mask
extern

Bitmask of cargo types available.

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

Definition at line 33 of file cargotype.cpp.

Referenced by CalculateRefitMasks(), CargoChangeInfo(), CompanyStationsWindow::GetWidgetString(), CompanyStationsWindow::OnDropdownSelect(), and ShowRefitOptionsList().

◆ _sorted_cargo_specs

◆ _sorted_cargo_types

std::array<uint8_t, NUM_CARGO> _sorted_cargo_types
extern

Sort order of cargoes by cargo type.

Definition at line 191 of file cargotype.cpp.

Referenced by InitializeSortedCargoSpecs().

◆ _sorted_standard_cargo_specs

◆ _standard_cargo_mask

CargoTypes _standard_cargo_mask
extern

Bitmask of real cargo types available.

Phony cargoes like regearing cargoes are excluded.

Definition at line 38 of file cargotype.cpp.

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

◆ INVALID_CARGO_BITNUM

const uint8_t INVALID_CARGO_BITNUM = 0xFF
static

Constant representing invalid cargo.

Definition at line 69 of file cargotype.h.

Referenced by CargoSpec::IsValid().

◆ TOWN_PRODUCTION_DIVISOR

const uint TOWN_PRODUCTION_DIVISOR = 256
static

Definition at line 71 of file cargotype.h.