MgOre: Fix invalid field polymorphism (#10846)

This commit is contained in:
rubenwardy 2021-01-21 19:08:06 +00:00 committed by GitHub
parent 8ff209c412
commit 4fcd000e20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 28 deletions

@ -52,7 +52,7 @@ extern FlagDesc flagdesc_ore[];
class Ore : public ObjDef, public NodeResolver { class Ore : public ObjDef, public NodeResolver {
public: public:
static const bool NEEDS_NOISE = false; const bool needs_noise;
content_t c_ore; // the node to place content_t c_ore; // the node to place
std::vector<content_t> c_wherein; // the nodes to be placed in std::vector<content_t> c_wherein; // the nodes to be placed in
@ -68,7 +68,7 @@ public:
Noise *noise = nullptr; Noise *noise = nullptr;
std::unordered_set<biome_t> biomes; std::unordered_set<biome_t> biomes;
Ore() = default;; explicit Ore(bool needs_noise): needs_noise(needs_noise) {}
virtual ~Ore(); virtual ~Ore();
virtual void resolveNodeNames(); virtual void resolveNodeNames();
@ -83,17 +83,17 @@ protected:
class OreScatter : public Ore { class OreScatter : public Ore {
public: public:
static const bool NEEDS_NOISE = false; OreScatter() : Ore(false) {}
ObjDef *clone() const; ObjDef *clone() const;
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap); v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
}; };
class OreSheet : public Ore { class OreSheet : public Ore {
public: public:
static const bool NEEDS_NOISE = true; OreSheet() : Ore(true) {}
ObjDef *clone() const; ObjDef *clone() const;
@ -101,14 +101,12 @@ public:
u16 column_height_max; u16 column_height_max;
float column_midpoint_factor; float column_midpoint_factor;
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap); v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
}; };
class OrePuff : public Ore { class OrePuff : public Ore {
public: public:
static const bool NEEDS_NOISE = true;
ObjDef *clone() const; ObjDef *clone() const;
NoiseParams np_puff_top; NoiseParams np_puff_top;
@ -116,55 +114,50 @@ public:
Noise *noise_puff_top = nullptr; Noise *noise_puff_top = nullptr;
Noise *noise_puff_bottom = nullptr; Noise *noise_puff_bottom = nullptr;
OrePuff() = default; OrePuff() : Ore(true) {}
virtual ~OrePuff(); virtual ~OrePuff();
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap); v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
}; };
class OreBlob : public Ore { class OreBlob : public Ore {
public: public:
static const bool NEEDS_NOISE = true;
ObjDef *clone() const; ObjDef *clone() const;
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, OreBlob() : Ore(true) {}
v3s16 nmin, v3s16 nmax, biome_t *biomemap); void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
}; };
class OreVein : public Ore { class OreVein : public Ore {
public: public:
static const bool NEEDS_NOISE = true;
ObjDef *clone() const; ObjDef *clone() const;
float random_factor; float random_factor;
Noise *noise2 = nullptr; Noise *noise2 = nullptr;
int sizey_prev = 0; int sizey_prev = 0;
OreVein() = default; OreVein() : Ore(true) {}
virtual ~OreVein(); virtual ~OreVein();
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap); v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
}; };
class OreStratum : public Ore { class OreStratum : public Ore {
public: public:
static const bool NEEDS_NOISE = false;
ObjDef *clone() const; ObjDef *clone() const;
NoiseParams np_stratum_thickness; NoiseParams np_stratum_thickness;
Noise *noise_stratum_thickness = nullptr; Noise *noise_stratum_thickness = nullptr;
u16 stratum_thickness; u16 stratum_thickness;
OreStratum() = default; OreStratum() : Ore(false) {}
virtual ~OreStratum(); virtual ~OreStratum();
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap); v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
}; };
class OreManager : public ObjDefManager { class OreManager : public ObjDefManager {

@ -1335,7 +1335,7 @@ int ModApiMapgen::l_register_ore(lua_State *L)
lua_getfield(L, index, "noise_params"); lua_getfield(L, index, "noise_params");
if (read_noiseparams(L, -1, &ore->np)) { if (read_noiseparams(L, -1, &ore->np)) {
ore->flags |= OREFLAG_USE_NOISE; ore->flags |= OREFLAG_USE_NOISE;
} else if (ore->NEEDS_NOISE) { } else if (ore->needs_noise) {
errorstream << "register_ore: specified ore type requires valid " errorstream << "register_ore: specified ore type requires valid "
"'noise_params' parameter" << std::endl; "'noise_params' parameter" << std::endl;
delete ore; delete ore;