Files @ r4004:948398516be1
Branch filter:

Location: cpp/openttd-patchpack/source/tile.h - annotation

miham
(svn r5214) [languages] Re-done afrikaans change, this time proper
r2186:5ee653b1b5e1
r2186:5ee653b1b5e1
r1209:5955f8748394
r1209:5955f8748394
r1209:5955f8748394
r1394:275bd5541bae
r1209:5955f8748394
r3636:a8e0c73aca96
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
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r1211:0ff891861c37
r3636:a8e0c73aca96
r3636:a8e0c73aca96
r1335:da4955366538
r3773:96ded2ebf46a
r1335:da4955366538
r1209:5955f8748394
r1209:5955f8748394
r1209:5955f8748394
r2049:7e26d55f0f4c
r1209:5955f8748394
r1209:5955f8748394
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
r3900:1c2675abec23
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
r1333:355c6f6f2cbf
r1330:62eaa061ec97
r1333:355c6f6f2cbf
r1898:6a2625c2cc60
r1898:6a2625c2cc60
r1898:6a2625c2cc60
r1898:6a2625c2cc60
r3900:1c2675abec23
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
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r2436:963efe8b84cc
/* $Id$ */

#ifndef TILE_H
#define TILE_H

#include "macros.h"
#include "map.h"
#include "slope.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;

typedef enum TropicZones {
	TROPICZONE_INVALID = 0,
	TROPICZONE_DESERT = 1,
	TROPICZONE_RAINFOREST = 2,
} TropicZone;

Slope GetTileh(uint n, uint w, uint e, uint s, uint *h);
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) * 8;
}

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());
	/* 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 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].extra, 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].extra, 0, 2);
}
#endif /* TILE_H */