OpenTTD Source 20260208-master-g43af8e94d0
Station Struct Referencefinal

Station data structure. More...

#include <station_base.h>

Inheritance diagram for Station:
SpecializedStation< Station, false > BaseStation

Public Member Functions

RoadStopGetPrimaryRoadStop (RoadStopType type) const
RoadStopGetPrimaryRoadStop (const RoadVehicle *v) const
 Get the primary road stop (the first road stop) that the given vehicle can load/unload.
 Station (StationID index, TileIndex tile=INVALID_TILE)
 ~Station () override
 Clean up a station by clearing vehicle orders, invalidating windows and removing link stats.
void AddFacility (StationFacility new_facility_bit, TileIndex facil_xy)
 Called when new facility is built on the station.
void MarkTilesDirty (bool cargo_change) const
 Marks the tiles of the station as dirty.
void UpdateVirtCoord () override
 Update the virtual coords needed to draw the station sign.
void MoveSign (TileIndex new_xy) override
 Move the station main coordinate somewhere else.
void AfterStationTileSetChange (bool adding, StationType type)
 After adding/removing tiles to station, update some station-related stuff.
uint GetPlatformLength (TileIndex tile, DiagDirection dir) const override
 Determines the REMAINING length of a platform, starting at (and including) the given tile.
uint GetPlatformLength (TileIndex tile) const override
 Obtain the length of a platform.
void RecomputeCatchment (bool no_clear_nearby_lists=false)
 Recompute tiles covered in our catchment area.
uint GetCatchmentRadius () const
 Determines the catchment radius of the station.
Rect GetCatchmentRect () const
 Determines catchment rectangle of this station.
bool CatchmentCoversTown (TownID t) const
 Test if the given town ID is covered by our catchment area.
void AddIndustryToDeliver (Industry *ind, TileIndex tile)
 Add nearby industry to station's industries_near list if it accepts cargo.
void RemoveIndustryToDeliver (Industry *ind)
 Remove nearby industry from station's industries_near list.
void RemoveFromAllNearbyLists ()
 Remove this station from the nearby stations lists of nearby towns and industries.
bool TileIsInCatchment (TileIndex tile) const
bool TileBelongsToRailStation (TileIndex tile) const override
 Check whether a specific tile belongs to this station.
bool TileBelongsToRoadStop (TileIndex tile) const
bool TileBelongsToAirport (TileIndex tile) const
uint32_t GetNewGRFVariable (const ResolverObject &object, uint8_t variable, uint8_t parameter, bool &available) const override
TileArea GetTileArea (StationType type) const override
 Get the tile area for a given station type.
Public Member Functions inherited from SpecializedStation< Station, false >
 SpecializedStation (StationID index, TileIndex tile)
 Set station type correctly.
Public Member Functions inherited from BaseStation
 BaseStation (StationID index, TileIndex tile)
 Initialize the base station.
virtual uint32_t GetNewGRFVariable (const struct ResolverObject &object, uint8_t variable, uint8_t parameter, bool &available) const =0
 Helper function to get a NewGRF variable that isn't implemented by the base class.
const std::string & GetCachedName () const
bool IsInUse () const
 Check whether the base station currently is in use; in use means that it is not scheduled for deletion and that it still has some facilities left.
uint8_t GetRoadStopRandomBits (TileIndex tile) const
uint8_t GetRoadStopAnimationFrame (TileIndex tile) const
void SetRoadStopRandomBits (TileIndex tile, uint8_t random_bits)
bool SetRoadStopAnimationFrame (TileIndex tile, uint8_t frame)
void RemoveRoadStopTileData (TileIndex tile)

Static Public Member Functions

static void RecomputeCatchmentForAll ()
 Recomputes catchment of all stations.
Static Public Member Functions inherited from SpecializedStation< Station, false >
static bool IsExpected (const BaseStation *st)
 Helper for checking whether the given station is of this type.
static bool IsValidID (auto index)
 Tests whether given index is a valid index for station of this type.
static StationGet (auto index)
 Gets station with given index.
static StationGetIfValid (auto index)
 Returns station if the index is a valid index for this station type.
static StationGetByTile (TileIndex tile)
 Get the station belonging to a specific tile.
static StationCreate (Targs &&... args)
 Creates a new T-object in the station pool.
static StationCreateAtIndex (StationID index, Targs &&... args)
 Creates a new T-object in the station pool.
static StationFrom (BaseStation *st)
 Converts a BaseStation to SpecializedStation with type checking.
static Pool::IterateWrapper< StationIterate (size_t from=0)
 Returns an iterable ensemble of all valid stations of type T.
Static Public Member Functions inherited from BaseStation
static BaseStationGetByTile (TileIndex tile)
 Get the base station belonging to a specific tile.
static void PostDestructor (size_t index)
 Invalidating of the JoinStation window has to be done after removing item from the pool.

Data Fields

RoadStopbus_stops = nullptr
 All the road stops.
TileArea bus_station {}
 Tile area the bus 'station' part covers.
RoadStoptruck_stops = nullptr
 All the truck stops.
TileArea truck_station {}
 Tile area the truck 'station' part covers.
Airport airport {}
 Tile area the airport covers.
TileArea ship_station {}
 Tile area the ship 'station' part covers.
TileArea docking_station {}
 Tile area the docking tiles cover.
IndustryType indtype = IT_INVALID
 Industry type to get the name from.
BitmapTileArea catchment_tiles {}
 NOSAVE: Set of individual tiles covered by catchment area.
StationHadVehicleOfType had_vehicle_of_type {}
uint8_t time_since_load = 0
uint8_t time_since_unload = 0
uint8_t last_vehicle_type = 0
std::list< Vehicle * > loading_vehicles {}
std::array< GoodsEntry, NUM_CARGOgoods
 Goods at this station.
CargoTypes always_accepted {}
 Bitmask of always accepted cargo types (by houses, HQs, industry tiles when industry doesn't accept cargo).
IndustryList industries_near {}
 Cached list of industries near the station that can accept cargo,.
Industryindustry = nullptr
 NOSAVE: Associated industry for neutral stations. (Rebuilt on load from Industry->st).
Data Fields inherited from BaseStation
TileIndex xy = INVALID_TILE
 Base tile of the station.
TrackedViewportSign sign {}
 NOSAVE: Dimensions of sign.
uint8_t delete_ctr = 0
 Delete counter. If greater than 0 then it is decremented until it reaches 0; the waypoint is then is deleted.
std::string name {}
 Custom name.
StringID string_id = INVALID_STRING_ID
 Default name (town area) of station.
std::string cached_name
 NOSAVE: Cache of the resolved name of the station, if not using a custom name.
Towntown = nullptr
 The town this station is associated with.
Owner owner = INVALID_OWNER
 The owner of this station.
StationFacilities facilities {}
 The facilities that this station has.
std::vector< SpecMapping< StationSpec > > speclist {}
 List of rail station specs of this station.
std::vector< SpecMapping< RoadStopSpec > > roadstop_speclist {}
 List of road stop specs of this station.
TimerGameCalendar::Date build_date {}
 Date of construction.
uint16_t random_bits = 0
 Random bits assigned to this station.
std::unordered_map< TileIndex, StationRandomTriggers > tile_waiting_random_triggers
StationRandomTriggers waiting_random_triggers
 Waiting triggers (NewGRF), shared by all station parts/tiles, road stops, ... essentially useless and broken by design.
StationAnimationTriggers cached_anim_triggers
 NOSAVE: Combined animation trigger bitmask, used to determine if trigger processing should happen.
StationAnimationTriggers cached_roadstop_anim_triggers
 NOSAVE: Combined animation trigger bitmask for road stops, used to determine if trigger processing should happen.
CargoTypes cached_cargo_triggers {}
 NOSAVE: Combined cargo trigger bitmask.
CargoTypes cached_roadstop_cargo_triggers {}
 NOSAVE: Combined cargo trigger bitmask for road stops.
TileArea train_station {INVALID_TILE, 0, 0}
 Tile area the train 'station' part covers.
StationRect rect {}
 NOSAVE: Station spread out rectangle maintained by StationRect::xxx() functions.
std::vector< RoadStopTileDatacustom_roadstop_tile_data {}
 List of custom road stop tile data.

Additional Inherited Members

Static Public Attributes inherited from SpecializedStation< Station, false >
static constexpr StationFacilities EXPECTED_FACIL
 Specialized type.

Detailed Description

Station data structure.

Definition at line 521 of file station_base.h.

Constructor & Destructor Documentation

◆ Station()

Station::Station ( StationID index,
TileIndex tile = INVALID_TILE )

Definition at line 64 of file station.cpp.

◆ ~Station()

Station::~Station ( )
override

Clean up a station by clearing vehicle orders, invalidating windows and removing link stats.

Aircraft-Hangar orders need special treatment here, as the hangars are actually part of a station (tiletype is STATION), but the order type is OT_GOTO_DEPOT.

Definition at line 84 of file station.cpp.

References airport, CloseWindowById(), DeleteStationNews(), SpecializedStation< Station, false >::Get(), goods, LinkGraphSchedule::instance, TimerGameConst< struct Economy >::INVALID_DATE, CargoPacket::InvalidateAllFrom(), InvalidateWindowClassesData(), InvalidateWindowData(), NUM_CARGO, BaseStation::owner, OWNER_NONE, RemoveFromAllNearbyLists(), LinkGraph::RemoveNode(), RemoveOrderFromAllVehicles(), RerouteCargo(), BaseStation::sign, LinkGraph::Size(), WC_STATION_LIST, and WC_STATION_VIEW.

Member Function Documentation

◆ AddFacility()

void Station::AddFacility ( StationFacility new_facility_bit,
TileIndex facil_xy )

Called when new facility is built on the station.

If it is the first facility it initializes also 'xy' and 'random_bits' members

Definition at line 230 of file station.cpp.

References _current_company, BaseStation::build_date, TimerGameCalendar::date, BaseStation::facilities, MoveSign(), BaseStation::owner, BaseStation::random_bits, SetWindowClassesDirty(), and WC_VEHICLE_ORDERS.

Referenced by CmdBuildAirport(), CmdBuildDock(), CmdBuildRailStation(), and CmdBuildRoadStop().

◆ AddIndustryToDeliver()

void Station::AddIndustryToDeliver ( Industry * ind,
TileIndex tile )

Add nearby industry to station's industries_near list if it accepts cargo.

For industries that are already on the list update distance if it's closer.

Parameters
indIndustry
tileTile of the industry to measure distance to.

Definition at line 389 of file station.cpp.

References DistanceMax(), industries_near, Industry::IsCargoAccepted(), and BaseStation::xy.

Referenced by RecomputeCatchment().

◆ AfterStationTileSetChange()

void Station::AfterStationTileSetChange ( bool adding,
StationType type )

◆ CatchmentCoversTown()

bool Station::CatchmentCoversTown ( TownID t) const

Test if the given town ID is covered by our catchment area.

This is used when removing a house tile to determine if it was the last house tile within our catchment.

Parameters
tTownID to test.
Returns
true if at least one house tile of TownID is covered.

Definition at line 452 of file station.cpp.

References catchment_tiles, GetTownIndex(), House, INVALID_TILE, and IsTileType().

Referenced by RemoveNearbyStations().

◆ GetCatchmentRadius()

uint Station::GetCatchmentRadius ( ) const

Determines the catchment radius of the station.

Returns
The radius

Definition at line 343 of file station.cpp.

References _settings_game, airport, bus_stops, CA_BUS, CA_DOCK, CA_NONE, CA_TRAIN, CA_TRUCK, CA_UNMODIFIED, INVALID_TILE, ship_station, BaseStation::train_station, and truck_stops.

Referenced by GetCatchmentRect().

◆ GetCatchmentRect()

Rect Station::GetCatchmentRect ( ) const

Determines catchment rectangle of this station.

Returns
clamped catchment rectangle

Definition at line 366 of file station.cpp.

References GetCatchmentRadius(), Map::MaxX(), Map::MaxY(), and BaseStation::rect.

Referenced by RecomputeCatchment().

◆ GetNewGRFVariable()

uint32_t Station::GetNewGRFVariable ( const ResolverObject & object,
uint8_t variable,
uint8_t parameter,
bool & available ) const
override

Definition at line 419 of file newgrf_station.cpp.

◆ GetPlatformLength() [1/2]

uint Station::GetPlatformLength ( TileIndex tile) const
overridevirtual

Obtain the length of a platform.

Precondition
tile must be a rail station tile
Parameters
tileA tile that contains the platform in question
Returns
The length of the platform

Implements BaseStation.

Definition at line 267 of file station.cpp.

References GetRailStationAxis(), IsCompatibleTrainStationTile(), TileBelongsToRailStation(), and TileOffsByAxis().

◆ GetPlatformLength() [2/2]

uint Station::GetPlatformLength ( TileIndex tile,
DiagDirection dir ) const
overridevirtual

Determines the REMAINING length of a platform, starting at (and including) the given tile.

Parameters
tilethe tile from which to start searching. Must be a rail station tile
dirThe direction in which to search.
Returns
The platform length

Implements BaseStation.

Definition at line 289 of file station.cpp.

References DIAGDIR_END, IsCompatibleTrainStationTile(), IsRailStationTile(), and TileOffsByDiagDir().

Referenced by GetTrainStopLocation(), and UpdateLoadUnloadTicks().

◆ GetPrimaryRoadStop() [1/2]

RoadStop * Station::GetPrimaryRoadStop ( const RoadVehicle * v) const

Get the primary road stop (the first road stop) that the given vehicle can load/unload.

Parameters
vthe vehicle to get the first road stop for
Returns
the first roadstop that this vehicle can load at

Definition at line 209 of file station.cpp.

References Bus, RoadVehicle::compatible_roadtypes, Vehicle::HasArticulatedPart(), HasTileAnyRoadType(), IsBayRoadStopTile(), RoadVehicle::IsBus(), RoadStop::next, Truck, and RoadStop::xy.

◆ GetPrimaryRoadStop() [2/2]

RoadStop * Station::GetPrimaryRoadStop ( RoadStopType type) const
inline

Definition at line 523 of file station_base.h.

◆ GetTileArea()

TileArea Station::GetTileArea ( StationType type) const
overridevirtual

Get the tile area for a given station type.

Parameters
typethe type of the area
Returns
The tile area.

Implements BaseStation.

Definition at line 416 of file station_cmd.cpp.

References Airport, airport, Bus, bus_station, Dock, docking_station, Oilrig, Rail, BaseStation::train_station, Truck, and truck_station.

◆ MoveSign()

void Station::MoveSign ( TileIndex new_xy)
overridevirtual

Move the station main coordinate somewhere else.

Parameters
new_xynew tile location of the sign

Reimplemented from BaseStation.

Definition at line 452 of file station_cmd.cpp.

References BaseStation::MoveSign(), and BaseStation::xy.

Referenced by AddFacility(), and CmdMoveStationName().

◆ RecomputeCatchment()

void Station::RecomputeCatchment ( bool no_clear_nearby_lists = false)

◆ RecomputeCatchmentForAll()

void Station::RecomputeCatchmentForAll ( )
static

Recomputes catchment of all stations.

This will additionally recompute nearby stations for all towns and industries.

Definition at line 534 of file station.cpp.

References SpecializedStation< Station, false >::Iterate().

Referenced by AfterLoadGame(), and CheckCaches().

◆ RemoveFromAllNearbyLists()

void Station::RemoveFromAllNearbyLists ( )

Remove this station from the nearby stations lists of nearby towns and industries.

Definition at line 427 of file station.cpp.

References catchment_tiles, GetIndustryIndex(), GetTileType(), GetTownIndex(), House, Industry, and FlatSet< Tkey, Tcompare >::insert().

Referenced by RecomputeCatchment(), and ~Station().

◆ RemoveIndustryToDeliver()

void Station::RemoveIndustryToDeliver ( Industry * ind)

Remove nearby industry from station's industries_near list.

Parameters
indIndustry

Definition at line 415 of file station.cpp.

References industries_near.

Referenced by RecomputeCatchment().

◆ TileBelongsToAirport()

bool Station::TileBelongsToAirport ( TileIndex tile) const
inline

Definition at line 596 of file station_base.h.

◆ TileBelongsToRailStation()

bool Station::TileBelongsToRailStation ( TileIndex tile) const
inlineoverridevirtual

Check whether a specific tile belongs to this station.

Parameters
tilethe tile to check
Returns
true if the tile belongs to this station

Implements BaseStation.

Definition at line 586 of file station_base.h.

References GetStationIndex(), and IsRailStationTile().

Referenced by GetPlatformLength(), and MarkTilesDirty().

◆ TileBelongsToRoadStop()

bool Station::TileBelongsToRoadStop ( TileIndex tile) const
inline

Definition at line 591 of file station_base.h.

◆ TileIsInCatchment()

bool Station::TileIsInCatchment ( TileIndex tile) const
inline

Definition at line 581 of file station_base.h.

◆ UpdateVirtCoord()

void Station::UpdateVirtCoord ( )
overridevirtual

Field Documentation

◆ airport

◆ always_accepted

CargoTypes Station::always_accepted {}

Bitmask of always accepted cargo types (by houses, HQs, industry tiles when industry doesn't accept cargo).

Definition at line 551 of file station_base.h.

Referenced by DeliverGoods(), and UpdateStationAcceptance().

◆ bus_station

TileArea Station::bus_station {}

Tile area the bus 'station' part covers.

Definition at line 531 of file station_base.h.

Referenced by CmdBuildRoadStop(), GetTileArea(), and RemoveRoadStop().

◆ bus_stops

RoadStop* Station::bus_stops = nullptr

All the road stops.

Definition at line 530 of file station_base.h.

Referenced by AfterLoadGame(), FindRoadStopSpot(), GetCatchmentRadius(), and RemoveRoadStop().

◆ catchment_tiles

BitmapTileArea Station::catchment_tiles {}

NOSAVE: Set of individual tiles covered by catchment area.

Definition at line 541 of file station_base.h.

Referenced by CatchmentCoversTown(), CheckSubsidised(), GetAcceptanceAroundStation(), RecomputeCatchment(), RemoveFromAllNearbyLists(), and TriggerWatchedCargoCallbacks().

◆ docking_station

TileArea Station::docking_station {}

Tile area the docking tiles cover.

Definition at line 537 of file station_base.h.

Referenced by CheckForDockingTile(), GetTileArea(), and RemoveDock().

◆ goods

◆ had_vehicle_of_type

StationHadVehicleOfType Station::had_vehicle_of_type {}

Definition at line 543 of file station_base.h.

◆ indtype

IndustryType Station::indtype = IT_INVALID

Industry type to get the name from.

Definition at line 539 of file station_base.h.

Referenced by GenerateStationName().

◆ industries_near

IndustryList Station::industries_near {}

Cached list of industries near the station that can accept cargo,.

See also
DeliverGoodsToIndustry()

Definition at line 553 of file station_base.h.

Referenced by AddCargoDelivery(), AddIndustryToDeliver(), CheckSubsidised(), DeliverGoodsToIndustry(), PopulateStationsNearby(), RecomputeCatchment(), and RemoveIndustryToDeliver().

◆ industry

Industry* Station::industry = nullptr

NOSAVE: Associated industry for neutral stations. (Rebuilt on load from Industry->st).

Definition at line 554 of file station_base.h.

Referenced by ForAllStationsAroundTiles(), and RecomputeCatchment().

◆ last_vehicle_type

uint8_t Station::last_vehicle_type = 0

Definition at line 548 of file station_base.h.

◆ loading_vehicles

std::list<Vehicle *> Station::loading_vehicles {}

Definition at line 549 of file station_base.h.

◆ ship_station

TileArea Station::ship_station {}

Tile area the ship 'station' part covers.

Definition at line 536 of file station_base.h.

Referenced by CmdBuildDock(), GetCatchmentRadius(), and RemoveDock().

◆ time_since_load

uint8_t Station::time_since_load = 0

Definition at line 545 of file station_base.h.

◆ time_since_unload

uint8_t Station::time_since_unload = 0

Definition at line 546 of file station_base.h.

◆ truck_station

TileArea Station::truck_station {}

Tile area the truck 'station' part covers.

Definition at line 533 of file station_base.h.

Referenced by CmdBuildRoadStop(), GetTileArea(), and RemoveRoadStop().

◆ truck_stops

RoadStop* Station::truck_stops = nullptr

All the truck stops.

Definition at line 532 of file station_base.h.

Referenced by AfterLoadGame(), FindRoadStopSpot(), GetCatchmentRadius(), and RemoveRoadStop().


The documentation for this struct was generated from the following files: