aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2016-05-20 03:37:31 -0400
committerkwolekr <kwolekr@minetest.net>2016-05-27 23:23:58 -0400
commit0df5c01a8ce927c33ae9b67f459365505b980c33 (patch)
tree17d4e39a61afc9a37257c969b23630e99b8c89f1
parentc5968049bbf73ceff08a2b1d35bb34192fa3f315 (diff)
downloadminetest-0df5c01a8ce927c33ae9b67f459365505b980c33.tar.gz
minetest-0df5c01a8ce927c33ae9b67f459365505b980c33.tar.bz2
minetest-0df5c01a8ce927c33ae9b67f459365505b980c33.zip
Mapgen: Remove calculateNoise from most mapgens
This commit moves noise calculation to the functions where the noise is actually required, increasing the separation of concerns and level of interdependency for each mapgen method. Valleys Mapgen is left unmodified.
-rw-r--r--src/mapgen.cpp2
-rw-r--r--src/mapgen_flat.cpp30
-rw-r--r--src/mapgen_flat.h1
-rw-r--r--src/mapgen_fractal.cpp22
-rw-r--r--src/mapgen_fractal.h1
-rw-r--r--src/mapgen_v5.cpp27
-rw-r--r--src/mapgen_v5.h1
-rw-r--r--src/mapgen_v7.cpp54
-rw-r--r--src/mapgen_v7.h3
-rw-r--r--src/mapgen_valleys.cpp1
10 files changed, 31 insertions, 111 deletions
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index 7e959533d..009a81f0c 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -386,6 +386,8 @@ MgStoneType MapgenBasic::generateBiomes()
u32 index = 0;
MgStoneType stone_type = MGSTONE_STONE;
+ noise_filler_depth->perlinMap2D(node_min.X, node_min.Z);
+
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
Biome *biome = NULL;
diff --git a/src/mapgen_flat.cpp b/src/mapgen_flat.cpp
index a541a54f3..ded859f65 100644
--- a/src/mapgen_flat.cpp
+++ b/src/mapgen_flat.cpp
@@ -227,9 +227,6 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
blockseed = getBlockSeed2(full_node_min, seed);
- // Make some noise
- calculateNoise();
-
// Generate base terrain, mountains, and ridges with initial heightmaps
s16 stone_surface_max_y = generateTerrain();
@@ -312,24 +309,6 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
}
-void MapgenFlat::calculateNoise()
-{
- //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
- s16 x = node_min.X;
- s16 z = node_min.Z;
-
- if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
- noise_terrain->perlinMap2D(x, z);
-
- // Cave noises are calculated in generateCaves()
- // only if solid terrain is present in mapchunk
-
- noise_filler_depth->perlinMap2D(x, z);
-
- //printf("calculateNoise: %dus\n", t.stop());
-}
-
-
s16 MapgenFlat::generateTerrain()
{
MapNode n_air(CONTENT_AIR);
@@ -340,13 +319,14 @@ s16 MapgenFlat::generateTerrain()
s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
u32 ni2d = 0;
+ bool use_noise = (spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS);
+ if (use_noise)
+ noise_terrain->perlinMap2D(node_min.X, node_min.Z);
+
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 x = node_min.X; x <= node_max.X; x++, ni2d++) {
s16 stone_level = ground_level;
- float n_terrain = 0.0f;
-
- if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
- n_terrain = noise_terrain->result[ni2d];
+ float n_terrain = use_noise ? noise_terrain->result[ni2d] : 0.0f;
if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
s16 depress = (lake_threshold - n_terrain) * lake_steepness;
diff --git a/src/mapgen_flat.h b/src/mapgen_flat.h
index 2b98c1f31..39da6e025 100644
--- a/src/mapgen_flat.h
+++ b/src/mapgen_flat.h
@@ -78,7 +78,6 @@ public:
virtual void makeChunk(BlockMakeData *data);
int getSpawnLevelAtPoint(v2s16 p);
- void calculateNoise();
s16 generateTerrain();
};
diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp
index dca10d253..f54de6275 100644
--- a/src/mapgen_fractal.cpp
+++ b/src/mapgen_fractal.cpp
@@ -243,9 +243,6 @@ void MapgenFractal::makeChunk(BlockMakeData *data)
blockseed = getBlockSeed2(full_node_min, seed);
- // Make some noise
- calculateNoise();
-
// Generate base terrain, mountains, and ridges with initial heightmaps
s16 stone_surface_max_y = generateTerrain();
@@ -328,23 +325,6 @@ void MapgenFractal::makeChunk(BlockMakeData *data)
}
-void MapgenFractal::calculateNoise()
-{
- //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
- s16 x = node_min.X;
- s16 z = node_min.Z;
-
- noise_seabed->perlinMap2D(x, z);
-
- // Cave noises are calculated in generateCaves()
- // only if solid terrain is present in mapchunk
-
- noise_filler_depth->perlinMap2D(x, z);
-
- //printf("calculateNoise: %dus\n", t.stop());
-}
-
-
bool MapgenFractal::getFractalAtPoint(s16 x, s16 y, s16 z)
{
float cx, cy, cz, cw, ox, oy, oz, ow;
@@ -474,6 +454,8 @@ s16 MapgenFractal::generateTerrain()
s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
u32 index2d = 0;
+ noise_seabed->perlinMap2D(node_min.X, node_min.Z);
+
for (s16 z = node_min.Z; z <= node_max.Z; z++) {
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
u32 vi = vm->m_area.index(node_min.X, y, z);
diff --git a/src/mapgen_fractal.h b/src/mapgen_fractal.h
index 176885d46..e30550405 100644
--- a/src/mapgen_fractal.h
+++ b/src/mapgen_fractal.h
@@ -88,7 +88,6 @@ public:
virtual void makeChunk(BlockMakeData *data);
int getSpawnLevelAtPoint(v2s16 p);
- void calculateNoise();
bool getFractalAtPoint(s16 x, s16 y, s16 z);
s16 generateTerrain();
};
diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp
index 0c063dc6f..85df34353 100644
--- a/src/mapgen_v5.cpp
+++ b/src/mapgen_v5.cpp
@@ -225,9 +225,6 @@ void MapgenV5::makeChunk(BlockMakeData *data)
// Create a block-specific seed
blockseed = getBlockSeed2(full_node_min, seed);
- // Make some noise
- calculateNoise();
-
// Generate base terrain
s16 stone_surface_max_y = generateBaseTerrain();
@@ -312,26 +309,6 @@ void MapgenV5::makeChunk(BlockMakeData *data)
}
-void MapgenV5::calculateNoise()
-{
- //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
- s16 x = node_min.X;
- s16 y = node_min.Y - 1;
- s16 z = node_min.Z;
-
- noise_factor->perlinMap2D(x, z);
- noise_height->perlinMap2D(x, z);
- noise_ground->perlinMap3D(x, y, z);
-
- // Cave noises are calculated in generateCaves()
- // only if solid terrain is present in mapchunk
-
- noise_filler_depth->perlinMap2D(x, z);
-
- //printf("calculateNoise: %dus\n", t.stop());
-}
-
-
//bool is_cave(u32 index) {
// double d1 = contour(noise_cave1->result[index]);
// double d2 = contour(noise_cave2->result[index]);
@@ -355,6 +332,10 @@ int MapgenV5::generateBaseTerrain()
u32 index2d = 0;
int stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
+ noise_factor->perlinMap2D(node_min.X, node_min.Z);
+ noise_height->perlinMap2D(node_min.X, node_min.Z);
+ noise_ground->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
for (s16 z=node_min.Z; z<=node_max.Z; z++) {
for (s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) {
u32 vi = vm->m_area.index(node_min.X, y, z);
diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h
index 99836b23e..dd5ca0a31 100644
--- a/src/mapgen_v5.h
+++ b/src/mapgen_v5.h
@@ -69,7 +69,6 @@ public:
virtual void makeChunk(BlockMakeData *data);
int getSpawnLevelAtPoint(v2s16 p);
- void calculateNoise();
int generateBaseTerrain();
};
diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp
index ee2c5f45f..5c5f13b88 100644
--- a/src/mapgen_v7.cpp
+++ b/src/mapgen_v7.cpp
@@ -252,9 +252,6 @@ void MapgenV7::makeChunk(BlockMakeData *data)
blockseed = getBlockSeed2(full_node_min, seed);
- // Make some noise
- calculateNoise();
-
// Generate terrain and ridges with initial heightmaps
s16 stone_surface_max_y = generateTerrain();
@@ -340,37 +337,6 @@ void MapgenV7::makeChunk(BlockMakeData *data)
}
-void MapgenV7::calculateNoise()
-{
- //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
- s16 x = node_min.X;
- s16 y = node_min.Y - 1;
- s16 z = node_min.Z;
-
- noise_terrain_persist->perlinMap2D(x, z);
- float *persistmap = noise_terrain_persist->result;
-
- noise_terrain_base->perlinMap2D(x, z, persistmap);
- noise_terrain_alt->perlinMap2D(x, z, persistmap);
- noise_height_select->perlinMap2D(x, z);
-
- if (spflags & MGV7_MOUNTAINS) {
- noise_mountain->perlinMap3D(x, y, z);
- noise_mount_height->perlinMap2D(x, z);
- }
-
- if ((spflags & MGV7_RIDGES) && node_max.Y >= water_level) {
- noise_ridge->perlinMap3D(x, y, z);
- noise_ridge_uwater->perlinMap2D(x, z);
- }
-
- // Cave noises are calculated in generateCaves()
- // only if solid terrain is present in mapchunk
-
- //printf("calculateNoise: %dus\n", t.stop());
-}
-
-
float MapgenV7::baseTerrainLevelAtPoint(s16 x, s16 z)
{
float hselect = NoisePerlin2D(&noise_height_select->np, x, z, seed);
@@ -430,10 +396,23 @@ int MapgenV7::generateTerrain()
MapNode n_stone(c_stone);
MapNode n_water(c_water_source);
+ //// Calculate noise for terrain generation
+ noise_terrain_persist->perlinMap2D(node_min.X, node_min.Z);
+ float *persistmap = noise_terrain_persist->result;
+
+ noise_terrain_base->perlinMap2D(node_min.X, node_min.Z, persistmap);
+ noise_terrain_alt->perlinMap2D(node_min.X, node_min.Z, persistmap);
+ noise_height_select->perlinMap2D(node_min.X, node_min.Z);
+
+ if (spflags & MGV7_MOUNTAINS) {
+ noise_mountain->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+ noise_mount_height->perlinMap2D(node_min.X, node_min.Z);
+ }
+
+ //// Place nodes
v3s16 em = vm->m_area.getExtent();
s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
u32 index2d = 0;
- bool mountain_flag = spflags & MGV7_MOUNTAINS;
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
@@ -450,7 +429,7 @@ int MapgenV7::generateTerrain()
if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
if (y <= surface_y) {
vm->m_data[vi] = n_stone; // Base terrain
- } else if (mountain_flag &&
+ } else if ((spflags & MGV7_MOUNTAINS) &&
getMountainTerrainFromMap(index3d, index2d, y)) {
vm->m_data[vi] = n_stone; // Mountain terrain
if (y > stone_surface_max_y)
@@ -475,6 +454,9 @@ void MapgenV7::generateRidgeTerrain()
if (node_max.Y < water_level - 16)
return;
+ noise_ridge->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+ noise_ridge_uwater->perlinMap2D(node_min.X, node_min.Z);
+
MapNode n_water(c_water_source);
MapNode n_air(CONTENT_AIR);
u32 index = 0;
diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h
index eb89d5978..723f1217f 100644
--- a/src/mapgen_v7.h
+++ b/src/mapgen_v7.h
@@ -87,9 +87,6 @@ public:
float baseTerrainLevelFromMap(int index);
bool getMountainTerrainAtPoint(s16 x, s16 y, s16 z);
bool getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y);
-
- void calculateNoise();
-
int generateTerrain();
void generateRidgeTerrain();
};
diff --git a/src/mapgen_valleys.cpp b/src/mapgen_valleys.cpp
index 699554ecd..3a4f984f9 100644
--- a/src/mapgen_valleys.cpp
+++ b/src/mapgen_valleys.cpp
@@ -388,7 +388,6 @@ void MapgenValleys::calculateNoise()
//TimeTaker tcn("actualNoise");
- noise_filler_depth->perlinMap2D(x, z);
noise_inter_valley_slope->perlinMap2D(x, z);
noise_rivers->perlinMap2D(x, z);
noise_terrain_height->perlinMap2D(x, z);