Files @ r5312:ffd375effb01
Branch filter:

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

Darkvater
(svn r7468) -Codechange: [win32] Add some comments to MB/WIDE_TO_WIDE/MB_[BUFFER] macros and
use them some more in win32 code. Also for the clipboard use the convert_from_fs
function instead of calling Win32 API directly. Make the static buffers in OTTD2FS
and FS2OTTD the same size (character-length wise)
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
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r3379:e72a0eb00c30
r3379:e72a0eb00c30
r1211:0ff891861c37
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
r4077:259c4c4aacad
r1209:5955f8748394
r1209:5955f8748394
r1214:2ed99b1b4b97
r1209:5955f8748394
r1209:5955f8748394
r3900:1c2675abec23
r1209:5955f8748394
r1209:5955f8748394
r1214:2ed99b1b4b97
r1209:5955f8748394
r1209:5955f8748394
r4010:b10993e1f5b3
r4077:259c4c4aacad
r4010:b10993e1f5b3
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 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].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 */