changeset 4041:3784f32d96d2 draft

(svn r5309) Partially fix the rail header dependency fiasco: rail_map.h now depends on rail.h and not the other way round anymore
author tron <tron@openttd.org>
date Sun, 18 Jun 2006 15:28:29 +0000
parents ef42921236c2
children 8b6234cb8e0a
files clear_cmd.c rail.h rail_map.h station_map.h train_gui.c
diffstat 5 files changed, 103 insertions(+), 101 deletions(-) [+]
line wrap: on
line diff
--- 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"
--- 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 @@
 /* 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
--- 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 @@
 }
 
 
-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 @@
 }
 
 
-/** 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 @@
 }
 
 
+/**
+ * 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,
--- 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;
--- 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"