diff options
-rw-r--r-- | clear_cmd.c | 1 | ||||
-rw-r--r-- | rail.h | 103 | ||||
-rw-r--r-- | rail_map.h | 98 | ||||
-rw-r--r-- | station_map.h | 1 | ||||
-rw-r--r-- | train_gui.c | 1 |
5 files changed, 103 insertions, 101 deletions
diff --git a/clear_cmd.c b/clear_cmd.c index 648baaae1..8ccd78758 100644 --- a/clear_cmd.c +++ b/clear_cmd.c @@ -3,6 +3,7 @@ #include "stdafx.h" #include "openttd.h" #include "clear_map.h" +#include "rail_map.h" #include "table/strings.h" #include "functions.h" #include "map.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 diff --git a/rail_map.h b/rail_map.h index 44a42f9aa..bf32f5030 100644 --- a/rail_map.h +++ b/rail_map.h @@ -4,6 +4,7 @@ #define RAIL_MAP_H #include "direction.h" +#include "rail.h" #include "tile.h" @@ -59,17 +60,6 @@ static inline RailTileSubtype GetRailTileSubtype(TileIndex tile) } -typedef enum RailTypes { - RAILTYPE_RAIL = 0, - RAILTYPE_ELECTRIC = 1, - RAILTYPE_MONO = 2, - RAILTYPE_MAGLEV = 3, - RAILTYPE_END, - INVALID_RAILTYPE = 0xFF -} RailType; - -typedef byte RailTypeMask; - static inline RailType GetRailType(TileIndex t) { return (RailType)GB(_m[t].m3, 0, 4); @@ -103,40 +93,6 @@ static inline void SetRailTypeOnBridge(TileIndex t, RailType r) } -/** 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; - static inline TrackBits GetTrackBits(TileIndex tile) { return (TrackBits)GB(_m[tile].m5, 0, 6); @@ -269,6 +225,58 @@ static inline SignalState GetSingleSignalState(TileIndex t, byte signalbit) } +/** + * 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); + + typedef enum RailGroundType { RAIL_MAP2LO_GROUND_MASK = 0xF, RAIL_GROUND_BARREN = 0, diff --git a/station_map.h b/station_map.h index 822e79745..7033f63aa 100644 --- a/station_map.h +++ b/station_map.h @@ -3,6 +3,7 @@ #ifndef STATION_MAP_H #define STATION_MAP_H +#include "rail_map.h" #include "station.h" typedef byte StationGfx; diff --git a/train_gui.c b/train_gui.c index 0efc818c1..3a2b2c590 100644 --- a/train_gui.c +++ b/train_gui.c @@ -4,6 +4,7 @@ #include "openttd.h" #include "debug.h" #include "functions.h" +#include "rail_map.h" #include "table/sprites.h" #include "table/strings.h" #include "map.h" |