changeset 17964:17f8340f061c draft

(svn r22773) -Add: Some grass around rivers in desert areas.
author michi_cc <michi_cc@openttd.org>
date Sat, 20 Aug 2011 20:07:02 +0000
parents 4edb402ebe0e
children 91c35a630a92
files src/landscape.cpp src/water.h src/water_cmd.cpp
diffstat 3 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/landscape.cpp
+++ b/src/landscape.cpp
@@ -1038,7 +1038,12 @@
 static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
 {
 	for (PathNode *path = &current->path; path != NULL; path = path->parent) {
-		if (!IsWaterTile(path->node.tile)) MakeRiver(path->node.tile, Random());
+		TileIndex tile = path->node.tile;
+		if (!IsWaterTile(tile)) {
+			MakeRiver(tile, Random());
+			/* Remove desert directly around the river tile. */
+			CircularTileSearch(&tile, 5, RiverModifyDesertZone, NULL);
+		}
 	}
 }
 
@@ -1168,7 +1173,7 @@
 	if (amount == 0) return;
 
 	uint wells = ScaleByMapSize(4 << _settings_game.game_creation.amount_of_rivers);
-	SetGeneratingWorldProgress(GWP_RIVER, wells);
+	SetGeneratingWorldProgress(GWP_RIVER, wells + 256 / 64); // Include the tile loop calls below.
 	bool *marks = CallocT<bool>(MapSize());
 
 	for (; wells != 0; wells--) {
@@ -1181,6 +1186,12 @@
 	}
 
 	free(marks);
+
+	/* Run tile loop to update the ground density. */
+	for (uint i = 0; i != 256; i++) {
+		if (i % 64 == 0) IncreaseGeneratingWorldProgress(GWP_RIVER);
+		RunTileLoop();
+	}
 }
 
 void GenerateLandscape(byte mode)
--- a/src/water.h
+++ b/src/water.h
@@ -41,4 +41,6 @@
 
 void MakeWaterKeepingClass(TileIndex tile, Owner o);
 
+bool RiverModifyDesertZone(TileIndex tile, void *data);
+
 #endif /* WATER_H */
--- a/src/water_cmd.cpp
+++ b/src/water_cmd.cpp
@@ -308,6 +308,13 @@
 	return DoBuildLock(tile, dir, flags);
 }
 
+/** Callback to create non-desert around a river tile. */
+bool RiverModifyDesertZone(TileIndex tile, void *)
+{
+	if (GetTropicZone(tile) == TROPICZONE_DESERT) SetTropicZone(tile, TROPICZONE_NORMAL);
+	return false;
+}
+
 /**
  * Build a piece of canal.
  * @param tile end tile of stretch-dragging
@@ -350,6 +357,10 @@
 			switch (wc) {
 				case WATER_CLASS_RIVER:
 					MakeRiver(tile, Random());
+					if (_game_mode == GM_EDITOR) {
+						TileIndex tile2 = tile;
+						CircularTileSearch(&tile2, 5, RiverModifyDesertZone, NULL);
+					}
 					break;
 
 				case WATER_CLASS_SEA: