mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
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
This commit is contained in:
parent
70e2c1c7d4
commit
92705306bf
12 changed files with 160 additions and 164 deletions
|
@ -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;
|
||||
|
@ -99,20 +85,6 @@ private:
|
|||
friend class EmergeManager;
|
||||
};
|
||||
|
||||
////
|
||||
//// 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;
|
||||
" not registered; falling back to " <<
|
||||
default_mapgen_name << std::endl;
|
||||
|
||||
params.mg_name = DEFAULT_MAPGEN;
|
||||
|
||||
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, ¶ms, this);
|
||||
Mapgen *mg = Mapgen::createMapgen(mgtype, i, ¶ms, 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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue