--- a/src/rail.h Sat Oct 06 21:16:00 2007 +0000
+++ b/src/rail.h Mon Dec 03 23:39:38 2007 +0000
@@ -8,6 +8,7 @@
#include "gfx.h"
#include "direction.h"
#include "tile.h"
+#include "variables.h"
/**
* Enumeration for all possible railtypes.
@@ -120,6 +121,19 @@
return TrackToTrackBits(AxisToTrack(a));
}
+/**
+ * Returns a single horizontal/vertical trackbit, that is in a specific tile corner.
+ *
+ * @param corner The corner of a tile.
+ * @return The TrackBits of the track in the corner.
+ */
+static inline TrackBits CornerToTrackBits(Corner corner)
+{
+ extern const TrackBits _corner_to_trackbits[];
+ assert(IsValidCorner(corner));
+ return _corner_to_trackbits[corner];
+}
+
/**
* Enumeration for tracks and directions.
@@ -298,7 +312,7 @@
{
if (*tracks != TRACK_BIT_NONE && *tracks != INVALID_TRACK_BIT) {
Track first = (Track)FIND_FIRST_BIT(*tracks);
- ClrBitT(*tracks, first);
+ ClrBit(*tracks, first);
return first;
}
return INVALID_TRACK;
@@ -322,7 +336,7 @@
{
if (*trackdirs != TRACKDIR_BIT_NONE && *trackdirs != INVALID_TRACKDIR_BIT) {
Trackdir first = (Trackdir)FindFirstBit2x64(*trackdirs);
- ClrBitT(*trackdirs, first);
+ ClrBit(*trackdirs, first);
return first;
}
return INVALID_TRACKDIR;
@@ -356,7 +370,7 @@
*/
static inline Track TrackBitsToTrack(TrackBits tracks)
{
- assert(tracks == INVALID_TRACK_BIT || (tracks != TRACK_BIT_NONE && KILL_FIRST_BIT(tracks & TRACK_BIT_MASK) == 0));
+ assert(tracks == INVALID_TRACK_BIT || (tracks != TRACK_BIT_NONE && KillFirstBit(tracks & TRACK_BIT_MASK) == TRACK_BIT_NONE));
return tracks != INVALID_TRACK_BIT ? (Track)FIND_FIRST_BIT(tracks & TRACK_BIT_MASK) : INVALID_TRACK;
}
@@ -745,7 +759,7 @@
*/
static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype)
{
- return HASBIT(GetRailTypeInfo(enginetype)->compatible_railtypes, tiletype);
+ return HasBit(GetRailTypeInfo(enginetype)->compatible_railtypes, tiletype);
}
/**
@@ -758,7 +772,7 @@
*/
static inline bool HasPowerOnRail(RailType enginetype, RailType tiletype)
{
- return HASBIT(GetRailTypeInfo(enginetype)->powered_railtypes, tiletype);
+ return HasBit(GetRailTypeInfo(enginetype)->powered_railtypes, tiletype);
}
/**
@@ -771,13 +785,28 @@
static inline bool TracksOverlap(TrackBits bits)
{
/* With no, or only one track, there is no overlap */
- if (bits == 0 || KILL_FIRST_BIT(bits) == 0) return false;
+ if (bits == TRACK_BIT_NONE || KillFirstBit(bits) == TRACK_BIT_NONE) return false;
/* We know that there are at least two tracks present. When there are more
* than 2 tracks, they will surely overlap. When there are two, they will
* always overlap unless they are lower & upper or right & left. */
return bits != TRACK_BIT_HORZ && bits != TRACK_BIT_VERT;
}
+
+extern int _railtype_cost_multiplier[RAILTYPE_END];
+extern const int _default_railtype_cost_multiplier[RAILTYPE_END];
+
+/**
+ * Returns the cost of building the specified railtype.
+ * @param railtype The railtype being built.
+ * @return The cost multiplier.
+ */
+static inline Money RailBuildCost(RailType railtype)
+{
+ assert(railtype < RAILTYPE_END);
+ return (_price.build_rail * _railtype_cost_multiplier[railtype]) >> 3;
+}
+
void *UpdateTrainPowerProc(Vehicle *v, void *data);
void DrawTrainDepotSprite(int x, int y, int image, RailType railtype);
void DrawDefaultWaypointSprite(int x, int y, RailType railtype);
@@ -792,6 +821,8 @@
Foundation GetRailFoundation(Slope tileh, TrackBits bits);
+void FloodHalftile(TileIndex t);
+
int32 SettingsDisableElrail(int32 p1); ///< _patches.disable_elrail callback
#endif /* RAIL_H */