Files
@ r3016:b28a60dfd364
Branch filter:
Location: cpp/openttd-patchpack/source/tile.h - annotation
r3016:b28a60dfd364
3.0 KiB
text/x-c
(svn r3596) -Codechange: [OSX] changed to use Apple's macros instead of OTTD macros for endian conversion
This increases the execution speed a lot since GCC can't detect the OTTD macro as an endian conversion
while Apple's code uses the instruction to convert endian instead of a series of instructions to produce the same result
Since we don't have that many endian conversions in the game, overall performance should not increase noteworthy
This increases the execution speed a lot since GCC can't detect the OTTD macro as an endian conversion
while Apple's code uses the instruction to convert endian instead of a series of instructions to produce the same result
Since we don't have that many endian conversions in the game, overall performance should not increase noteworthy
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 | r2186:5ee653b1b5e1 r2186:5ee653b1b5e1 r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r1394:275bd5541bae r1209:5955f8748394 r1209:5955f8748394 r1944:ed1b90ae1557 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r2125:87ebf6378cb6 r1214:2ed99b1b4b97 r1214:2ed99b1b4b97 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1749:454305d15787 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1942:ea8e39498c72 r1749:454305d15787 r1211:0ff891861c37 r1211:0ff891861c37 r1211:0ff891861c37 r1335:da4955366538 r1335:da4955366538 r1335:da4955366538 r1394:275bd5541bae r1394:275bd5541bae r1394:275bd5541bae r1394:275bd5541bae r1394:275bd5541bae r1394:275bd5541bae r1394:275bd5541bae r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r2049:7e26d55f0f4c r1209:5955f8748394 r1209:5955f8748394 r2085:757cdc338c24 r2085:757cdc338c24 r2085:757cdc338c24 r2085:757cdc338c24 r2085:757cdc338c24 r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r2049:7e26d55f0f4c r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r1209:5955f8748394 r1214:2ed99b1b4b97 r1209:5955f8748394 r1209:5955f8748394 r2049:7e26d55f0f4c r1209:5955f8748394 r1209:5955f8748394 r1214:2ed99b1b4b97 r1209:5955f8748394 r1209:5955f8748394 r2900:9c35fe93f95b r2900:9c35fe93f95b r2900:9c35fe93f95b r2900:9c35fe93f95b r2900:9c35fe93f95b r2049:7e26d55f0f4c r1209:5955f8748394 r1209:5955f8748394 r1214:2ed99b1b4b97 r1209:5955f8748394 r1214:2ed99b1b4b97 r1209:5955f8748394 r1209:5955f8748394 r2125:87ebf6378cb6 r2125:87ebf6378cb6 r2493:a844eec5cb6b r2125:87ebf6378cb6 r2125:87ebf6378cb6 r1333:355c6f6f2cbf r1330:62eaa061ec97 r1333:355c6f6f2cbf r1898:6a2625c2cc60 r1898:6a2625c2cc60 r1898:6a2625c2cc60 r1898:6a2625c2cc60 r2360:8cc52b4a45df r1330:62eaa061ec97 r1330:62eaa061ec97 r1902:cfc758cf1057 r1902:cfc758cf1057 r1902:cfc758cf1057 r1902:cfc758cf1057 r1902:cfc758cf1057 r1902:cfc758cf1057 r1902:cfc758cf1057 r2360:8cc52b4a45df r1902:cfc758cf1057 r1902:cfc758cf1057 r1330:62eaa061ec97 r1330:62eaa061ec97 r1330:62eaa061ec97 r1330:62eaa061ec97 r1330:62eaa061ec97 r2436:963efe8b84cc | /* $Id$ */
#ifndef TILE_H
#define TILE_H
#include "macros.h"
#include "map.h"
typedef enum TileTypes {
MP_CLEAR,
MP_RAILWAY,
MP_STREET,
MP_HOUSE,
MP_TREES,
MP_STATION,
MP_WATER,
MP_VOID, // invisible tiles at the SW and SE border
MP_INDUSTRY,
MP_TUNNELBRIDGE,
MP_UNMOVABLE,
} TileType;
/* Direction as commonly used in v->direction, 8 way. */
typedef enum Directions {
DIR_N = 0,
DIR_NE = 1, /* Northeast, upper right on your monitor */
DIR_E = 2,
DIR_SE = 3,
DIR_S = 4,
DIR_SW = 5,
DIR_W = 6,
DIR_NW = 7,
DIR_END,
INVALID_DIR = 0xFF,
} Direction;
/* Direction commonly used as the direction of entering and leaving tiles, 4-way */
typedef enum DiagonalDirections {
DIAGDIR_NE = 0, /* Northeast, upper right on your monitor */
DIAGDIR_SE = 1,
DIAGDIR_SW = 2,
DIAGDIR_NW = 3,
DIAGDIR_END,
INVALID_DIAGDIR = 0xFF,
} DiagDirection;
void SetMapExtraBits(TileIndex tile, byte flags);
uint GetMapExtraBits(TileIndex tile);
uint GetTileSlope(TileIndex tile, uint *h);
uint GetTileZ(TileIndex tile);
static inline bool CorrectZ(uint tileh)
{
/* tile height must be corrected if the north corner is not raised, but
* any other corner is. These are the cases 1 till 7 */
return IS_INT_INSIDE(tileh, 1, 8);
}
static inline uint TileHeight(TileIndex tile)
{
assert(tile < MapSize());
return GB(_m[tile].type_height, 0, 4);
}
static inline bool IsSteepTileh(uint tileh)
{
return (tileh & 0x10);
}
static inline void SetTileHeight(TileIndex tile, uint height)
{
assert(tile < MapSize());
assert(height < 16);
SB(_m[tile].type_height, 0, 4, height);
}
static inline uint TilePixelHeight(TileIndex tile)
{
return TileHeight(tile) * 8;
}
static inline TileType GetTileType(TileIndex tile)
{
assert(tile < MapSize());
return GB(_m[tile].type_height, 4, 4);
}
static inline void SetTileType(TileIndex tile, TileType type)
{
assert(tile < MapSize());
/* Allow only MP_VOID to be set to border tiles. This code is put here since
* it seems there is a bug that violates this somewhere. (Formely know as
* the "old ship pf" bug, which presented a case in which this broke). It
* can be removed as soon as the bug is squashed. */
assert((TileX(tile) < MapMaxX() && TileY(tile) < MapMaxY()) || type == MP_VOID);
SB(_m[tile].type_height, 4, 4, type);
}
static inline bool IsTileType(TileIndex tile, TileType type)
{
return GetTileType(tile) == type;
}
static inline bool IsTunnelTile(TileIndex tile)
{
return IsTileType(tile, MP_TUNNELBRIDGE) && GB(_m[tile].m5, 4, 4) == 0;
}
static inline Owner GetTileOwner(TileIndex tile)
{
assert(tile < MapSize());
assert(!IsTileType(tile, MP_HOUSE));
assert(!IsTileType(tile, MP_VOID));
assert(!IsTileType(tile, MP_INDUSTRY));
return _m[tile].m1;
}
static inline void SetTileOwner(TileIndex tile, Owner owner)
{
assert(tile < MapSize());
assert(!IsTileType(tile, MP_HOUSE));
assert(!IsTileType(tile, MP_VOID));
assert(!IsTileType(tile, MP_INDUSTRY));
_m[tile].m1 = owner;
}
static inline bool IsTileOwner(TileIndex tile, Owner owner)
{
return GetTileOwner(tile) == owner;
}
#endif /* TILE_H */
|