Biomes: Make biome heat and humidity noise parameters user-configurable
authorkwolekr <kwolekr@minetest.net>
Tue, 9 Dec 2014 05:37:48 +0000 (00:37 -0500)
committerkwolekr <kwolekr@minetest.net>
Tue, 9 Dec 2014 05:38:04 +0000 (00:38 -0500)
src/emerge.cpp
src/mapgen.h
src/mapgen_v5.cpp
src/mapgen_v7.cpp
src/mg_biome.cpp
src/mg_biome.h

index 8813a71a96dc2d6a449ce19ed091fa917b7f19bb..133fd4a5979d25493cb955512e7fe8b43ef51392 100644 (file)
@@ -363,6 +363,8 @@ void EmergeManager::loadParamsFromSettings(Settings *settings) {
        settings->getS16NoEx("water_level",  params.water_level);
        settings->getS16NoEx("chunksize",    params.chunksize);
        settings->getFlagStrNoEx("mg_flags", params.flags, flagdesc_mapgen);
+       settings->getNoiseParams("mg_biome_np_heat",     params.np_biome_heat);
+       settings->getNoiseParams("mg_biome_np_humidity", params.np_biome_humidity);
 
        delete params.sparams;
        params.sparams = createMapgenParams(params.mg_name);
@@ -377,6 +379,8 @@ void EmergeManager::saveParamsToSettings(Settings *settings) {
        settings->setS16("water_level",  params.water_level);
        settings->setS16("chunksize",    params.chunksize);
        settings->setFlagStr("mg_flags", params.flags, flagdesc_mapgen, (u32)-1);
+       settings->setNoiseParams("mg_biome_np_heat",     params.np_biome_heat);
+       settings->setNoiseParams("mg_biome_np_humidity", params.np_biome_humidity);
 
        if (params.sparams)
                params.sparams->writeParams(settings);
index 5feeaf97cb9b56a25101b9c9bf96c5362d91acd8..834495036822e93289f40faf0051060f95b32766 100644 (file)
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef MAPGEN_HEADER
 #define MAPGEN_HEADER
 
+#include "noise.h"
 #include "nodedef.h"
 #include "mapnode.h"
 #include "util/string.h"
@@ -107,6 +108,9 @@ struct MapgenParams {
        s16 water_level;
        u32 flags;
 
+       NoiseParams np_biome_heat;
+       NoiseParams np_biome_humidity;
+
        MapgenSpecificParams *sparams;
 
        MapgenParams()
@@ -117,6 +121,8 @@ struct MapgenParams {
                chunksize   = 5;
                flags       = MG_TREES | MG_CAVES | MG_LIGHT;
                sparams     = NULL;
+               np_biome_heat     = NoiseParams(50, 50, v3f(500.0, 500.0, 500.0), 5349, 3, 0.70, 2.0);
+               np_biome_humidity = NoiseParams(50, 50, v3f(500.0, 500.0, 500.0), 842, 3, 0.55, 2.0);
        }
 };
 
index 959e5c33f72bd636ee48a5eb8660796f4fc07cc4..04e9d8c9513f0dcbfdc4c94f782104bc942237cf 100644 (file)
@@ -77,8 +77,8 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
        noise_wetness      = new Noise(&sp->np_wetness, seed, csize.X, csize.Y + 2, csize.Z);
 
        // Biome noise
-       noise_heat         = new Noise(bmgr->np_heat,     seed, csize.X, csize.Z);
-       noise_humidity     = new Noise(bmgr->np_humidity, seed, csize.X, csize.Z);
+       noise_heat         = new Noise(&params->np_biome_heat,     seed, csize.X, csize.Z);
+       noise_humidity     = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
 
        //// Resolve nodes to be used
        INodeDefManager *ndef = emerge->ndef;
index 7b73776119d67f7dad4b5d2ab23c937d51623256..739efadd8c0137895e6505c756ce51f2e72ad917 100644 (file)
@@ -81,8 +81,8 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
        noise_ridge    = new Noise(&sp->np_ridge,    seed, csize.X, csize.Y, csize.Z);
 
        //// Biome noise
-       noise_heat     = new Noise(bmgr->np_heat,     seed, csize.X, csize.Z);
-       noise_humidity = new Noise(bmgr->np_humidity, seed, csize.X, csize.Z);
+       noise_heat     = new Noise(&params->np_biome_heat,     seed, csize.X, csize.Z);
+       noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
 
        //// Resolve nodes to be used
        INodeDefManager *ndef = emerge->ndef;
@@ -305,8 +305,8 @@ void MapgenV7::calculateNoise() {
 
 
 Biome *MapgenV7::getBiomeAtPoint(v3s16 p) {
-       float heat      = NoisePerlin2D(bmgr->np_heat, p.X, p.Z, seed);
-       float humidity  = NoisePerlin2D(bmgr->np_humidity, p.X, p.Z, seed);
+       float heat      = NoisePerlin2D(noise_heat->np, p.X, p.Z, seed);
+       float humidity  = NoisePerlin2D(noise_humidity->np, p.X, p.Z, seed);
        s16 groundlevel = baseTerrainLevelAtPoint(p.X, p.Z);
 
        return bmgr->getBiome(heat, humidity, groundlevel);
index dff73e34ff8d4ab6cf8ef4d795b0f49fb0013386..13dc67e74bd0898f172acb06742cad99af379d3b 100644 (file)
@@ -29,17 +29,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 const char *BiomeManager::ELEMENT_TITLE = "biome";
 
-NoiseParams nparams_biome_def_heat(50, 50, v3f(500.0, 500.0, 500.0), 5349, 3, 0.70, 2.0);
-NoiseParams nparams_biome_def_humidity(50, 50, v3f(500.0, 500.0, 500.0), 842, 3, 0.55, 2.0);
-
 
 ///////////////////////////////////////////////////////////////////////////////
 
 BiomeManager::BiomeManager(IGameDef *gamedef)
 {
        m_resolver  = gamedef->getNodeDefManager()->getResolver();
-       np_heat     = &nparams_biome_def_heat;
-       np_humidity = &nparams_biome_def_humidity;
 
        // Create default biome to be used in case none exist
        Biome *b = new Biome;
index 9180069df89bd2d67b34e068f8cd33537db0792b..04567267f81e3a97aa924d7cf47ab8279b6f4f3e 100644 (file)
@@ -21,7 +21,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define MG_BIOME_HEADER
 
 #include "mapgen.h"
-#include "noise.h"
+
+struct NoiseParams;
 
 enum BiomeType
 {
@@ -32,10 +33,6 @@ enum BiomeType
        BIOME_TYPE_FLAT
 };
 
-extern NoiseParams nparams_biome_def_heat;
-extern NoiseParams nparams_biome_def_humidity;
-
-
 class Biome : public GenElement {
 public:
        u32 flags;
@@ -61,9 +58,6 @@ public:
        static const char *ELEMENT_TITLE;
        static const size_t ELEMENT_LIMIT = 0x100;
 
-       NoiseParams *np_heat;
-       NoiseParams *np_humidity;
-
        BiomeManager(IGameDef *gamedef);
        ~BiomeManager();