1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-01 17:38:41 +00:00

Allow ObjDefManager instances to be cloned

This commit is contained in:
sfan5 2020-04-09 23:40:12 +02:00 committed by Loïc Blot
parent d1c6cc72cc
commit 2062c80e21
13 changed files with 370 additions and 5 deletions

View file

@ -72,6 +72,14 @@ void OreManager::clear()
}
OreManager *OreManager::clone() const
{
auto mgr = new OreManager();
ObjDefManager::cloneTo(mgr);
return mgr;
}
///////////////////////////////////////////////////////////////////////////////
@ -106,9 +114,37 @@ size_t Ore::placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
}
void Ore::cloneTo(Ore *def) const
{
ObjDef::cloneTo(def);
NodeResolver::cloneTo(def);
def->c_ore = c_ore;
def->c_wherein = c_wherein;
def->clust_scarcity = clust_scarcity;
def->clust_num_ores = clust_num_ores;
def->clust_size = clust_size;
def->y_min = y_min;
def->y_max = y_max;
def->ore_param2 = ore_param2;
def->flags = flags;
def->nthresh = nthresh;
def->np = np;
def->noise = nullptr; // cannot be shared! so created on demand
def->biomes = biomes;
}
///////////////////////////////////////////////////////////////////////////////
ObjDef *OreScatter::clone() const
{
auto def = new OreScatter();
Ore::cloneTo(def);
return def;
}
void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
@ -158,6 +194,19 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
///////////////////////////////////////////////////////////////////////////////
ObjDef *OreSheet::clone() const
{
auto def = new OreSheet();
Ore::cloneTo(def);
def->column_height_max = column_height_max;
def->column_height_min = column_height_min;
def->column_midpoint_factor = column_midpoint_factor;
return def;
}
void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
@ -221,6 +270,20 @@ OrePuff::~OrePuff()
}
ObjDef *OrePuff::clone() const
{
auto def = new OrePuff();
Ore::cloneTo(def);
def->np_puff_top = np_puff_top;
def->np_puff_bottom = np_puff_bottom;
def->noise_puff_top = nullptr; // cannot be shared, on-demand
def->noise_puff_bottom = nullptr;
return def;
}
void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
@ -294,6 +357,14 @@ void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed,
///////////////////////////////////////////////////////////////////////////////
ObjDef *OreBlob::clone() const
{
auto def = new OreBlob();
Ore::cloneTo(def);
return def;
}
void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
@ -366,6 +437,19 @@ OreVein::~OreVein()
}
ObjDef *OreVein::clone() const
{
auto def = new OreVein();
Ore::cloneTo(def);
def->random_factor = random_factor;
def->noise2 = nullptr; // cannot be shared, on-demand
def->sizey_prev = sizey_prev;
return def;
}
void OreVein::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
@ -434,6 +518,19 @@ OreStratum::~OreStratum()
}
ObjDef *OreStratum::clone() const
{
auto def = new OreStratum();
Ore::cloneTo(def);
def->np_stratum_thickness = np_stratum_thickness;
def->noise_stratum_thickness = nullptr; // cannot be shared, on-demand
def->stratum_thickness = stratum_thickness;
return def;
}
void OreStratum::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{