Files @ r3303:1bae0f5399a4
Branch filter:

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

bjarni
(svn r4060) -Codechange: [OSX] made the release target (in os/macosx/Makefile) easier to use since it gives the release disk image the right name automatically
it now uses REV instead of RELEASE, which means RELEASE is not needed to be set manaully anymore
it also automatically adds "-jaguar" when making a build aimed at OSX 10.2 (codenamed jaguar)
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
r3099:4c0775639e0c
r1211:0ff891861c37
r1211:0ff891861c37
r1211:0ff891861c37
r3279:91e2701faa6f
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
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;


void SetMapExtraBits(TileIndex tile, byte flags);
uint GetMapExtraBits(TileIndex tile);

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