1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Fix broken BiomeGen abstraction (#11107)

This commit is contained in:
sfan5 2021-03-23 15:43:26 +01:00 committed by GitHub
parent c9eba8440d
commit 2da1eee394
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 92 additions and 187 deletions

View file

@ -113,13 +113,15 @@ EmergeParams::~EmergeParams()
{
infostream << "EmergeParams: destroying " << this << std::endl;
// Delete everything that was cloned on creation of EmergeParams
delete biomegen;
delete biomemgr;
delete oremgr;
delete decomgr;
delete schemmgr;
}
EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
EmergeParams::EmergeParams(EmergeManager *parent, const BiomeGen *biomegen,
const BiomeManager *biomemgr,
const OreManager *oremgr, const DecorationManager *decomgr,
const SchematicManager *schemmgr) :
ndef(parent->ndef),
@ -129,6 +131,7 @@ EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
biomemgr(biomemgr->clone()), oremgr(oremgr->clone()),
decomgr(decomgr->clone()), schemmgr(schemmgr->clone())
{
this->biomegen = biomegen->clone(this->biomemgr);
}
////
@ -143,6 +146,10 @@ EmergeManager::EmergeManager(Server *server)
this->decomgr = new DecorationManager(server);
this->schemmgr = new SchematicManager(server);
// initialized later
this->mgparams = nullptr;
this->biomegen = nullptr;
// Note that accesses to this variable are not synchronized.
// This is because the *only* thread ever starting or stopping
// EmergeThreads should be the ServerThread.
@ -240,9 +247,12 @@ void EmergeManager::initMapgens(MapgenParams *params)
mgparams = params;
v3s16 csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE);
biomegen = biomemgr->createBiomeGen(BIOMEGEN_ORIGINAL, params->bparams, csize);
for (u32 i = 0; i != m_threads.size(); i++) {
EmergeParams *p = new EmergeParams(
this, biomemgr, oremgr, decomgr, schemmgr);
EmergeParams *p = new EmergeParams(this, biomegen,
biomemgr, oremgr, decomgr, schemmgr);
infostream << "EmergeManager: Created params " << p
<< " for thread " << i << std::endl;
m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, p));