OpenTTD Source
20241120-master-g6d3adc6169
|
Station data structure. More...
#include <station_base.h>
Public Member Functions | |
RoadStop * | GetPrimaryRoadStop (RoadStopType type) const |
RoadStop * | GetPrimaryRoadStop (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 Station * | Get (size_t index) |
Gets station with given index. More... | |
static Station * | GetIfValid (size_t index) |
Returns station if the index is a valid index for this station type. More... | |
static Station * | GetByTile (TileIndex tile) |
Get the station belonging to a specific tile. More... | |
static Station * | From (BaseStation *st) |
Converts a BaseStation to SpecializedStation with type checking. More... | |
static const Station * | From (const BaseStation *st) |
Converts a const BaseStation to const SpecializedStation with type checking. More... | |
static Pool::IterateWrapper< Station > | Iterate (size_t from=0) |
Returns an iterable ensemble of all valid stations of type T. More... | |
Static Public Member Functions inherited from BaseStation | |
static BaseStation * | GetByTile (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 | |
RoadStop * | bus_stops |
All the road stops. | |
TileArea | bus_station |
Tile area the bus 'station' part covers. | |
RoadStop * | truck_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... | |
Industry * | industry |
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. | |
Town * | town |
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< RoadStopTileData > | custom_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. | |
Station data structure.
Definition at line 439 of file station_base.h.
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().
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.
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.
Definition at line 385 of file station.cpp.
References DistanceMax(), industries_near, Industry::IsCargoAccepted(), and BaseStation::xy.
Referenced by RecomputeCatchment().
void Station::AfterStationTileSetChange | ( | bool | adding, |
StationType | type | ||
) |
After adding/removing tiles to station, update some station-related stuff.
adding | True if adding tiles, false if removing them. |
type | StationType being modified. |
Definition at line 753 of file station_cmd.cpp.
References DirtyCompanyInfrastructureWindows(), BaseStation::owner, RecomputeCatchment(), and UpdateVirtCoord().
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.
t | TownID to test. |
Definition at line 448 of file station.cpp.
References catchment_tiles, GetTownIndex(), INVALID_TILE, IsTileType(), and MP_HOUSE.
uint Station::GetCatchmentRadius | ( | ) | const |
Determines the catchment radius of the station.
Definition at line 339 of file station.cpp.
References _settings_game, airport, bus_stops, CA_BUS, CA_DOCK, CA_NONE, CA_TRAIN, CA_TRUCK, CA_UNMODIFIED, AirportSpec::catchment, Airport::GetSpec(), INVALID_TILE, StationSettings::modified_catchment, ship_station, GameSettings::station, OrthogonalTileArea::tile, BaseStation::train_station, and truck_stops.
Referenced by GetCatchmentRect().
Rect Station::GetCatchmentRect | ( | ) | const |
Determines catchment rectangle of this station.
Definition at line 362 of file station.cpp.
References GetCatchmentRadius(), Map::MaxX(), Map::MaxY(), and BaseStation::rect.
Referenced by RecomputeCatchment().
|
overridevirtual |
Obtain the length of a platform.
tile | A tile that contains the platform in question |
Implements BaseStation.
Definition at line 263 of file station.cpp.
References GetRailStationAxis(), IsCompatibleTrainStationTile(), TileBelongsToRailStation(), and TileOffsByAxis().
|
overridevirtual |
Determines the REMAINING length of a platform, starting at (and including) the given tile.
tile | the tile from which to start searching. Must be a rail station tile |
dir | The direction in which to search. |
Implements BaseStation.
Definition at line 285 of file station.cpp.
References DIAGDIR_END, IsCompatibleTrainStationTile(), IsRailStationTile(), and TileOffsByDiagDir().
Referenced by GetTrainStopLocation(), and UpdateLoadUnloadTicks().
|
overridevirtual |
Get the tile area for a given station type.
ta | tile area to fill. |
type | the type of the area |
Implements BaseStation.
Definition at line 411 of file station_cmd.cpp.
|
overridevirtual |
Move the station main coordinate somewhere else.
new_xy | new tile location of the sign |
Reimplemented from BaseStation.
Definition at line 464 of file station_cmd.cpp.
References BaseStation::xy.
Referenced by AddFacility().
void Station::RecomputeCatchment | ( | bool | no_clear_nearby_lists = false | ) |
Recompute tiles covered in our catchment area.
This will additionally recompute nearby towns and industries.
no_clear_nearby_lists | If Station::RemoveFromAllNearbyLists does not need to be called. |
Definition at line 462 of file station.cpp.
References _settings_game, AddIndustryToDeliver(), CA_NONE, catchment_tiles, OrthogonalTileArea::Expand(), Industry::GetByTile(), GetCatchmentRect(), GetIndustryIndex(), GetStationIndex(), GetTileCatchmentRadius(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, industries_near, industry, BitmapTileArea::Initialize(), INVALID_TILE, IsTileType(), Industry::location, MP_HOUSE, MP_INDUSTRY, MP_STATION, Industry::neutral_station, BaseStation::rect, RemoveFromAllNearbyLists(), RemoveIndustryToDeliver(), BitmapTileArea::Reset(), StationSettings::serve_neutral_industries, BitmapTileArea::SetTile(), GameSettings::station, Industry::stations_near, Town::stations_near, and TileXY().
Referenced by AfterStationTileSetChange().
|
static |
Recomputes catchment of all stations.
This will additionally recompute nearby stations for all towns and industries.
Definition at line 530 of file station.cpp.
References SpecializedStation< Station, false >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::Iterate(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate().
void Station::RemoveIndustryToDeliver | ( | Industry * | ind | ) |
Remove nearby industry from station's industries_near list.
ind | Industry |
Definition at line 411 of file station.cpp.
References industries_near.
Referenced by RecomputeCatchment().
|
inlineoverridevirtual |
Check whether a specific tile belongs to this station.
tile | the tile to check |
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().
IndustryList Station::industries_near |
Cached list of industries near the station that can accept cargo,.
Definition at line 471 of file station_base.h.
Referenced by AddCargoDelivery(), AddIndustryToDeliver(), CheckSubsidised(), DeliverGoodsToIndustry(), PopulateStationsNearby(), RecomputeCatchment(), and RemoveIndustryToDeliver().