1
0
Fork 0

(svn r19792) -Change: use the typed FOR_EACH_SET_BIT for Tracks (adf88)

release/1.1
rubidium 2010-05-11 21:02:26 +00:00
parent fe71d4fc99
commit 99ecfe4061
5 changed files with 36 additions and 29 deletions

View File

@ -429,8 +429,8 @@ static void DrawCatenaryRailway(const TileInfo *ti)
SpriteID wire_base = GetWireBase(ti->tile); SpriteID wire_base = GetWireBase(ti->tile);
/* Drawing of pylons is finished, now draw the wires */ /* Drawing of pylons is finished, now draw the wires */
for (Track t = TRACK_BEGIN; t < TRACK_END; t++) { Track t;
if (HasBit(wireconfig[TS_HOME], t)) { FOR_EACH_SET_TRACK(t, wireconfig[TS_HOME]) {
byte PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) + byte PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) +
(HasBit(PCPstatus, PCPpositions[t][1]) << 1); (HasBit(PCPstatus, PCPpositions[t][1]) << 1);
@ -450,7 +450,6 @@ static void DrawCatenaryRailway(const TileInfo *ti)
sss->x_size, sss->y_size, sss->z_size, GetSlopeZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + sss->z_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)); IsTransparencySet(TO_CATENARY));
} }
}
} }
void DrawCatenaryOnBridge(const TileInfo *ti) void DrawCatenaryOnBridge(const TileInfo *ti)

View File

@ -160,9 +160,9 @@ struct CFollowTrackT
/* Mask already reserved trackdirs. */ /* Mask already reserved trackdirs. */
m_new_td_bits &= ~TrackBitsToTrackdirBits(reserved); m_new_td_bits &= ~TrackBitsToTrackdirBits(reserved);
/* Mask out all trackdirs that conflict with the reservation. */ /* Mask out all trackdirs that conflict with the reservation. */
int i; Track t;
FOR_EACH_SET_BIT(i, TrackdirBitsToTrackBits(m_new_td_bits)) { FOR_EACH_SET_TRACK(t, TrackdirBitsToTrackBits(m_new_td_bits)) {
if (TracksOverlap(reserved | TrackToTrackBits((Track)i))) m_new_td_bits &= ~TrackToTrackdirBits((Track)i); if (TracksOverlap(reserved | TrackToTrackBits(t))) m_new_td_bits &= ~TrackToTrackdirBits(t);
} }
if (m_new_td_bits == TRACKDIR_BIT_NONE) { if (m_new_td_bits == TRACKDIR_BIT_NONE) {
m_err = EC_RESERVED; m_err = EC_RESERVED;

View File

@ -921,9 +921,9 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
TrackBits reserved = GetReservedTrackbits(dst_tile); TrackBits reserved = GetReservedTrackbits(dst_tile);
trackdirbits &= ~TrackBitsToTrackdirBits(reserved); trackdirbits &= ~TrackBitsToTrackdirBits(reserved);
int i; Track t;
FOR_EACH_SET_BIT(i, TrackdirBitsToTrackBits(trackdirbits)) { FOR_EACH_SET_TRACK(t, TrackdirBitsToTrackBits(trackdirbits)) {
if (TracksOverlap(reserved | TrackToTrackBits((Track)i))) trackdirbits &= ~TrackToTrackdirBits((Track)i); if (TracksOverlap(reserved | TrackToTrackBits(t))) trackdirbits &= ~TrackToTrackdirBits(t);
} }
} }

View File

@ -16,6 +16,17 @@
#include "track_type.h" #include "track_type.h"
#include "slope_func.h" #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 * Convert an Axis to the corresponding Track
* AXIS_X -> TRACK_X * AXIS_X -> TRACK_X

View File

@ -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 */ /* 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); assert(TRACK_BEGIN == TRACK_X && TRACK_Y == TRACK_BEGIN + 1);
for (Track t = TRACK_BEGIN; t < TRACK_END; t++) { Track t;
if (HasBit(remaining_trackbits, t)) { FOR_EACH_SET_TRACK(t, remaining_trackbits) TryReserveRailTrack(tile, t);
TryReserveRailTrack(tile, t);
}
}
} }
/* check if the wagon was on a road/rail-crossing */ /* check if the wagon was on a road/rail-crossing */