summaryrefslogtreecommitdiff
path: root/rail.h
diff options
context:
space:
mode:
authortron <tron@openttd.org>2006-06-18 15:28:29 +0000
committertron <tron@openttd.org>2006-06-18 15:28:29 +0000
commit1ad425e8029106b6af017c19d3498eb68f3b0403 (patch)
tree76829680f3512a205c958d3557a4ef7c8c99b869 /rail.h
parent60e65953fc57031123dc4235de36e70e3556e496 (diff)
downloadopenttd-1ad425e8029106b6af017c19d3498eb68f3b0403.tar.xz
(svn r5309) Partially fix the rail header dependency fiasco: rail_map.h now depends on rail.h and not the other way round anymore
Diffstat (limited to 'rail.h')
-rw-r--r--rail.h103
1 files changed, 47 insertions, 56 deletions
diff --git a/rail.h b/rail.h
index 70a95016c..97706d256 100644
--- a/rail.h
+++ b/rail.h
@@ -6,9 +6,55 @@
#define RAIL_H
#include "direction.h"
-#include "rail_map.h"
#include "tile.h"
+typedef enum RailTypes {
+ RAILTYPE_RAIL = 0,
+ RAILTYPE_ELECTRIC = 1,
+ RAILTYPE_MONO = 2,
+ RAILTYPE_MAGLEV = 3,
+ RAILTYPE_END,
+ INVALID_RAILTYPE = 0xFF
+} RailType;
+
+typedef byte RailTypeMask;
+
+
+/** These are used to specify a single track.
+ * Can be translated to a trackbit with TrackToTrackbit */
+typedef enum Track {
+ TRACK_X = 0,
+ TRACK_Y = 1,
+ TRACK_UPPER = 2,
+ TRACK_LOWER = 3,
+ TRACK_LEFT = 4,
+ TRACK_RIGHT = 5,
+ TRACK_END,
+ INVALID_TRACK = 0xFF
+} Track;
+
+
+/** Bitfield corresponding to Track */
+typedef enum TrackBits {
+ TRACK_BIT_NONE = 0U,
+ TRACK_BIT_X = 1U << TRACK_X,
+ TRACK_BIT_Y = 1U << TRACK_Y,
+ TRACK_BIT_UPPER = 1U << TRACK_UPPER,
+ TRACK_BIT_LOWER = 1U << TRACK_LOWER,
+ TRACK_BIT_LEFT = 1U << TRACK_LEFT,
+ TRACK_BIT_RIGHT = 1U << TRACK_RIGHT,
+ TRACK_BIT_CROSS = TRACK_BIT_X | TRACK_BIT_Y,
+ TRACK_BIT_HORZ = TRACK_BIT_UPPER | TRACK_BIT_LOWER,
+ TRACK_BIT_VERT = TRACK_BIT_LEFT | TRACK_BIT_RIGHT,
+ TRACK_BIT_3WAY_NE = TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_RIGHT,
+ TRACK_BIT_3WAY_SE = TRACK_BIT_Y | TRACK_BIT_LOWER | TRACK_BIT_RIGHT,
+ TRACK_BIT_3WAY_SW = TRACK_BIT_X | TRACK_BIT_LOWER | TRACK_BIT_LEFT,
+ TRACK_BIT_3WAY_NW = TRACK_BIT_Y | TRACK_BIT_UPPER | TRACK_BIT_LEFT,
+ TRACK_BIT_ALL = TRACK_BIT_CROSS | TRACK_BIT_HORZ | TRACK_BIT_VERT,
+ TRACK_BIT_MASK = 0x3FU
+} TrackBits;
+
+
/** These are a combination of tracks and directions. Values are 0-5 in one
direction (corresponding to the Track enum) and 8-13 in the other direction. */
typedef enum Trackdirs {
@@ -326,61 +372,6 @@ static inline bool IsDiagonalTrack(Track track) { return (track == TRACK_X) || (
/* Checks if a given Trackdir is diagonal. */
static inline bool IsDiagonalTrackdir(Trackdir trackdir) { return IsDiagonalTrack(TrackdirToTrack(trackdir)); }
-/*
- * Functions quering signals on tiles.
- */
-
-/**
- * Checks for the presence of signals (either way) on the given track on the
- * given rail tile.
- */
-static inline bool HasSignalOnTrack(TileIndex tile, Track track)
-{
- assert(IsValidTrack(track));
- return
- GetRailTileType(tile) == RAIL_TILE_SIGNALS &&
- (_m[tile].m3 & SignalOnTrack(track)) != 0;
-}
-
-/**
- * Checks for the presence of signals along the given trackdir on the given
- * rail tile.
- *
- * Along meaning if you are currently driving on the given trackdir, this is
- * the signal that is facing us (for which we stop when it's red).
- */
-static inline bool HasSignalOnTrackdir(TileIndex tile, Trackdir trackdir)
-{
- assert (IsValidTrackdir(trackdir));
- return
- GetRailTileType(tile) == RAIL_TILE_SIGNALS &&
- _m[tile].m3 & SignalAlongTrackdir(trackdir);
-}
-
-/**
- * Gets the state of the signal along the given trackdir.
- *
- * Along meaning if you are currently driving on the given trackdir, this is
- * the signal that is facing us (for which we stop when it's red).
- */
-static inline SignalState GetSignalStateByTrackdir(TileIndex tile, Trackdir trackdir)
-{
- assert(IsValidTrackdir(trackdir));
- assert(HasSignalOnTrack(tile, TrackdirToTrack(trackdir)));
- return _m[tile].m2 & SignalAlongTrackdir(trackdir) ?
- SIGNAL_STATE_GREEN : SIGNAL_STATE_RED;
-}
-
-
-/**
- * Return the rail type of tile, or INVALID_RAILTYPE if this is no rail tile.
- * Note that there is no check if the given trackdir is actually present on
- * the tile!
- * The given trackdir is used when there are (could be) multiple rail types on
- * one tile.
- */
-RailType GetTileRailType(TileIndex tile, Trackdir trackdir);
-
/**
* Returns a pointer to the Railtype information for a given railtype