Minetest 5.10.0-dev
 
Loading...
Searching...
No Matches
mg_ore.h
Go to the documentation of this file.
1/*
2Minetest
3Copyright (C) 2015-2020 paramat
4Copyright (C) 2014-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU Lesser General Public License as published by
8the Free Software Foundation; either version 2.1 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU Lesser General Public License for more details.
15
16You should have received a copy of the GNU Lesser General Public License along
17with this program; if not, write to the Free Software Foundation, Inc.,
1851 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/
20
21#pragma once
22
23#include <unordered_set>
24#include "objdef.h"
25#include "noise.h"
26#include "nodedef.h"
27
28typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include
29
30class Noise;
31class Mapgen;
32class MMVManip;
33
35
36#define OREFLAG_ABSHEIGHT 0x01 // Non-functional but kept to not break flags
37#define OREFLAG_PUFF_CLIFFS 0x02
38#define OREFLAG_PUFF_ADDITIVE 0x04
39#define OREFLAG_USE_NOISE 0x08
40#define OREFLAG_USE_NOISE2 0x10
41
50
51extern FlagDesc flagdesc_ore[];
52
53class Ore : public ObjDef, public NodeResolver {
54public:
55 const bool needs_noise;
56
57 content_t c_ore; // the node to place
58 std::vector<content_t> c_wherein; // the nodes to be placed in
59 u32 clust_scarcity; // ore cluster has a 1-in-clust_scarcity chance of appearing at a node
60 s16 clust_num_ores; // how many ore nodes are in a chunk
61 s16 clust_size; // how large (in nodes) a chunk of ore is
62 s16 y_min;
63 s16 y_max;
64 u8 ore_param2; // to set node-specific attributes
65 u32 flags = 0; // attributes for this ore
66 float nthresh; // threshold for noise at which an ore is placed
67 NoiseParams np; // noise for distribution of clusters (NULL for uniform scattering)
68 Noise *noise = nullptr;
69 std::unordered_set<biome_t> biomes;
70
72 virtual ~Ore();
73
74 virtual void resolveNodeNames();
75
76 size_t placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
77 virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
78 v3s16 nmin, v3s16 nmax, biome_t *biomemap) = 0;
79
80protected:
81 void cloneTo(Ore *def) const;
82};
83
84class OreScatter : public Ore {
85public:
86 OreScatter() : Ore(false) {}
87
88 ObjDef *clone() const override;
89
90 void generate(MMVManip *vm, int mapseed, u32 blockseed,
91 v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
92};
93
94class OreSheet : public Ore {
95public:
96 OreSheet() : Ore(true) {}
97
98 ObjDef *clone() const override;
99
103
104 void generate(MMVManip *vm, int mapseed, u32 blockseed,
105 v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
106};
107
108class OrePuff : public Ore {
109public:
110 ObjDef *clone() const override;
111
116
117 OrePuff() : Ore(true) {}
118 virtual ~OrePuff();
119
120 void generate(MMVManip *vm, int mapseed, u32 blockseed,
121 v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
122};
123
124class OreBlob : public Ore {
125public:
126 ObjDef *clone() const override;
127
128 OreBlob() : Ore(true) {}
129 void generate(MMVManip *vm, int mapseed, u32 blockseed,
130 v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
131};
132
133class OreVein : public Ore {
134public:
135 ObjDef *clone() const override;
136
138 Noise *noise2 = nullptr;
139 int sizey_prev = 0;
140
141 OreVein() : Ore(true) {}
142 virtual ~OreVein();
143
144 void generate(MMVManip *vm, int mapseed, u32 blockseed,
145 v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
146};
147
148class OreStratum : public Ore {
149public:
150 ObjDef *clone() const override;
151
155
156 OreStratum() : Ore(false) {}
157 virtual ~OreStratum();
158
159 void generate(MMVManip *vm, int mapseed, u32 blockseed,
160 v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
161};
162
163class OreManager : public ObjDefManager {
164public:
165 OreManager(IGameDef *gamedef);
166 virtual ~OreManager() = default;
167
168 OreManager *clone() const;
169
170 const char *getObjectTitle() const
171 {
172 return "ore";
173 }
174
175 static Ore *create(OreType type)
176 {
177 switch (type) {
178 case ORE_SCATTER:
179 return new OreScatter;
180 case ORE_SHEET:
181 return new OreSheet;
182 case ORE_PUFF:
183 return new OrePuff;
184 case ORE_BLOB:
185 return new OreBlob;
186 case ORE_VEIN:
187 return new OreVein;
188 case ORE_STRATUM:
189 return new OreStratum;
190 default:
191 return nullptr;
192 }
193 }
194
195 void clear();
196
197 size_t placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
198
199private:
201};
u16 biome_t
Definition cavegen.h:25
Definition gamedef.h:51
Definition map.h:320
Definition mapgen.h:168
Definition nodedef.h:853
Definition noise.h:146
Definition objdef.h:70
Definition objdef.h:44
Definition mg_ore.h:124
void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap) override
Definition mg_ore.cpp:368
OreBlob()
Definition mg_ore.h:128
ObjDef * clone() const override
Definition mg_ore.cpp:360
Definition mg_ore.h:163
virtual ~OreManager()=default
OreManager()
Definition mg_ore.h:200
OreManager * clone() const
Definition mg_ore.cpp:75
size_t placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
Definition mg_ore.cpp:48
static Ore * create(OreType type)
Definition mg_ore.h:175
const char * getObjectTitle() const
Definition mg_ore.h:170
void clear()
Definition mg_ore.cpp:65
Definition mg_ore.h:108
virtual ~OrePuff()
Definition mg_ore.cpp:266
Noise * noise_puff_bottom
Definition mg_ore.h:115
NoiseParams np_puff_bottom
Definition mg_ore.h:113
ObjDef * clone() const override
Definition mg_ore.cpp:273
NoiseParams np_puff_top
Definition mg_ore.h:112
Noise * noise_puff_top
Definition mg_ore.h:114
void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap) override
Definition mg_ore.cpp:287
OrePuff()
Definition mg_ore.h:117
Definition mg_ore.h:84
void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap) override
Definition mg_ore.cpp:148
OreScatter()
Definition mg_ore.h:86
ObjDef * clone() const override
Definition mg_ore.cpp:140
Definition mg_ore.h:94
OreSheet()
Definition mg_ore.h:96
ObjDef * clone() const override
Definition mg_ore.cpp:197
u16 column_height_min
Definition mg_ore.h:100
u16 column_height_max
Definition mg_ore.h:101
float column_midpoint_factor
Definition mg_ore.h:102
void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap) override
Definition mg_ore.cpp:210
Definition mg_ore.h:148
virtual ~OreStratum()
Definition mg_ore.cpp:519
void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap) override
Definition mg_ore.cpp:538
ObjDef * clone() const override
Definition mg_ore.cpp:525
Noise * noise_stratum_thickness
Definition mg_ore.h:153
u16 stratum_thickness
Definition mg_ore.h:154
NoiseParams np_stratum_thickness
Definition mg_ore.h:152
OreStratum()
Definition mg_ore.h:156
Definition mg_ore.h:133
void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap) override
Definition mg_ore.cpp:453
ObjDef * clone() const override
Definition mg_ore.cpp:440
int sizey_prev
Definition mg_ore.h:139
virtual ~OreVein()
Definition mg_ore.cpp:434
float random_factor
Definition mg_ore.h:137
OreVein()
Definition mg_ore.h:141
Noise * noise2
Definition mg_ore.h:138
Definition mg_ore.h:53
s16 y_max
Definition mg_ore.h:63
Ore(bool needs_noise)
Definition mg_ore.h:71
virtual ~Ore()
Definition mg_ore.cpp:86
std::vector< content_t > c_wherein
Definition mg_ore.h:58
s16 clust_size
Definition mg_ore.h:61
const bool needs_noise
Definition mg_ore.h:55
u32 flags
Definition mg_ore.h:65
void cloneTo(Ore *def) const
Definition mg_ore.cpp:117
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, biome_t *biomemap)=0
float nthresh
Definition mg_ore.h:66
NoiseParams np
Definition mg_ore.h:67
std::unordered_set< biome_t > biomes
Definition mg_ore.h:69
u8 ore_param2
Definition mg_ore.h:64
u32 clust_scarcity
Definition mg_ore.h:59
Noise * noise
Definition mg_ore.h:68
s16 clust_num_ores
Definition mg_ore.h:60
virtual void resolveNodeNames()
Definition mg_ore.cpp:92
s16 y_min
Definition mg_ore.h:62
size_t placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
Definition mg_ore.cpp:99
content_t c_ore
Definition mg_ore.h:57
core::vector3d< s16 > v3s16
Definition irr_v3d.h:28
u16 content_t
Definition mapnode.h:37
OreType
Definition mg_ore.h:42
@ ORE_SCATTER
Definition mg_ore.h:43
@ ORE_VEIN
Definition mg_ore.h:47
@ ORE_SHEET
Definition mg_ore.h:44
@ ORE_BLOB
Definition mg_ore.h:46
@ ORE_STRATUM
Definition mg_ore.h:48
@ ORE_PUFF
Definition mg_ore.h:45
u16 biome_t
Definition mg_ore.h:28
FlagDesc flagdesc_ore[]
Definition mg_ore.cpp:31
Definition string.h:80
Definition noise.h:119