OpenTTD Source  20240915-master-g3784a3d3d6
Station Struct Referencefinal

Station data structure. More...

#include <station_base.h>

Inheritance diagram for Station:
SpecializedStation< Station, false > BaseStation Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >

Public Member Functions

RoadStopGetPrimaryRoadStop (RoadStopType type) const
 
RoadStopGetPrimaryRoadStop (const struct RoadVehicle *v) const
 
 Station (TileIndex tile=INVALID_TILE)
 
 ~Station ()
 Clean up a station by clearing vehicle orders, invalidating windows and removing link stats. More...
 
void AddFacility (StationFacility new_facility_bit, TileIndex facil_xy)
 Called when new facility is built on the station. More...
 
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. More...
 
void AfterStationTileSetChange (bool adding, StationType type)
 After adding/removing tiles to station, update some station-related stuff. More...
 
uint GetPlatformLength (TileIndex tile, DiagDirection dir) const override
 Determines the REMAINING length of a platform, starting at (and including) the given tile. More...
 
uint GetPlatformLength (TileIndex tile) const override
 Obtain the length of a platform. More...
 
void RecomputeCatchment (bool no_clear_nearby_lists=false)
 Recompute tiles covered in our catchment area. More...
 
uint GetCatchmentRadius () const
 Determines the catchment radius of the station. More...
 
Rect GetCatchmentRect () const
 Determines catchment rectangle of this station. More...
 
bool CatchmentCoversTown (TownID t) const
 Test if the given town ID is covered by our catchment area. More...
 
void AddIndustryToDeliver (Industry *ind, TileIndex tile)
 Add nearby industry to station's industries_near list if it accepts cargo. More...
 
void RemoveIndustryToDeliver (Industry *ind)
 Remove nearby industry from station's industries_near list. More...
 
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. More...
 
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
 
void GetTileArea (TileArea *ta, StationType type) const override
 Get the tile area for a given station type. More...
 
- Public Member Functions inherited from SpecializedStation< Station, false >
 SpecializedStation (TileIndex tile)
 Set station type correctly. More...
 
- Public Member Functions inherited from BaseStation
 BaseStation (TileIndex tile)
 Initialize the base station. More...
 
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. More...
 
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. More...
 
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)
 
- Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >
void * operator new (size_t size)
 Allocates space for new Titem. More...
 
void * operator new (size_t size, size_t index)
 Allocates space for new Titem with given index. More...
 
void * operator new (size_t, void *ptr)
 Allocates space for new Titem at given memory address. More...
 
void operator delete (void *p)
 Marks Titem as free. More...
 

Static Public Member Functions

static void RecomputeCatchmentForAll ()
 Recomputes catchment of all stations. More...
 
- 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. More...
 
static bool IsValidID (size_t index)
 Tests whether given index is a valid index for station of this type. More...
 
static StationGet (size_t index)
 Gets station with given index. More...
 
static StationGetIfValid (size_t index)
 Returns station if the index is a valid index for this station type. More...
 
static StationGetByTile (TileIndex tile)
 Get the station belonging to a specific tile. More...
 
static StationFrom (BaseStation *st)
 Converts a BaseStation to SpecializedStation with type checking. More...
 
static const StationFrom (const BaseStation *st)
 Converts a const BaseStation to const SpecializedStation with type checking. More...
 
static Pool::IterateWrapper< StationIterate (size_t from=0)
 Returns an iterable ensemble of all valid stations of type T. More...
 
- Static Public Member Functions inherited from BaseStation
static BaseStationGetByTile (TileIndex tile)
 Get the base station belonging to a specific tile. More...
 
static void PostDestructor (size_t index)
 Invalidating of the JoinStation window has to be done after removing item from the pool.
 
- Static Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >
static bool CanAllocateItem (size_t n=1)
 Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function() More...
 
static bool CleaningPool ()
 Returns current state of pool cleaning - yes or no. More...
 
static bool IsValidID (size_t index)
 Tests whether given index can be used to get valid (non-nullptr) Titem. More...
 
static Titem * Get (size_t index)
 Returns Titem with given index. More...
 
static Titem * GetIfValid (size_t index)
 Returns Titem with given index. More...
 
static size_t GetPoolSize ()
 Returns first unused index. More...
 
static size_t GetNumItems ()
 Returns number of valid items in the pool. More...
 
static void PostDestructor ([[maybe_unused]] size_t index)
 Dummy function called after destructor of each member. More...
 
static Pool::IterateWrapper< Titem > Iterate (size_t from=0)
 Returns an iterable ensemble of all valid Titem. More...
 

Data Fields

RoadStopbus_stops
 All the road stops.
 
TileArea bus_station
 Tile area the bus 'station' part covers.
 
RoadStoptruck_stops
 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
 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
 
uint8_t time_since_unload
 
uint8_t last_vehicle_type
 
std::list< Vehicle * > loading_vehicles
 
GoodsEntry goods [NUM_CARGO]
 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,. More...
 
Industryindustry
 NOSAVE: Associated industry for neutral stations. (Rebuilt on load from Industry->st)
 
- Data Fields inherited from BaseStation
TileIndex xy
 Base tile of the station.
 
TrackedViewportSign sign
 NOSAVE: Dimensions of sign.
 
uint8_t delete_ctr
 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
 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
 The town this station is associated with.
 
Owner owner
 The owner of this station.
 
StationFacility 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
 Random bits assigned to this station.
 
uint8_t waiting_triggers
 Waiting triggers (NewGRF) for this station.
 
uint8_t cached_anim_triggers
 NOSAVE: Combined animation trigger bitmask, used to determine if trigger processing should happen.
 
uint8_t 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
 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.
 
- Data Fields inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >
Tindex index
 Index of this pool item.
 

Additional Inherited Members

- Public Types inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >
typedef struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > Pool
 Type of the pool this item is going to be part of.
 
- Static Public Attributes inherited from SpecializedStation< Station, false >
static const StationFacility EXPECTED_FACIL
 Specialized type.
 

Detailed Description

Station data structure.

Definition at line 439 of file station_base.h.

Constructor & Destructor Documentation

◆ ~Station()

Station::~Station ( )

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 83 of file station.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >::CleaningPool(), goods, and SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::Iterate().

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 226 of file station.cpp.

References FACIL_NONE, BaseStation::facilities, MoveSign(), and BaseStation::random_bits.

◆ 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 392 of file station.cpp.

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

Referenced by RecomputeCatchment().

◆ AfterStationTileSetChange()

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

After adding/removing tiles to station, update some station-related stuff.

Parameters
addingTrue if adding tiles, false if removing them.
typeStationType being modified.

Definition at line 753 of file station_cmd.cpp.

References DirtyCompanyInfrastructureWindows(), BaseStation::owner, RecomputeCatchment(), and UpdateVirtCoord().

◆ 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 455 of file station.cpp.

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

◆ GetCatchmentRadius()

uint Station::GetCatchmentRadius ( ) const

◆ GetCatchmentRect()

Rect Station::GetCatchmentRect ( ) const

Determines catchment rectangle of this station.

Returns
clamped catchment rectangle

Definition at line 369 of file station.cpp.

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

Referenced by RecomputeCatchment().

◆ 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 270 of file station.cpp.

References AXIS_X, GetRailStationAxis(), IsCompatibleTrainStationTile(), TileBelongsToRailStation(), and TileDiffXY().

◆ 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 292 of file station.cpp.

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

Referenced by GetTrainStopLocation(), and UpdateLoadUnloadTicks().

◆ GetTileArea()

void Station::GetTileArea ( TileArea ta,
StationType  type 
) const
overridevirtual

Get the tile area for a given station type.

Parameters
tatile area to fill.
typethe type of the area

Implements BaseStation.

Definition at line 411 of file station_cmd.cpp.

◆ 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 464 of file station_cmd.cpp.

References BaseStation::xy.

Referenced by AddFacility().

◆ RecomputeCatchment()

◆ RecomputeCatchmentForAll()

void Station::RecomputeCatchmentForAll ( )
static

◆ RemoveIndustryToDeliver()

void Station::RemoveIndustryToDeliver ( Industry ind)

Remove nearby industry from station's industries_near list.

Parameters
indIndustry

Definition at line 418 of file station.cpp.

References industries_near.

Referenced by RecomputeCatchment().

◆ 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 504 of file station_base.h.

References GetStationIndex(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >::index, and IsRailStationTile().

Referenced by GetPlatformLength(), and MarkTilesDirty().

Field Documentation

◆ industries_near

IndustryList Station::industries_near

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

See also
DeliverGoodsToIndustry()

Definition at line 471 of file station_base.h.

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


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