mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-02 09:40:35 +00:00
(svn r19792) -Change: use the typed FOR_EACH_SET_BIT for Tracks (adf88)
This commit is contained in:
parent
fe71d4fc99
commit
99ecfe4061
@ -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);
|
||||
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
|
||||
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]];
|
||||
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));
|
||||
}
|
||||
/*
|
||||
* 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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,17 @@
|
||||
#include "track_type.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
|
||||
* AXIS_X -> TRACK_X
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user