summaryrefslogtreecommitdiff
path: root/src/mapgen.cpp
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2016-06-24 18:15:56 -0400
committerkwolekr <kwolekr@minetest.net>2016-07-03 15:38:36 -0400
commit3c63c3044d5e4ca36c2649c530f31622581d90fd (patch)
treeb7924100f14f5626c11d534e2ad3602e269ac1df /src/mapgen.cpp
parent92705306bfb4994107a43514f29997cea15d48dc (diff)
downloadminetest-3c63c3044d5e4ca36c2649c530f31622581d90fd.tar.gz
minetest-3c63c3044d5e4ca36c2649c530f31622581d90fd.tar.bz2
minetest-3c63c3044d5e4ca36c2649c530f31622581d90fd.zip
Add MapSettingsManager and new mapgen setting script API functions
This commit refactors the majority of the Mapgen settings system. - MapgenParams is now owned by MapSettingsManager, itself a part of ServerMap, instead of the EmergeManager. - New Script API functions added: core.get_mapgen_setting core.get_mapgen_setting_noiseparams, core.set_mapgen_setting, and core.set_mapgen_setting_noiseparams. - minetest.get/set_mapgen_params are deprecated by the above new functions. - It is now possible to view and modify any arbitrary mapgen setting from a mod, rather than the base MapgenParams structure. - MapgenSpecificParams has been removed.
Diffstat (limited to 'src/mapgen.cpp')
-rw-r--r--src/mapgen.cpp68
1 files changed, 31 insertions, 37 deletions
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index e45233b33..b6fda91ac 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -176,26 +176,26 @@ Mapgen *Mapgen::createMapgen(MapgenType mgtype, int mgid,
{
switch (mgtype) {
case MAPGEN_FLAT:
- return new MapgenFlat(mgid, params, emerge);
+ return new MapgenFlat(mgid, (MapgenFlatParams *)params, emerge);
case MAPGEN_FRACTAL:
- return new MapgenFractal(mgid, params, emerge);
+ return new MapgenFractal(mgid, (MapgenFractalParams *)params, emerge);
case MAPGEN_SINGLENODE:
- return new MapgenSinglenode(mgid, params, emerge);
+ return new MapgenSinglenode(mgid, (MapgenSinglenodeParams *)params, emerge);
case MAPGEN_V5:
- return new MapgenV5(mgid, params, emerge);
+ return new MapgenV5(mgid, (MapgenV5Params *)params, emerge);
case MAPGEN_V6:
- return new MapgenV6(mgid, params, emerge);
+ return new MapgenV6(mgid, (MapgenV6Params *)params, emerge);
case MAPGEN_V7:
- return new MapgenV7(mgid, params, emerge);
+ return new MapgenV7(mgid, (MapgenV7Params *)params, emerge);
case MAPGEN_VALLEYS:
- return new MapgenValleys(mgid, params, emerge);
+ return new MapgenValleys(mgid, (MapgenValleysParams *)params, emerge);
default:
return NULL;
}
}
-MapgenSpecificParams *Mapgen::createMapgenParams(MapgenType mgtype)
+MapgenParams *Mapgen::createMapgenParams(MapgenType mgtype)
{
switch (mgtype) {
case MAPGEN_FLAT:
@@ -970,52 +970,46 @@ void GenerateNotifier::getEvents(
MapgenParams::~MapgenParams()
{
delete bparams;
- delete sparams;
}
-void MapgenParams::load(const Settings &settings)
+void MapgenParams::readParams(const Settings *settings)
{
std::string seed_str;
- const char *seed_name = (&settings == g_settings) ? "fixed_map_seed" : "seed";
+ const char *seed_name = (settings == g_settings) ? "fixed_map_seed" : "seed";
- if (settings.getNoEx(seed_name, seed_str) && !seed_str.empty())
- seed = read_seed(seed_str.c_str());
- else
- myrand_bytes(&seed, sizeof(seed));
+ if (settings->getNoEx(seed_name, seed_str)) {
+ if (!seed_str.empty())
+ seed = read_seed(seed_str.c_str());
+ else
+ myrand_bytes(&seed, sizeof(seed));
+ }
+
+ std::string mg_name;
+ if (settings->getNoEx("mg_name", mg_name))
+ this->mgtype = Mapgen::getMapgenType(mg_name);
- settings.getNoEx("mg_name", mg_name);
- settings.getS16NoEx("water_level", water_level);
- settings.getS16NoEx("chunksize", chunksize);
- settings.getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen);
+ settings->getS16NoEx("water_level", water_level);
+ settings->getS16NoEx("chunksize", chunksize);
+ settings->getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen);
delete bparams;
bparams = BiomeManager::createBiomeParams(BIOMEGEN_ORIGINAL);
if (bparams) {
- bparams->readParams(&settings);
+ bparams->readParams(settings);
bparams->seed = seed;
}
-
- delete sparams;
- MapgenType mgtype = Mapgen::getMapgenType(mg_name);
- if (mgtype != MAPGEN_INVALID) {
- sparams = Mapgen::createMapgenParams(mgtype);
- sparams->readParams(&settings);
- }
}
-void MapgenParams::save(Settings &settings) const
+void MapgenParams::writeParams(Settings *settings) const
{
- settings.set("mg_name", mg_name);
- settings.setU64("seed", seed);
- settings.setS16("water_level", water_level);
- settings.setS16("chunksize", chunksize);
- settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, U32_MAX);
+ settings->set("mg_name", Mapgen::getMapgenName(mgtype));
+ settings->setU64("seed", seed);
+ settings->setS16("water_level", water_level);
+ settings->setS16("chunksize", chunksize);
+ settings->setFlagStr("mg_flags", flags, flagdesc_mapgen, U32_MAX);
if (bparams)
- bparams->writeParams(&settings);
-
- if (sparams)
- sparams->writeParams(&settings);
+ bparams->writeParams(settings);
}