diff options
author | tron <tron@openttd.org> | 2005-02-07 10:41:45 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2005-02-07 10:41:45 +0000 |
commit | f8d97a5f616c5e303b2822316fcef409baee6195 (patch) | |
tree | 6fb9696d4610ea19244f194d0c47fa748af72fd4 /tile.c | |
parent | ad837c2069d37ad36dfba07f62bd35a6694dd266 (diff) | |
download | openttd-f8d97a5f616c5e303b2822316fcef409baee6195.tar.xz |
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
Diffstat (limited to 'tile.c')
-rw-r--r-- | tile.c | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -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; +} |