(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters

This commit is contained in:
tron
2005-02-07 10:41:45 +00:00
parent ad837c2069
commit f8d97a5f61
10 changed files with 60 additions and 51 deletions

44
tile.c
View File

@@ -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;
}