From f8d97a5f616c5e303b2822316fcef409baee6195 Mon Sep 17 00:00:00 2001 From: tron Date: Mon, 7 Feb 2005 10:41:45 +0000 Subject: (svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters --- tile.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'tile.c') diff --git a/tile.c b/tile.c index d52cf460d..f7f79ea84 100644 --- a/tile.c +++ b/tile.c @@ -13,3 +13,47 @@ uint GetMapExtraBits(TileIndex tile) assert(tile < MapSize()); return (_map_extra_bits[tile >> 2] >> (tile & 3) * 2) & 3; } + + +uint GetTileSlope(TileIndex tile, uint *h) +{ + uint a; + uint b; + uint c; + uint d; + uint min; + uint r; + + assert(tile < MapSize()); + + if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) { + if (h != NULL) *h = 0; + return 0; + } + + min = a = TileHeight(tile); + b = TileHeight(tile + TILE_XY(1,0)); + if (min >= b) min = b; + c = TileHeight(tile + TILE_XY(0,1)); + if (min >= c) min = c; + d = TileHeight(tile + TILE_XY(1,1)); + if (min >= d) min = d; + + r = 0; + if ((a -= min) != 0) { r += (--a << 4) + 8; } + if ((c -= min) != 0) { r += (--c << 4) + 4; } + if ((d -= min) != 0) { r += (--d << 4) + 2; } + if ((b -= min) != 0) { r += (--b << 4) + 1; } + + if (h != NULL) + *h = min * 8; + + return r; +} + +uint GetTileZ(TileIndex tile) +{ + uint h; + GetTileSlope(tile, &h); + return h; +} -- cgit v1.2.3-54-g00ecf