diff options
author | Paramat <paramat@users.noreply.github.com> | 2018-04-05 17:21:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-05 17:21:41 +0100 |
commit | 32d456bd2d4dda50f77c01c702d1b5a5ff26134b (patch) | |
tree | 5f70367cacdc3901d3a9746563aad5ed3b3054c4 /src/mapgen/cavegen.cpp | |
parent | 077f231111082272359a916c3e41049aaf699151 (diff) | |
download | hax-minetest-server-32d456bd2d4dda50f77c01c702d1b5a5ff26134b.tar.gz hax-minetest-server-32d456bd2d4dda50f77c01c702d1b5a5ff26134b.zip |
Biome API / cavegen: Add definable cave liquid for a biome (#7192)
Add 'node_cave_liquid' as a new field in biome registration.
If field is absent cave liquids fall back to classic behaviour.
Diffstat (limited to 'src/mapgen/cavegen.cpp')
-rw-r--r-- | src/mapgen/cavegen.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/mapgen/cavegen.cpp b/src/mapgen/cavegen.cpp index 6f571ba1f..a54d5139d 100644 --- a/src/mapgen/cavegen.cpp +++ b/src/mapgen/cavegen.cpp @@ -279,7 +279,8 @@ CavesRandomWalk::CavesRandomWalk( int water_level, content_t water_source, content_t lava_source, - int lava_depth) + int lava_depth, + BiomeGen *biomegen) { assert(ndef); @@ -289,6 +290,7 @@ CavesRandomWalk::CavesRandomWalk( this->water_level = water_level; this->np_caveliquids = &nparams_caveliquids; this->lava_depth = lava_depth; + this->bmgn = biomegen; c_water_source = water_source; if (c_water_source == CONTENT_IGNORE) @@ -495,10 +497,22 @@ void CavesRandomWalk::carveRoute(v3f vec, float f, bool randomize_xz) v3s16 startp(orp.X, orp.Y, orp.Z); startp += of; - float nval = NoisePerlin3D(np_caveliquids, startp.X, - startp.Y, startp.Z, seed); - MapNode liquidnode = (nval < 0.40f && node_max.Y < lava_depth) ? - lavanode : waternode; + // Get biome at 'startp', use 'node_cave_liquid' if stated, otherwise + // fallback to classic behaviour. + MapNode liquidnode = CONTENT_IGNORE; + + if (bmgn) { + Biome *biome = (Biome *)bmgn->calcBiomeAtPoint(startp); + if (biome->c_cave_liquid != CONTENT_IGNORE) + liquidnode = biome->c_cave_liquid; + } + + if (liquidnode == CONTENT_IGNORE) { + float nval = NoisePerlin3D(np_caveliquids, startp.X, + startp.Y, startp.Z, seed); + liquidnode = (nval < 0.40f && node_max.Y < lava_depth) ? + lavanode : waternode; + } v3f fp = orp + vec * f; fp.X += 0.1f * ps->range(-10, 10); |