summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tree_cmd.cpp47
1 files changed, 17 insertions, 30 deletions
diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp
index 243eb6230..5572a0f96 100644
--- a/src/tree_cmd.cpp
+++ b/src/tree_cmd.cpp
@@ -179,42 +179,29 @@ static void PlaceTree(TileIndex tile, uint32 r)
}
/**
- * Place some amount of trees around a given tile.
+ * Creates a number of tree groups.
+ * The number of trees in each group depends on how many trees are actually placed around the given tile.
*
- * This function adds some trees around a given tile. As this function use
- * the Random() call it depends on the random how many trees are actually placed
- * around the given tile.
- *
- * @param tile The center of the trees to add
+ * @param num_groups Number of tree groups to place.
*/
-static void DoPlaceMoreTrees(TileIndex tile)
+static void PlaceTreeGroups(uint num_groups)
{
- uint i;
+ do {
+ TileIndex center_tile = RandomTile();
- for (i = 0; i < DEFAULT_TREE_STEPS; i++) {
- uint32 r = Random();
- int x = GB(r, 0, 5) - 16;
- int y = GB(r, 8, 5) - 16;
- uint dist = abs(x) + abs(y);
- TileIndex cur_tile = TileAddWrap(tile, x, y);
+ for (uint i = 0; i < DEFAULT_TREE_STEPS; i++) {
+ uint32 r = Random();
+ int x = GB(r, 0, 5) - 16;
+ int y = GB(r, 8, 5) - 16;
+ uint dist = abs(x) + abs(y);
+ TileIndex cur_tile = TileAddWrap(center_tile, x, y);
- if (cur_tile != INVALID_TILE && dist <= 13 && CanPlantTreesOnTile(cur_tile, true)) {
- PlaceTree(cur_tile, r);
+ if (cur_tile != INVALID_TILE && dist <= 13 && CanPlantTreesOnTile(cur_tile, true)) {
+ PlaceTree(cur_tile, r);
+ }
}
- }
-}
-/**
- * Place more trees on the map.
- *
- * This function add more trees to the map.
- */
-static void PlaceMoreTrees()
-{
- uint i = ScaleByMapSize(GB(Random(), 0, 5) + 25);
- do {
- DoPlaceMoreTrees(RandomTile());
- } while (--i);
+ } while (--num_groups);
}
/**
@@ -313,7 +300,7 @@ void GenerateTrees()
if (_settings_game.game_creation.tree_placer == TP_NONE) return;
- if (_settings_game.game_creation.landscape != LT_TOYLAND) PlaceMoreTrees();
+ if (_settings_game.game_creation.landscape != LT_TOYLAND) PlaceTreeGroups(ScaleByMapSize(GB(Random(), 0, 5) + 25));
switch (_settings_game.game_creation.tree_placer) {
case TP_ORIGINAL: i = _settings_game.game_creation.landscape == LT_ARCTIC ? 15 : 6; break;