Skip to content

Commit 4fcd000

Browse files
authoredJan 21, 2021
MgOre: Fix invalid field polymorphism (#10846)
1 parent 8ff209c commit 4fcd000

File tree

2 files changed

+21
-28
lines changed

2 files changed

+21
-28
lines changed
 

‎src/mapgen/mg_ore.h

+20-27
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ extern FlagDesc flagdesc_ore[];
5252

5353
class Ore : public ObjDef, public NodeResolver {
5454
public:
55-
static const bool NEEDS_NOISE = false;
55+
const bool needs_noise;
5656

5757
content_t c_ore; // the node to place
5858
std::vector<content_t> c_wherein; // the nodes to be placed in
@@ -68,7 +68,7 @@ class Ore : public ObjDef, public NodeResolver {
6868
Noise *noise = nullptr;
6969
std::unordered_set<biome_t> biomes;
7070

71-
Ore() = default;;
71+
explicit Ore(bool needs_noise): needs_noise(needs_noise) {}
7272
virtual ~Ore();
7373

7474
virtual void resolveNodeNames();
@@ -83,88 +83,81 @@ class Ore : public ObjDef, public NodeResolver {
8383

8484
class OreScatter : public Ore {
8585
public:
86-
static const bool NEEDS_NOISE = false;
86+
OreScatter() : Ore(false) {}
8787

8888
ObjDef *clone() const;
8989

90-
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
91-
v3s16 nmin, v3s16 nmax, biome_t *biomemap);
90+
void generate(MMVManip *vm, int mapseed, u32 blockseed,
91+
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
9292
};
9393

9494
class OreSheet : public Ore {
9595
public:
96-
static const bool NEEDS_NOISE = true;
96+
OreSheet() : Ore(true) {}
9797

9898
ObjDef *clone() const;
9999

100100
u16 column_height_min;
101101
u16 column_height_max;
102102
float column_midpoint_factor;
103103

104-
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
105-
v3s16 nmin, v3s16 nmax, biome_t *biomemap);
104+
void generate(MMVManip *vm, int mapseed, u32 blockseed,
105+
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
106106
};
107107

108108
class OrePuff : public Ore {
109109
public:
110-
static const bool NEEDS_NOISE = true;
111-
112110
ObjDef *clone() const;
113111

114112
NoiseParams np_puff_top;
115113
NoiseParams np_puff_bottom;
116114
Noise *noise_puff_top = nullptr;
117115
Noise *noise_puff_bottom = nullptr;
118116

119-
OrePuff() = default;
117+
OrePuff() : Ore(true) {}
120118
virtual ~OrePuff();
121119

122-
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
123-
v3s16 nmin, v3s16 nmax, biome_t *biomemap);
120+
void generate(MMVManip *vm, int mapseed, u32 blockseed,
121+
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
124122
};
125123

126124
class OreBlob : public Ore {
127125
public:
128-
static const bool NEEDS_NOISE = true;
129-
130126
ObjDef *clone() const;
131127

132-
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
133-
v3s16 nmin, v3s16 nmax, biome_t *biomemap);
128+
OreBlob() : Ore(true) {}
129+
void generate(MMVManip *vm, int mapseed, u32 blockseed,
130+
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
134131
};
135132

136133
class OreVein : public Ore {
137134
public:
138-
static const bool NEEDS_NOISE = true;
139-
140135
ObjDef *clone() const;
141136

142137
float random_factor;
143138
Noise *noise2 = nullptr;
144139
int sizey_prev = 0;
145140

146-
OreVein() = default;
141+
OreVein() : Ore(true) {}
147142
virtual ~OreVein();
148143

149-
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
150-
v3s16 nmin, v3s16 nmax, biome_t *biomemap);
144+
void generate(MMVManip *vm, int mapseed, u32 blockseed,
145+
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
151146
};
152147

153148
class OreStratum : public Ore {
154149
public:
155-
static const bool NEEDS_NOISE = false;
156-
157150
ObjDef *clone() const;
158151

159152
NoiseParams np_stratum_thickness;
160153
Noise *noise_stratum_thickness = nullptr;
161154
u16 stratum_thickness;
162155

163-
OreStratum() = default;
156+
OreStratum() : Ore(false) {}
164157
virtual ~OreStratum();
165158

166-
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
167-
v3s16 nmin, v3s16 nmax, biome_t *biomemap);
159+
void generate(MMVManip *vm, int mapseed, u32 blockseed,
160+
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
168161
};
169162

170163
class OreManager : public ObjDefManager {

‎src/script/lua_api/l_mapgen.cpp

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

0 commit comments

Comments
 (0)
Please sign in to comment.