diff options
author | smatz <smatz@openttd.org> | 2010-05-08 14:36:56 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2010-05-08 14:36:56 +0000 |
commit | 173b56b895eb929991d9c83233a2ad95e6b3f82e (patch) | |
tree | 827d67333254e8098a0326edf0f97b1921a1c570 /src | |
parent | 8d1d4267afccf29d298485fca1251bd1c341158c (diff) | |
download | openttd-173b56b895eb929991d9c83233a2ad95e6b3f82e.tar.xz |
(svn r19768) -Fix: half-desert tiles would never revert back to clear tiles
Diffstat (limited to 'src')
-rw-r--r-- | src/clear_cmd.cpp | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 6497ed1f1..2f91f2fd0 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -189,19 +189,40 @@ static void TileLoopClearAlps(TileIndex tile) MarkTileDirtyByTile(tile); } +/** + * Tests if at least one surrounding tile is desert + * @param tile tile to check + * @return does this tile have at least one desert tile around? + */ +static inline bool NeighbourIsDesert(TileIndex tile) +{ + return GetTropicZone(tile + TileDiffXY( 1, 0)) == TROPICZONE_DESERT || + GetTropicZone(tile + TileDiffXY( -1, 0)) == TROPICZONE_DESERT || + GetTropicZone(tile + TileDiffXY( 0, 1)) == TROPICZONE_DESERT || + GetTropicZone(tile + TileDiffXY( 0, -1)) == TROPICZONE_DESERT; +} + static void TileLoopClearDesert(TileIndex tile) { - if (IsClearGround(tile, CLEAR_DESERT)) return; + /* Current desert level - 0 if it is not desert */ + uint current = 0; + if (IsClearGround(tile, CLEAR_DESERT)) current = GetClearDensity(tile); + /* Expected desert level - 0 if it shouldn't be desert */ + uint expected = 0; if (GetTropicZone(tile) == TROPICZONE_DESERT) { - SetClearGroundDensity(tile, CLEAR_DESERT, 3); + expected = 3; + } else if (NeighbourIsDesert(tile)) { + expected = 1; + } + + if (current == expected) return; + + if (expected == 0) { + SetClearGroundDensity(tile, CLEAR_GRASS, 3); } else { - if (GetTropicZone(tile + TileDiffXY( 1, 0)) != TROPICZONE_DESERT && - GetTropicZone(tile + TileDiffXY(-1, 0)) != TROPICZONE_DESERT && - GetTropicZone(tile + TileDiffXY( 0, 1)) != TROPICZONE_DESERT && - GetTropicZone(tile + TileDiffXY( 0, -1)) != TROPICZONE_DESERT) - return; - SetClearGroundDensity(tile, CLEAR_DESERT, 1); + /* Transition from clear to desert is not smooth (after clearing desert tile) */ + SetClearGroundDensity(tile, CLEAR_DESERT, expected); } MarkTileDirtyByTile(tile); |