MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / TryReserveRailTrack

Function TryReserveRailTrack

src/pbs.cpp:80–137  ·  view source on GitHub ↗

* Try to reserve a specific track on a tile * @param tile the tile * @param t the track * @param trigger_stations whether to call station randomisation trigger * @return \c true if reservation was successful, i.e. the track was * free and didn't cross any other reserved tracks. */

Source from the content-addressed store, hash-verified

78 * free and didn't cross any other reserved tracks.
79 */
80bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations)
81{
82 assert(HasTrack(TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0)), t));
83
84 if (_settings_client.gui.show_track_reservation) {
85 /* show the reserved rail if needed */
86 if (IsBridgeTile(tile)) {
87 MarkBridgeDirty(tile);
88 } else {
89 MarkTileDirtyByTile(tile);
90 }
91 }
92
93 switch (GetTileType(tile)) {
94 case MP_RAILWAY:
95 if (IsPlainRail(tile)) return TryReserveTrack(tile, t);
96 if (IsRailDepot(tile)) {
97 if (!HasDepotReservation(tile)) {
98 SetDepotReservation(tile, true);
99 MarkTileDirtyByTile(tile); // some GRFs change their appearance when tile is reserved
100 return true;
101 }
102 }
103 break;
104
105 case MP_ROAD:
106 if (IsLevelCrossing(tile) && !HasCrossingReservation(tile)) {
107 SetCrossingReservation(tile, true);
108 UpdateLevelCrossing(tile, false);
109 return true;
110 }
111 break;
112
113 case MP_STATION:
114 if (HasStationRail(tile) && !HasStationReservation(tile)) {
115 SetRailStationReservation(tile, true);
116 if (trigger_stations) {
117 auto *st = BaseStation::GetByTile(tile);
118 TriggerStationRandomisation(st, tile, StationRandomTrigger::PathReservation);
119 TriggerStationAnimation(st, tile, StationAnimationTrigger::PathReservation);
120 }
121 MarkTileDirtyByTile(tile); // some GRFs need redraw after reserving track
122 return true;
123 }
124 break;
125
126 case MP_TUNNELBRIDGE:
127 if (GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL && !GetTunnelBridgeReservationTrackBits(tile)) {
128 SetTunnelBridgeReservation(tile, true);
129 return true;
130 }
131 break;
132
133 default:
134 break;
135 }
136 return false;
137}

Callers 6

ExtendTrainReservationFunction · 0.85
ChooseTrainTrackFunction · 0.85
TrainControllerFunction · 0.85
DeleteLastWagonFunction · 0.85
ReserveSingleTrackMethod · 0.85

Calls 15

TrackStatusToTrackBitsFunction · 0.85
GetTileTrackStatusFunction · 0.85
IsBridgeTileFunction · 0.85
MarkBridgeDirtyFunction · 0.85
GetTileTypeFunction · 0.85
IsPlainRailFunction · 0.85
TryReserveTrackFunction · 0.85
IsRailDepotFunction · 0.85
HasDepotReservationFunction · 0.85
SetDepotReservationFunction · 0.85
IsLevelCrossingFunction · 0.85
HasCrossingReservationFunction · 0.85

Tested by

no test coverage detected