Files
@ r7339:e6880772baf8
Branch filter:
Location: cpp/openttd-patchpack/source/src/tile.h
r7339:e6880772baf8
2.7 KiB
text/x-c
(svn r10702) -Fix: "Can't build ..." instead of "Can't remove ..." message shown for road stops for trucks/cargo trams.
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 | /* $Id$ */
/** @file tile.h */
#ifndef TILE_H
#define TILE_H
#include "macros.h"
#include "openttd.h"
#include "map.h"
#include "slope.h"
/** Maximum allowed tile height */
#define MAX_TILE_HEIGHT 15
/** Maximum allowed snowline height */
#define MAX_SNOWLINE_HEIGHT (MAX_TILE_HEIGHT - 2)
enum TileType {
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,
};
enum TropicZone {
TROPICZONE_INVALID = 0,
TROPICZONE_DESERT = 1,
TROPICZONE_RAINFOREST = 2,
};
Slope GetTileSlope(TileIndex tile, uint *h);
uint GetTileZ(TileIndex tile);
uint GetTileMaxZ(TileIndex tile);
static inline uint TileHeight(TileIndex tile)
{
assert(tile < MapSize());
return GB(_m[tile].type_height, 0, 4);
}
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) * TILE_HEIGHT;
}
static inline TileType GetTileType(TileIndex tile)
{
assert(tile < MapSize());
return (TileType)GB(_m[tile].type_height, 4, 4);
}
static inline void SetTileType(TileIndex tile, TileType type)
{
assert(tile < MapSize());
/* VOID tiles (and no others) are exactly allowed at the lower left and right
* edges of the map */
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 Owner GetTileOwner(TileIndex tile)
{
assert(tile < MapSize());
assert(!IsTileType(tile, MP_HOUSE));
assert(!IsTileType(tile, MP_VOID));
assert(!IsTileType(tile, MP_INDUSTRY));
return (Owner)_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;
}
/**
* Set the tropic zone
* @param tile the tile to set the zone of
* @param type the new type
* @pre assert(tile < MapSize());
*/
static inline void SetTropicZone(TileIndex tile, TropicZone type)
{
assert(tile < MapSize());
SB(_m[tile].m6, 0, 2, type);
}
/**
* Get the tropic zone
* @param tile the tile to get the zone of
* @pre assert(tile < MapSize());
* @return the zone type
*/
static inline TropicZone GetTropicZone(TileIndex tile)
{
assert(tile < MapSize());
return (TropicZone)GB(_m[tile].m6, 0, 2);
}
#endif /* TILE_H */
|