251 static inline TrackBits GetCrossingRailBits(TileIndex tile) |
251 static inline TrackBits GetCrossingRailBits(TileIndex tile) |
252 { |
252 { |
253 return AxisToTrackBits(GetCrossingRailAxis(tile)); |
253 return AxisToTrackBits(GetCrossingRailAxis(tile)); |
254 } |
254 } |
255 |
255 |
|
256 |
|
257 /** |
|
258 * Get the reservation state of the rail crossing |
|
259 * @pre IsLevelCrossingTile(t) |
|
260 * @param t the crossing tile |
|
261 * @return reservation state |
|
262 */ |
|
263 static inline bool GetCrossingReservation(TileIndex t) |
|
264 { |
|
265 assert(IsLevelCrossingTile(t)); |
|
266 return HasBit(_m[t].m5, 4); |
|
267 } |
|
268 |
|
269 /** |
|
270 * Set the reservation state of the rail crossing |
|
271 * @note Works for both waypoints and rail depots |
|
272 * @pre IsLevelCrossingTile(t) |
|
273 * @param t the crossing tile |
|
274 * @param b the reservation state |
|
275 */ |
|
276 static inline void SetCrossingReservation(TileIndex t, bool b) |
|
277 { |
|
278 assert(IsLevelCrossingTile(t)); |
|
279 SB(_m[t].m5, 4, 1, b ? 1 : 0); |
|
280 } |
|
281 |
|
282 /** |
|
283 * Get the reserved track bits for a rail crossing |
|
284 * @pre IsLevelCrossingTile(t) |
|
285 * @param t the tile |
|
286 * @return reserved track bits |
|
287 */ |
|
288 static inline TrackBits GetRailCrossingReservation(TileIndex t) |
|
289 { |
|
290 return GetCrossingReservation(t) ? GetCrossingRailBits(t) : TRACK_BIT_NONE; |
|
291 } |
|
292 |
256 static inline bool IsCrossingBarred(TileIndex t) |
293 static inline bool IsCrossingBarred(TileIndex t) |
257 { |
294 { |
258 assert(IsLevelCrossing(t)); |
295 assert(IsLevelCrossing(t)); |
259 return HasBit(_m[t].m4, 5); |
296 return HasBit(_m[t].m4, 5); |
260 } |
297 } |