OpenTTD Source 20241224-master-gf74b0cf984
|
A Stop for a Road Vehicle. More...
#include <roadstop_base.h>
Data Structures | |
struct | Entry |
Container for each entry point of a drive through road stop. More... | |
Public Types | |
enum | RoadStopStatusFlags { RSSFB_BAY0_FREE = 0 , RSSFB_BAY1_FREE = 1 , RSSFB_BASE_ENTRY = 6 , RSSFB_ENTRY_BUSY = 7 } |
Public Types inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_roadstop_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. | |
Public Member Functions | |
RoadStop (TileIndex tile=INVALID_TILE) | |
Initializes a RoadStop. | |
~RoadStop () | |
De-Initializes RoadStops. | |
bool | HasFreeBay () const |
Checks whether there is a free bay in this road stop. | |
bool | IsFreeBay (uint nr) const |
Checks whether the given bay is free in this road stop. | |
bool | IsEntranceBusy () const |
Checks whether the entrance of the road stop is occupied by a vehicle. | |
void | SetEntranceBusy (bool busy) |
Makes an entrance occupied or free. | |
const Entry * | GetEntry (DiagDirection dir) const |
Get the drive through road stop entry struct for the given direction. | |
Entry * | GetEntry (DiagDirection dir) |
Get the drive through road stop entry struct for the given direction. | |
void | MakeDriveThrough () |
Join this road stop to another 'base' road stop if possible; fill all necessary data to become an actual drive through road stop. | |
void | ClearDriveThrough () |
Prepare for removal of this stop; update other neighbouring stops if needed. | |
void | Leave (RoadVehicle *rv) |
Leave the road stop. | |
bool | Enter (RoadVehicle *rv) |
Enter the road stop. | |
RoadStop * | GetNextRoadStop (const struct RoadVehicle *v) const |
Get the next road stop accessible by this vehicle. | |
Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_roadstop_pool > | |
void * | operator new (size_t size) |
Allocates space for new Titem. | |
void * | operator new (size_t size, size_t index) |
Allocates space for new Titem with given index. | |
void * | operator new (size_t, void *ptr) |
Allocates space for new Titem at given memory address. | |
void | operator delete (void *p) |
Marks Titem as free. | |
Static Public Member Functions | |
static RoadStop * | GetByTile (TileIndex tile, RoadStopType type) |
Find a roadstop at given tile. | |
static bool | IsDriveThroughRoadStopContinuation (TileIndex rs, TileIndex next) |
Checks whether the 'next' tile is still part of the road same drive through stop 'rs' in the same direction for the same vehicle. | |
Static Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_roadstop_pool > | |
static bool | CanAllocateItem (size_t n=1) |
Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function() | |
static bool | CleaningPool () |
Returns current state of pool cleaning - yes or no. | |
static bool | IsValidID (size_t index) |
Tests whether given index can be used to get valid (non-nullptr) Titem. | |
static Titem * | Get (size_t index) |
Returns Titem with given index. | |
static Titem * | GetIfValid (size_t index) |
Returns Titem with given index. | |
static size_t | GetPoolSize () |
Returns first unused index. | |
static size_t | GetNumItems () |
Returns number of valid items in the pool. | |
static void | PostDestructor (size_t index) |
Dummy function called after destructor of each member. | |
static Pool::IterateWrapper< Titem > | Iterate (size_t from=0) |
Returns an iterable ensemble of all valid Titem. | |
Data Fields | |
uint8_t | status |
Current status of the Stop,. | |
TileIndex | xy |
Position on the map. | |
RoadStop * | next |
Next stop of the given type at this station. | |
Data Fields inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_roadstop_pool > | |
Tindex | index |
Index of this pool item. | |
Static Public Attributes | |
static constexpr uint8_t | BAY_COUNT = 2 |
Max. number of bays. | |
Private Member Functions | |
uint | AllocateBay () |
Allocates a bay. | |
void | AllocateDriveThroughBay (uint nr) |
Allocates a bay in a drive-through road stop. | |
void | FreeBay (uint nr) |
Frees the given bay. | |
Private Attributes | |
Entry * | east |
The vehicles that entered from the east. | |
Entry * | west |
The vehicles that entered from the west. | |
A Stop for a Road Vehicle.
Definition at line 22 of file roadstop_base.h.
Definition at line 23 of file roadstop_base.h.
|
inline |
Initializes a RoadStop.
Definition at line 73 of file roadstop_base.h.
RoadStop::~RoadStop | ( | ) |
|
inlineprivate |
Allocates a bay.
Definition at line 159 of file roadstop_base.h.
References ClrBit(), HasBit(), and HasFreeBay().
Referenced by Enter().
|
inlineprivate |
Allocates a bay in a drive-through road stop.
nr | the number of the bay to allocate |
Definition at line 175 of file roadstop_base.h.
void RoadStop::ClearDriveThrough | ( | ) |
Prepare for removal of this stop; update other neighbouring stops if needed.
Also update the length etc.
Definition at line 129 of file roadstop.cpp.
References ClrBit(), east, GetByTile(), GetDriveThroughStopAxis(), GetRoadStopType(), HasBit(), IsDriveThroughRoadStopContinuation(), RoadStop::Entry::length, RoadStop::Entry::Rebuild(), RSSFB_BASE_ENTRY, SetBit(), status, TILE_SIZE, TileOffsByAxis(), west, and xy.
Referenced by RemoveRoadStop().
bool RoadStop::Enter | ( | RoadVehicle * | rv | ) |
Enter the road stop.
rv | the vehicle that enters the stop |
Definition at line 231 of file roadstop.cpp.
References AllocateBay(), Vehicle::direction, DirToDiagDir(), RoadStop::Entry::Enter(), GetEntry(), Vehicle::HasArticulatedPart(), HasFreeBay(), IsBayRoadStopTile(), IsEntranceBusy(), RVS_IN_DT_ROAD_STOP, RVS_IN_ROAD_STOP, RVS_USING_SECOND_BAY, SB(), SetBit(), SetEntranceBusy(), RoadVehicle::state, and xy.
|
inlineprivate |
Frees the given bay.
nr | the number of the bay to free |
Definition at line 185 of file roadstop_base.h.
References BAY_COUNT, and SetBit().
Referenced by Leave().
|
static |
Find a roadstop at given tile.
tile | tile with roadstop |
type | roadstop type |
Definition at line 264 of file roadstop.cpp.
References BaseStation::GetByTile().
Referenced by ClearDriveThrough(), RoadVehicle::Crash(), DeleteLastRoadVeh(), MakeDriveThrough(), CYapfCostRoadT< Types >::OneTileCost(), Vehicle::PreDestructor(), RemoveRoadStop(), and RoadFindPathToDest().
|
inline |
Get the drive through road stop entry struct for the given direction.
dir | The direction to get the entry for. |
Definition at line 133 of file roadstop_base.h.
|
inline |
Get the drive through road stop entry struct for the given direction.
dir | The direction to get the entry for. |
Definition at line 123 of file roadstop_base.h.
References east, HasBit(), and west.
Referenced by Enter(), Leave(), and CYapfCostRoadT< Types >::OneTileCost().
RoadStop * RoadStop::GetNextRoadStop | ( | const struct RoadVehicle * | v | ) | const |
Get the next road stop accessible by this vehicle.
v | the vehicle to get the next road stop for. |
Definition at line 42 of file roadstop.cpp.
References RoadVehicle::compatible_roadtypes, Vehicle::HasArticulatedPart(), HasTileAnyRoadType(), IsBayRoadStopTile(), and next.
|
inline |
Checks whether there is a free bay in this road stop.
Definition at line 84 of file roadstop_base.h.
References BAY_COUNT, and GB().
Referenced by AllocateBay(), and Enter().
Checks whether the 'next' tile is still part of the road same drive through stop 'rs' in the same direction for the same vehicle.
rs | the road stop tile to check against |
next | the 'next' tile to check |
Definition at line 303 of file roadstop.cpp.
References GetDriveThroughStopAxis(), GetStationIndex(), GetStationType(), IsDriveThroughStopTile(), IsTileType(), MP_STATION, and next.
Referenced by RoadStop::Entry::CheckIntegrity(), ClearDriveThrough(), MakeDriveThrough(), CYapfCostRoadT< Types >::OneTileCost(), and RoadStop::Entry::Rebuild().
|
inline |
Checks whether the entrance of the road stop is occupied by a vehicle.
Definition at line 104 of file roadstop_base.h.
References HasBit(), and RSSFB_ENTRY_BUSY.
Referenced by Enter().
|
inline |
Checks whether the given bay is free in this road stop.
nr | bay to check |
Definition at line 94 of file roadstop_base.h.
References BAY_COUNT, and HasBit().
Referenced by CYapfCostRoadT< Types >::OneTileCost().
void RoadStop::Leave | ( | RoadVehicle * | rv | ) |
Leave the road stop.
rv | the vehicle that leaves the stop |
Definition at line 214 of file roadstop.cpp.
References Vehicle::direction, DirToDiagDir(), FreeBay(), GetEntry(), HasBit(), IsBayRoadStopTile(), RoadStop::Entry::Leave(), RVS_USING_SECOND_BAY, SetEntranceBusy(), RoadVehicle::state, and Vehicle::tile.
Referenced by RoadVehicle::Crash(), DeleteLastRoadVeh(), and Vehicle::PreDestructor().
void RoadStop::MakeDriveThrough | ( | ) |
Join this road stop to another 'base' road stop if possible; fill all necessary data to become an actual drive through road stop.
Also update the length etc.
Definition at line 62 of file roadstop.cpp.
References ClrBit(), east, GetByTile(), GetDriveThroughStopAxis(), GetRoadStopType(), IsDriveThroughRoadStopContinuation(), RoadStop::Entry::length, RoadStop::Entry::occupied, RSSFB_BASE_ENTRY, SetBit(), status, TILE_SIZE, TileOffsByAxis(), west, and xy.
Referenced by CmdBuildRoadStop().
|
inline |
Makes an entrance occupied or free.
busy | If true, marks busy; free otherwise. |
Definition at line 113 of file roadstop_base.h.
References RSSFB_ENTRY_BUSY, and SB().
|
staticconstexpr |
Max. number of bays.
Definition at line 30 of file roadstop_base.h.
Referenced by AllocateDriveThroughBay(), FreeBay(), HasFreeBay(), and IsFreeBay().
|
private |
The vehicles that entered from the east.
Definition at line 151 of file roadstop_base.h.
Referenced by RoadStop::Entry::CheckIntegrity(), ClearDriveThrough(), GetEntry(), GetEntry(), GetEntryDirection(), MakeDriveThrough(), and RoadStop::Entry::Rebuild().
RoadStop* RoadStop::next |
Next stop of the given type at this station.
Definition at line 70 of file roadstop_base.h.
Referenced by FindRoadStopSpot(), GetNextRoadStop(), GetVehicleCannotUseStationReason(), IsDriveThroughRoadStopContinuation(), and RemoveRoadStop().
uint8_t RoadStop::status |
Current status of the Stop,.
Definition at line 68 of file roadstop_base.h.
Referenced by RoadStop::Entry::CheckIntegrity(), ClearDriveThrough(), MakeDriveThrough(), and RoadStop::Entry::Rebuild().
|
private |
The vehicles that entered from the west.
Definition at line 152 of file roadstop_base.h.
Referenced by ClearDriveThrough(), GetEntry(), GetEntry(), and MakeDriveThrough().
TileIndex RoadStop::xy |
Position on the map.
Definition at line 69 of file roadstop_base.h.
Referenced by RoadStop::Entry::CheckIntegrity(), ClearDriveThrough(), Enter(), GetVehicleCannotUseStationReason(), MakeDriveThrough(), and RoadStop::Entry::Rebuild().