Files
@ r3340:baed05973439
Branch filter:
Location: cpp/openttd-patchpack/source/bridge_map.h - annotation
r3340:baed05973439
4.2 KiB
text/x-c
(svn r4124) - CodeChange: remove windows-specific code from initializing the random generator. There was no need for it.
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 | r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3196:ee64b4658e65 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3234:e8dbbce03288 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3214:30243f5df9c0 r3214:30243f5df9c0 r3214:30243f5df9c0 r3214:30243f5df9c0 r3214:30243f5df9c0 r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3231:d8ffea4d8937 r3214:30243f5df9c0 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3196:ee64b4658e65 r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3226:7d53f26f9f56 r3226:7d53f26f9f56 r3226:7d53f26f9f56 r3226:7d53f26f9f56 r3226:7d53f26f9f56 r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3216:9135689a35bb r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3234:e8dbbce03288 r3216:9135689a35bb r3214:30243f5df9c0 r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3225:c5b1dafc46ed r3214:30243f5df9c0 r3214:30243f5df9c0 r3214:30243f5df9c0 r3214:30243f5df9c0 r3214:30243f5df9c0 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3189:4e602cf0aaa8 r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3209:bd80c5e2090c r3189:4e602cf0aaa8 | /* $Id$ */
#ifndef BRIDGE_MAP_H
#define BRIDGE_MAP_H
#include "direction.h"
#include "macros.h"
#include "map.h"
#include "rail.h"
#include "road_map.h"
#include "tile.h"
static inline bool IsBridge(TileIndex t)
{
return HASBIT(_m[t].m5, 7);
}
static inline bool IsBridgeTile(TileIndex t)
{
return IsTileType(t, MP_TUNNELBRIDGE) && IsBridge(t);
}
static inline bool IsBridgeRamp(TileIndex t)
{
return !HASBIT(_m[t].m5, 6);
}
static inline bool IsBridgeMiddle(TileIndex t)
{
return HASBIT(_m[t].m5, 6);
}
/**
* Determines which piece of a bridge is contained in the current tile
* @param tile The tile to analyze
* @return the piece
*/
static inline uint GetBridgePiece(TileIndex tile)
{
return GB(_m[tile].m2, 0, 4);
}
/**
* Determines the type of bridge on a tile
* @param tile The tile to analyze
* @return The bridge type
*/
static inline uint GetBridgeType(TileIndex tile)
{
return GB(_m[tile].m2, 4, 4);
}
/**
* Get the direction pointing onto the bridge
*/
static inline DiagDirection GetBridgeRampDirection(TileIndex t)
{
/* Heavy wizardry to convert the X/Y (bit 0) + N/S (bit 5) encoding of
* bridges to a DiagDirection
*/
return (DiagDirection)((6 - (_m[t].m5 >> 4 & 2) - (_m[t].m5 & 1)) % 4);
}
static inline Axis GetBridgeAxis(TileIndex t)
{
return (Axis)GB(_m[t].m5, 0, 1);
}
static inline TransportType GetBridgeTransportType(TileIndex t)
{
return (TransportType)GB(_m[t].m5, 1, 2);
}
static inline bool IsClearUnderBridge(TileIndex t)
{
return GB(_m[t].m5, 3, 3) == 0;
}
static inline bool IsWaterUnderBridge(TileIndex t)
{
return GB(_m[t].m5, 3, 3) == 1;
}
static inline bool IsTransportUnderBridge(TileIndex t)
{
return HASBIT(_m[t].m5, 5);
}
static inline TransportType GetTransportTypeUnderBridge(TileIndex t)
{
return (TransportType)GB(_m[t].m5, 3, 2);
}
static inline RoadBits GetRoadBitsUnderBridge(TileIndex t)
{
return GetBridgeAxis(t) == AXIS_X ? ROAD_Y : ROAD_X;
}
static inline TrackBits GetRailBitsUnderBridge(TileIndex t)
{
return GetBridgeAxis(t) == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X;
}
/**
* Finds the end of a bridge in the specified direction starting at a middle tile
*/
TileIndex GetBridgeEnd(TileIndex, DiagDirection);
/**
* Finds the southern end of a bridge starting at a middle tile
*/
TileIndex GetSouthernBridgeEnd(TileIndex t);
/**
* Starting at one bridge end finds the other bridge end
*/
TileIndex GetOtherBridgeEnd(TileIndex);
static inline void SetClearUnderBridge(TileIndex t)
{
SetTileOwner(t, OWNER_NONE);
SB(_m[t].m5, 3, 3, 0 << 2 | 0);
}
static inline void SetWaterUnderBridge(TileIndex t)
{
SetTileOwner(t, OWNER_WATER);
SB(_m[t].m5, 3, 3, 0 << 2 | 1);
}
static inline void SetRailUnderBridge(TileIndex t, Owner o, RailType r)
{
SetTileOwner(t, o);
SB(_m[t].m5, 3, 3, 1 << 2 | TRANSPORT_RAIL);
SB(_m[t].m3, 0, 4, r);
}
static inline void SetRoadUnderBridge(TileIndex t, Owner o)
{
SetTileOwner(t, o);
SB(_m[t].m5, 3, 3, 1 << 2 | TRANSPORT_ROAD);
}
static inline void MakeBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, TransportType tt)
{
uint northsouth = (d == DIAGDIR_NE || d == DIAGDIR_NW);
SetTileType(t, MP_TUNNELBRIDGE);
SetTileOwner(t, o);
_m[t].m2 = bridgetype << 4;
_m[t].m4 = 0;
_m[t].m5 = 1 << 7 | 0 << 6 | northsouth << 5 | tt << 1 | DiagDirToAxis(d);
}
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d)
{
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD);
_m[t].m3 = 0;
}
static inline void MakeRailBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, RailType r)
{
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_RAIL);
_m[t].m3 = r;
}
static inline void MakeBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a, TransportType tt)
{
SetTileType(t, MP_TUNNELBRIDGE);
SetTileOwner(t, OWNER_NONE);
_m[t].m2 = bridgetype << 4 | piece;
_m[t].m3 = 0;
_m[t].m4 = 0;
_m[t].m5 = 1 << 7 | 1 << 6 | 0 << 5 | 0 << 3 | tt << 1 | a;
}
static inline void MakeRoadBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a)
{
MakeBridgeMiddle(t, bridgetype, piece, a, TRANSPORT_ROAD);
}
static inline void MakeRailBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a, RailType r)
{
MakeBridgeMiddle(t, bridgetype, piece, a, TRANSPORT_RAIL);
SB(_m[t].m3, 4, 4, r);
}
#endif
|