mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Give the Mapgen on each EmergeThread its own Biome/Ore/Deco/SchemManager copy
This commit is contained in:
parent
2062c80e21
commit
3c65d1acec
27 changed files with 225 additions and 77 deletions
|
@ -43,12 +43,21 @@ SchematicManager::SchematicManager(Server *server) :
|
|||
}
|
||||
|
||||
|
||||
SchematicManager *SchematicManager::clone() const
|
||||
{
|
||||
auto mgr = new SchematicManager();
|
||||
assert(mgr);
|
||||
ObjDefManager::cloneTo(mgr);
|
||||
return mgr;
|
||||
}
|
||||
|
||||
|
||||
void SchematicManager::clear()
|
||||
{
|
||||
EmergeManager *emerge = m_server->getEmergeManager();
|
||||
|
||||
// Remove all dangling references in Decorations
|
||||
DecorationManager *decomgr = emerge->decomgr;
|
||||
DecorationManager *decomgr = emerge->getWritableDecorationManager();
|
||||
for (size_t i = 0; i != decomgr->getNumObjects(); i++) {
|
||||
Decoration *deco = (Decoration *)decomgr->getRaw(i);
|
||||
|
||||
|
@ -79,7 +88,21 @@ Schematic::~Schematic()
|
|||
|
||||
ObjDef *Schematic::clone() const
|
||||
{
|
||||
FATAL_ERROR("not cloneable");
|
||||
auto def = new Schematic();
|
||||
ObjDef::cloneTo(def);
|
||||
NodeResolver::cloneTo(def);
|
||||
|
||||
def->c_nodes = c_nodes;
|
||||
def->flags = flags;
|
||||
def->size = size;
|
||||
FATAL_ERROR_IF(!schemdata, "Schematic can only be cloned after loading");
|
||||
u32 nodecount = size.X * size.Y * size.Z;
|
||||
def->schemdata = new MapNode[nodecount];
|
||||
memcpy(def->schemdata, schemdata, sizeof(MapNode) * nodecount);
|
||||
def->slice_probs = new u8[size.Y];
|
||||
memcpy(def->slice_probs, slice_probs, sizeof(u8) * size.Y);
|
||||
|
||||
return def;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue