summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/elrail.cpp41
-rw-r--r--src/pathfinder/follow_track.hpp6
-rw-r--r--src/pathfinder/npf/npf.cpp6
-rw-r--r--src/track_func.h11
-rw-r--r--src/train_cmd.cpp7
5 files changed, 39 insertions, 32 deletions
diff --git a/src/elrail.cpp b/src/elrail.cpp
index 41b0d5a74..1474ff932 100644
--- a/src/elrail.cpp
+++ b/src/elrail.cpp
@@ -429,27 +429,26 @@ static void DrawCatenaryRailway(const TileInfo *ti)
SpriteID wire_base = GetWireBase(ti->tile);
/* Drawing of pylons is finished, now draw the wires */
- for (Track t = TRACK_BEGIN; t < TRACK_END; t++) {
- if (HasBit(wireconfig[TS_HOME], t)) {
- byte PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) +
- (HasBit(PCPstatus, PCPpositions[t][1]) << 1);
-
- const SortableSpriteStruct *sss;
- int tileh_selector = !(tileh[TS_HOME] % 3) * tileh[TS_HOME] / 3; // tileh for the slopes, 0 otherwise
-
- assert(PCPconfig != 0); // We have a pylon on neither end of the wire, that doesn't work (since we have no sprites for that)
- assert(!IsSteepSlope(tileh[TS_HOME]));
- sss = &CatenarySpriteData[Wires[tileh_selector][t][PCPconfig]];
-
- /*
- * The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
- * Therefore it is safe to use GetSlopeZ() for the elevation.
- * Also note, that the result of GetSlopeZ() is very special for bridge-ramps.
- */
- AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
- sss->x_size, sss->y_size, sss->z_size, GetSlopeZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + sss->z_offset,
- IsTransparencySet(TO_CATENARY));
- }
+ Track t;
+ FOR_EACH_SET_TRACK(t, wireconfig[TS_HOME]) {
+ byte PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) +
+ (HasBit(PCPstatus, PCPpositions[t][1]) << 1);
+
+ const SortableSpriteStruct *sss;
+ int tileh_selector = !(tileh[TS_HOME] % 3) * tileh[TS_HOME] / 3; // tileh for the slopes, 0 otherwise
+
+ assert(PCPconfig != 0); // We have a pylon on neither end of the wire, that doesn't work (since we have no sprites for that)
+ assert(!IsSteepSlope(tileh[TS_HOME]));
+ sss = &CatenarySpriteData[Wires[tileh_selector][t][PCPconfig]];
+
+ /*
+ * The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
+ * Therefore it is safe to use GetSlopeZ() for the elevation.
+ * Also note, that the result of GetSlopeZ() is very special for bridge-ramps.
+ */
+ AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
+ sss->x_size, sss->y_size, sss->z_size, GetSlopeZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + sss->z_offset,
+ IsTransparencySet(TO_CATENARY));
}
}
diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp
index 33e861c41..70660d653 100644
--- a/src/pathfinder/follow_track.hpp
+++ b/src/pathfinder/follow_track.hpp
@@ -160,9 +160,9 @@ struct CFollowTrackT
/* Mask already reserved trackdirs. */
m_new_td_bits &= ~TrackBitsToTrackdirBits(reserved);
/* Mask out all trackdirs that conflict with the reservation. */
- int i;
- FOR_EACH_SET_BIT(i, TrackdirBitsToTrackBits(m_new_td_bits)) {
- if (TracksOverlap(reserved | TrackToTrackBits((Track)i))) m_new_td_bits &= ~TrackToTrackdirBits((Track)i);
+ Track t;
+ FOR_EACH_SET_TRACK(t, TrackdirBitsToTrackBits(m_new_td_bits)) {
+ if (TracksOverlap(reserved | TrackToTrackBits(t))) m_new_td_bits &= ~TrackToTrackdirBits(t);
}
if (m_new_td_bits == TRACKDIR_BIT_NONE) {
m_err = EC_RESERVED;
diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp
index 05ff2f4b0..1e656e547 100644
--- a/src/pathfinder/npf/npf.cpp
+++ b/src/pathfinder/npf/npf.cpp
@@ -921,9 +921,9 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
TrackBits reserved = GetReservedTrackbits(dst_tile);
trackdirbits &= ~TrackBitsToTrackdirBits(reserved);
- int i;
- FOR_EACH_SET_BIT(i, TrackdirBitsToTrackBits(trackdirbits)) {
- if (TracksOverlap(reserved | TrackToTrackBits((Track)i))) trackdirbits &= ~TrackToTrackdirBits((Track)i);
+ Track t;
+ FOR_EACH_SET_TRACK(t, TrackdirBitsToTrackBits(trackdirbits)) {
+ if (TracksOverlap(reserved | TrackToTrackBits(t))) trackdirbits &= ~TrackToTrackdirBits(t);
}
}
diff --git a/src/track_func.h b/src/track_func.h
index 2c2ec8e52..853863f58 100644
--- a/src/track_func.h
+++ b/src/track_func.h
@@ -17,6 +17,17 @@
#include "slope_func.h"
/**
+ * Iterate through each set Track in a TrackBits value.
+ * For more informations see FOR_EACH_SET_BIT_EX.
+ *
+ * @param var Loop index variable that stores fallowing set track. Must be of type Track.
+ * @param track_bits The value to iterate through (any expression).
+ *
+ * @see FOR_EACH_SET_BIT_EX
+ */
+#define FOR_EACH_SET_TRACK(var, track_bits) FOR_EACH_SET_BIT_EX(Track, var, TrackBits, track_bits)
+
+/**
* Convert an Axis to the corresponding Track
* AXIS_X -> TRACK_X
* AXIS_Y -> TRACK_Y
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 99098c44f..fc8ec0253 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -3517,11 +3517,8 @@ static void DeleteLastWagon(Train *v)
/* It is important that these two are the first in the loop, as reservation cannot deal with every trackbit combination */
assert(TRACK_BEGIN == TRACK_X && TRACK_Y == TRACK_BEGIN + 1);
- for (Track t = TRACK_BEGIN; t < TRACK_END; t++) {
- if (HasBit(remaining_trackbits, t)) {
- TryReserveRailTrack(tile, t);
- }
- }
+ Track t;
+ FOR_EACH_SET_TRACK(t, remaining_trackbits) TryReserveRailTrack(tile, t);
}
/* check if the wagon was on a road/rail-crossing */