summaryrefslogtreecommitdiff
path: root/src/mapgen.h
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2013-06-15 22:23:06 -0400
committerkwolekr <kwolekr@minetest.net>2013-06-17 03:21:36 -0400
commit0a8519a26fc7c10b4e7415746e9045caa3ae978f (patch)
tree27c3bb64a46f3dfeaa0dbc5443b0efe69e37cf37 /src/mapgen.h
parenteccd1fdbeddce60717f8fcbecded5b36387e3b38 (diff)
downloadminetest-0a8519a26fc7c10b4e7415746e9045caa3ae978f.tar.gz
minetest-0a8519a26fc7c10b4e7415746e9045caa3ae978f.tar.bz2
minetest-0a8519a26fc7c10b4e7415746e9045caa3ae978f.zip
Add initial Decoration support, many misc. improvements & modifications
Diffstat (limited to 'src/mapgen.h')
-rw-r--r--src/mapgen.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/mapgen.h b/src/mapgen.h
index 5d1e3bdf0..e8252cbbf 100644
--- a/src/mapgen.h
+++ b/src/mapgen.h
@@ -86,9 +86,15 @@ public:
int id;
ManualMapVoxelManipulator *vm;
INodeDefManager *ndef;
+ s16 *heightmap;
+ u8 *biomemap;
+ Mapgen();
virtual ~Mapgen() {}
+ s16 findGroundLevelFull(v2s16 p2d);
+ s16 findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax);
+ void updateHeightmap(v3s16 nmin, v3s16 nmax);
void updateLiquid(UniqueQueue<v3s16> *trans_liquid, v3s16 nmin, v3s16 nmax);
void setLighting(v3s16 nmin, v3s16 nmax, u8 light);
void lightSpread(VoxelArea &a, v3s16 p, u8 light);
@@ -166,5 +172,90 @@ class OreSheet : public Ore {
Ore *createOre(OreType type);
+
+enum DecorationType {
+ DECO_SIMPLE,
+ DECO_SCHEMATIC,
+ DECO_LSYSTEM
+};
+
+#if 0
+struct CutoffData {
+ VoxelArea a;
+ Decoration *deco;
+ //v3s16 p;
+ //v3s16 size;
+ //s16 height;
+
+ CutoffData(s16 x, s16 y, s16 z, s16 h) {
+ p = v3s16(x, y, z);
+ height = h;
+ }
+};
+#endif
+
+class Decoration {
+public:
+ int mapseed;
+ std::string place_on_name;
+ content_t c_place_on;
+ s16 divlen;
+ float fill_ratio;
+ NoiseParams *np;
+
+ std::set<u8> biomes;
+ //std::list<CutoffData> cutoffs;
+ //JMutex cutoff_mutex;
+
+ virtual ~Decoration();
+
+ virtual void resolveNodeNames(INodeDefManager *ndef);
+ void placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+ void placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+
+ virtual void generate(Mapgen *mg, PseudoRandom *pr, s16 max_y,
+ s16 start_y, v3s16 p) = 0;
+ virtual int getHeight() = 0;
+ virtual std::string getName() = 0;
+};
+
+class DecoSimple : public Decoration {
+public:
+ std::string deco_name;
+ std::string spawnby_name;
+ content_t c_deco;
+ content_t c_spawnby;
+ s16 deco_height;
+ s16 deco_height_max;
+ s16 nspawnby;
+
+ std::vector<std::string> decolist_names;
+ std::vector<content_t> c_decolist;
+
+ ~DecoSimple() {}
+
+ void resolveNodeNames(INodeDefManager *ndef);
+ virtual void generate(Mapgen *mg, PseudoRandom *pr, s16 max_y,
+ s16 start_y, v3s16 p);
+ virtual int getHeight();
+ virtual std::string getName();
+};
+
+/*
+class DecoSchematic : public Decoration {
+public:
+ virtual void generate(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+};
+*/
+
+/*
+class DecoLSystem : public Decoration {
+public:
+ virtual void generate(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+};
+*/
+
+Decoration *createDecoration(DecorationType type);
+
#endif