summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2010-05-08 14:36:56 +0000
committersmatz <smatz@openttd.org>2010-05-08 14:36:56 +0000
commit173b56b895eb929991d9c83233a2ad95e6b3f82e (patch)
tree827d67333254e8098a0326edf0f97b1921a1c570
parent8d1d4267afccf29d298485fca1251bd1c341158c (diff)
downloadopenttd-173b56b895eb929991d9c83233a2ad95e6b3f82e.tar.xz
(svn r19768) -Fix: half-desert tiles would never revert back to clear tiles
-rw-r--r--src/clear_cmd.cpp37
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);