summaryrefslogtreecommitdiff
path: root/rail.h
diff options
context:
space:
mode:
authormatthijs <matthijs@openttd.org>2005-06-22 22:38:18 +0000
committermatthijs <matthijs@openttd.org>2005-06-22 22:38:18 +0000
commit7549cb52714014a10f62c6d04fd8bcad21e09a33 (patch)
treea7c77399d349a4859cb2ea13be5ad9abd8fef001 /rail.h
parent3192b4becd50a0b138f431f439dcb5178edbb27b (diff)
downloadopenttd-7549cb52714014a10f62c6d04fd8bcad21e09a33.tar.xz
(svn r2473) - Add: VehicleMayEnterTile(), which checks if the tile owner of a tile is correct for a vehicle to enter it. Based upon glx's code.
- Fix: [ 1203769 ] [NPF] NPF tries to plan over bridges, through tunnels, over level crossings of other players. (glx) - Codechange: Renamed TRANSPORT_MAX to TRANSPORT_END and added INVALID_TRANSPORT. - Codechange: Moved IsLevelCrossing() from tile.h to rail.h - Add: GetCrossingTransportType(), which returns the transport type (road, rail) of both tracks on a level crossing. - Removed old TODO that was fulfilled already.
Diffstat (limited to 'rail.h')
-rw-r--r--rail.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/rail.h b/rail.h
index 5edfa16e5..fad1bf3d3 100644
--- a/rail.h
+++ b/rail.h
@@ -443,4 +443,33 @@ static inline bool HasSemaphores(TileIndex tile, Track track)
*/
RailType GetTileRailType(TileIndex tile, byte trackdir);
+/**
+ * Returns whether the given tile is a level crossing.
+ */
+static inline bool IsLevelCrossing(TileIndex tile)
+{
+ return (_map5[tile] & 0xF0) == 0x10;
+}
+
+/**
+ * Gets the transport type of the given track on the given crossing tile.
+ * @return The transport type of the given track, either TRANSPORT_ROAD,
+ * TRANSPORT_RAIL.
+ */
+static inline TransportType GetCrossingTransportType(TileIndex tile, Track track)
+{
+ /* XXX: Nicer way to write this? */
+ switch(track)
+ {
+ /* When map5 bit 3 is set, the road runs in the y direction (DIAG2) */
+ case TRACK_DIAG1:
+ return (HASBIT(_map5[tile], 3) ? TRANSPORT_RAIL : TRANSPORT_ROAD);
+ case TRACK_DIAG2:
+ return (HASBIT(_map5[tile], 3) ? TRANSPORT_ROAD : TRANSPORT_RAIL);
+ default:
+ assert(0);
+ }
+ return INVALID_TRANSPORT;
+}
+
#endif // RAIL_H