summaryrefslogtreecommitdiff
path: root/src/emerge.cpp
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2016-06-14 00:10:55 -0400
committerkwolekr <kwolekr@minetest.net>2016-07-03 14:04:11 -0400
commit92705306bfb4994107a43514f29997cea15d48dc (patch)
treed1919cc2b5091ef6e31cdd312f5cd92ba058e76e /src/emerge.cpp
parent70e2c1c7d413d20757f571e3f1e02b05c95418f1 (diff)
downloadminetest-92705306bfb4994107a43514f29997cea15d48dc.tar.gz
minetest-92705306bfb4994107a43514f29997cea15d48dc.tar.bz2
minetest-92705306bfb4994107a43514f29997cea15d48dc.zip
Mapgen: Refactor mapgen creation and management
- Move mapgen creation logic out of EmergeManager and into Mapgen - Internally represent mapgen type as an enum value, instead of a string - Remove the need for a MapgenFactory per mapgen
Diffstat (limited to 'src/emerge.cpp')
-rw-r--r--src/emerge.cpp68
1 files changed, 9 insertions, 59 deletions
diff --git a/src/emerge.cpp b/src/emerge.cpp
index a2a10a177..48de6cb1a 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -34,13 +34,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "map.h"
#include "mapblock.h"
-#include "mapgen_flat.h"
-#include "mapgen_fractal.h"
-#include "mapgen_v5.h"
-#include "mapgen_v6.h"
-#include "mapgen_v7.h"
-#include "mapgen_valleys.h"
-#include "mapgen_singlenode.h"
#include "mg_biome.h"
#include "mg_ore.h"
#include "mg_decoration.h"
@@ -53,13 +46,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "voxel.h"
-
-struct MapgenDesc {
- const char *name;
- MapgenFactory *factory;
- bool is_user_visible;
-};
-
class EmergeThread : public Thread {
public:
bool enable_mapgen_debug_info;
@@ -100,20 +86,6 @@ private:
};
////
-//// Built-in mapgens
-////
-
-MapgenDesc g_reg_mapgens[] = {
- {"v5", new MapgenFactoryV5, true},
- {"v6", new MapgenFactoryV6, true},
- {"v7", new MapgenFactoryV7, true},
- {"flat", new MapgenFactoryFlat, true},
- {"fractal", new MapgenFactoryFractal, true},
- {"valleys", new MapgenFactoryValleys, true},
- {"singlenode", new MapgenFactorySinglenode, false},
-};
-
-////
//// EmergeManager
////
@@ -195,24 +167,24 @@ void EmergeManager::initMapgens()
if (m_mapgens.size())
return;
- MapgenFactory *mgfactory = getMapgenFactory(params.mg_name);
- if (!mgfactory) {
+ MapgenType mgtype = Mapgen::getMapgenType(params.mg_name);
+ if (mgtype == MAPGEN_INVALID) {
+ const char *default_mapgen_name = Mapgen::getMapgenName(MAPGEN_DEFAULT);
errorstream << "EmergeManager: mapgen " << params.mg_name <<
- " not registered; falling back to " << DEFAULT_MAPGEN << std::endl;
-
- params.mg_name = DEFAULT_MAPGEN;
+ " not registered; falling back to " <<
+ default_mapgen_name << std::endl;
- mgfactory = getMapgenFactory(params.mg_name);
- FATAL_ERROR_IF(mgfactory == NULL, "Couldn't use any mapgen!");
+ params.mg_name = default_mapgen_name;
+ mgtype = MAPGEN_DEFAULT;
}
if (!params.sparams) {
- params.sparams = mgfactory->createMapgenParams();
+ params.sparams = Mapgen::createMapgenParams(mgtype);
params.sparams->readParams(g_settings);
}
for (u32 i = 0; i != m_threads.size(); i++) {
- Mapgen *mg = mgfactory->createMapgen(i, &params, this);
+ Mapgen *mg = Mapgen::createMapgen(mgtype, i, &params, this);
m_mapgens.push_back(mg);
}
}
@@ -369,28 +341,6 @@ bool EmergeManager::isBlockUnderground(v3s16 blockpos)
return blockpos.Y * (MAP_BLOCKSIZE + 1) <= params.water_level;
}
-
-void EmergeManager::getMapgenNames(
- std::vector<const char *> *mgnames, bool include_hidden)
-{
- for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) {
- if (include_hidden || g_reg_mapgens[i].is_user_visible)
- mgnames->push_back(g_reg_mapgens[i].name);
- }
-}
-
-
-MapgenFactory *EmergeManager::getMapgenFactory(const std::string &mgname)
-{
- for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) {
- if (mgname == g_reg_mapgens[i].name)
- return g_reg_mapgens[i].factory;
- }
-
- return NULL;
-}
-
-
bool EmergeManager::pushBlockEmergeData(
v3s16 pos,
u16 peer_requested,