Files
@ r3478:523ece58cb16
Branch filter:
Location: cpp/openttd-patchpack/source/rail_map.h - annotation
r3478:523ece58cb16
4.9 KiB
text/x-c
(svn r4323) -Regression: Clear the slot assignments of all vehicles heading twoards a road stop if that road stop gets removed
This issue was fixed in r2210 and reintroduced in r4259 when the multistop handling was overhauled.
This issue was fixed in r2210 and reintroduced in r4259 when the multistop handling was overhauled.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3239:b5370b5d565d r3101:528c6b45c2fa r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3355:881cb92af87e r3355:881cb92af87e r3355:881cb92af87e r3355:881cb92af87e r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3355:881cb92af87e r3355:881cb92af87e r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3242:4dca345fd1dd r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3239:b5370b5d565d r3258:bbc7e29dfcdc r3258:bbc7e29dfcdc r3258:bbc7e29dfcdc r3258:bbc7e29dfcdc r3258:bbc7e29dfcdc r3258:bbc7e29dfcdc r3258:bbc7e29dfcdc r3258:bbc7e29dfcdc r3239:b5370b5d565d r3239:b5370b5d565d r3101:528c6b45c2fa r3267:f0ddcd9d96b3 r3267:f0ddcd9d96b3 r3267:f0ddcd9d96b3 r3267:f0ddcd9d96b3 r3267:f0ddcd9d96b3 r3273:33b1aa7ed962 r3273:33b1aa7ed962 r3273:33b1aa7ed962 r3273:33b1aa7ed962 r3273:33b1aa7ed962 r3101:528c6b45c2fa r3185:dbb100efa51f r3185:dbb100efa51f r3185:dbb100efa51f r3185:dbb100efa51f r3185:dbb100efa51f r3453:48136061f520 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3185:dbb100efa51f r3101:528c6b45c2fa r3101:528c6b45c2fa r3239:b5370b5d565d r3101:528c6b45c2fa r3101:528c6b45c2fa r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3448:df536020fe48 r3101:528c6b45c2fa r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3238:2f4f378eb9c0 r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3237:505d7d17fa9c r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa r3101:528c6b45c2fa | /* $Id$ */
#ifndef RAIL_MAP_H
#define RAIL_MAP_H
#include "direction.h"
#include "tile.h"
typedef enum RailTileType {
RAIL_TYPE_NORMAL = 0x0,
RAIL_TYPE_SIGNALS = 0x40,
RAIL_TYPE_UNUSED = 0x80, /* XXX: Maybe this could become waypoints? */
RAIL_TYPE_DEPOT_WAYPOINT = 0xC0, /* Is really depots and waypoints... */
RAIL_TILE_TYPE_MASK = 0xC0
} RailTileType;
static inline RailTileType GetRailTileType(TileIndex t)
{
assert(IsTileType(t, MP_RAILWAY));
return _m[t].m5 & RAIL_TILE_TYPE_MASK;
}
/** These specify the subtype when the main rail type is
* RAIL_TYPE_DEPOT_WAYPOINT */
typedef enum RailTileSubtypes {
RAIL_SUBTYPE_DEPOT = 0x00,
RAIL_SUBTYPE_WAYPOINT = 0x04,
RAIL_SUBTYPE_MASK = 0x3C
} RailTileSubtype;
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);
}
// TODO remove this by moving to the same bits as GetRailType()
static inline RailType GetRailTypeCrossing(TileIndex t)
{
return (RailType)GB(_m[t].m4, 0, 4);
}
static inline RailType GetRailTypeOnBridge(TileIndex t)
{
return (RailType)GB(_m[t].m3, 4, 4);
}
static inline void SetRailType(TileIndex t, RailType r)
{
SB(_m[t].m3, 0, 4, r);
}
// TODO remove this by moving to the same bits as SetRailType()
static inline void SetRailTypeCrossing(TileIndex t, RailType r)
{
SB(_m[t].m4, 0, 4, r);
}
static inline void SetRailTypeOnBridge(TileIndex t, RailType r)
{
SB(_m[t].m3, 4, 4, r);
}
/** 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_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);
}
static inline void SetTrackBits(TileIndex t, TrackBits b)
{
SB(_m[t].m5, 0, 6, b);
}
static inline DiagDirection GetRailDepotDirection(TileIndex t)
{
return (DiagDirection)GB(_m[t].m5, 0, 2);
}
static inline Track GetRailWaypointTrack(TileIndex t)
{
return HASBIT(_m[t].m5, 0) ? TRACK_Y : TRACK_X;
}
static inline TrackBits GetRailWaypointBits(TileIndex t)
{
return _m[t].m5 & 1 ? TRACK_BIT_Y : TRACK_BIT_X;
}
static inline void SetCustomWaypointSprite(TileIndex t)
{
SETBIT(_m[t].m3, 4);
}
static inline void ClearCustomWaypointSprite(TileIndex t)
{
CLRBIT(_m[t].m3, 4);
}
typedef enum SignalType {
SIGTYPE_NORMAL = 0, // normal signal
SIGTYPE_ENTRY = 1, // presignal block entry
SIGTYPE_EXIT = 2, // presignal block exit
SIGTYPE_COMBO = 3 // presignal inter-block
} SignalType;
static inline SignalType GetSignalType(TileIndex t)
{
assert(GetRailTileType(t) == RAIL_TYPE_SIGNALS);
return (SignalType)GB(_m[t].m4, 0, 2);
}
static inline void SetSignalType(TileIndex t, SignalType s)
{
assert(GetRailTileType(t) == RAIL_TYPE_SIGNALS);
SB(_m[t].m4, 0, 2, s);
}
typedef enum SignalVariant {
SIG_ELECTRIC = 0,
SIG_SEMAPHORE = 1
} SignalVariant;
static inline SignalVariant GetSignalVariant(TileIndex t)
{
return (SignalVariant)GB(_m[t].m4, 2, 1);
}
static inline void SetSignalVariant(TileIndex t, SignalVariant v)
{
SB(_m[t].m4, 2, 1, v);
}
static inline void MakeRailNormal(TileIndex t, Owner o, TrackBits b, RailType r)
{
SetTileType(t, MP_RAILWAY);
SetTileOwner(t, o);
_m[t].m2 = 0;
_m[t].m3 = r;
_m[t].m4 = 0;
_m[t].m5 = RAIL_TYPE_NORMAL | b;
}
static inline void MakeRailDepot(TileIndex t, Owner o, DiagDirection d, RailType r)
{
SetTileType(t, MP_RAILWAY);
SetTileOwner(t, o);
_m[t].m2 = 0;
_m[t].m3 = r;
_m[t].m4 = 0;
_m[t].m5 = RAIL_TYPE_DEPOT_WAYPOINT | RAIL_SUBTYPE_DEPOT | d;
}
static inline void MakeRailWaypoint(TileIndex t, Owner o, Axis a, RailType r, uint index)
{
SetTileType(t, MP_RAILWAY);
SetTileOwner(t, o);
_m[t].m2 = index;
_m[t].m3 = r;
_m[t].m4 = 0;
_m[t].m5 = RAIL_TYPE_DEPOT_WAYPOINT | RAIL_SUBTYPE_WAYPOINT | a;
}
#endif
|