summaryrefslogtreecommitdiff
path: root/src/mapgen.h
diff options
context:
space:
mode:
authorkwolekr <mirrorisim@gmail.com>2012-11-25 21:16:48 -0500
committerPerttu Ahola <celeron55@gmail.com>2013-01-21 21:41:33 +0200
commit11afcbff69c95915e5142bc4b55636ff6358ece9 (patch)
tree1e6a3242e83443b665d9b781c84abad4e662f83d /src/mapgen.h
parent736b386554a6b385a34f40c0411c6e466ebec30a (diff)
downloadminetest-11afcbff69c95915e5142bc4b55636ff6358ece9.tar.gz
minetest-11afcbff69c95915e5142bc4b55636ff6358ece9.tar.bz2
minetest-11afcbff69c95915e5142bc4b55636ff6358ece9.zip
The new mapgen, noise functions, et al.
Diffstat (limited to 'src/mapgen.h')
-rw-r--r--src/mapgen.h120
1 files changed, 114 insertions, 6 deletions
diff --git a/src/mapgen.h b/src/mapgen.h
index 8986ddab0..d6e932ca0 100644
--- a/src/mapgen.h
+++ b/src/mapgen.h
@@ -22,12 +22,121 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_extrabloated.h"
#include "util/container.h" // UniqueQueue
+#include "gamedef.h"
+#include "mapnode.h"
+#include "noise.h"
-struct BlockMakeData;
+class BiomeDefManager;
+class Biome;
+
+//struct BlockMakeData;
class MapBlock;
class ManualMapVoxelManipulator;
class INodeDefManager;
+struct BlockMakeData {
+ bool no_op;
+ ManualMapVoxelManipulator *vmanip;
+ u64 seed;
+ v3s16 blockpos_min;
+ v3s16 blockpos_max;
+ v3s16 blockpos_requested;
+ UniqueQueue<v3s16> transforming_liquid;
+ INodeDefManager *nodedef;
+
+ BlockMakeData();
+ ~BlockMakeData();
+};
+
+class Mapgen {
+public:
+ BlockMakeData *data;
+ ManualMapVoxelManipulator *vmanip;
+ INodeDefManager *ndef;
+ BiomeDefManager *biomedef;
+
+ int ystride;
+ int zstride;
+
+ v3s16 csize;
+ int seed;
+ int water_level;
+
+ Noise *noise_terrain;
+ Noise *noise_bgroup;
+ Noise *noise_heat;
+ Noise *noise_humidity;
+
+ v3s16 node_min;
+ v3s16 node_max;
+
+ float *map_terrain;
+ float *map_bgroup;
+ float *map_heat;
+ float *map_humidity;
+
+ bool generating;
+ int id;
+
+ NoiseParams *np_terrain;
+ NoiseParams *np_bgroup;
+ NoiseParams *np_heat;
+ NoiseParams *np_humidity;
+
+ //should these be broken off into a "commonly used nodes" class?
+ MapNode n_air;
+ MapNode n_water;
+ MapNode n_lava;
+
+ Mapgen(BiomeDefManager *biomedef, int mapgenid=0, u64 seed=0);
+ Mapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
+ NoiseParams *np_terrain, NoiseParams *np_bgroup,
+ NoiseParams *np_heat, NoiseParams *np_humidity);
+ void initMapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
+ NoiseParams *np_terrain, NoiseParams *np_bgroup,
+ NoiseParams *np_heat, NoiseParams *np_humidity);
+ ~Mapgen();
+
+ void makeChunk(BlockMakeData *data);
+ void updateLiquid(v3s16 node_min, v3s16 node_max);
+ void updateLighting(v3s16 node_min, v3s16 node_max);
+
+ //Legacy functions for Farmesh (pending removal)
+ static bool get_have_beach(u64 seed, v2s16 p2d);
+ static double tree_amount_2d(u64 seed, v2s16 p);
+ static s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
+};
+
+class EmergeManager {
+public:
+ //settings
+ u64 seed;
+ int water_level;
+ NoiseParams *np_terrain;
+ NoiseParams *np_bgroup;
+ NoiseParams *np_heat;
+ NoiseParams *np_humidity;
+
+ //biome manager
+ BiomeDefManager *biomedef;
+
+ //mapgen objects here
+
+ EmergeManager(IGameDef *gamedef);
+ ~EmergeManager();
+ void addBlockToQueue();
+
+
+
+ //mapgen helper methods
+ Biome *getBiomeAtPoint(v3s16 p);
+ int getGroundLevelAtPoint(v2s16 p);
+ bool isBlockUnderground(v3s16 blockpos);
+ u32 getBlockSeed(v3s16 p);
+};
+
+
+/*
namespace mapgen
{
// Finds precise ground level at any position
@@ -41,10 +150,9 @@ namespace mapgen
// Main map generation routine
void make_block(BlockMakeData *data);
-
- /*
- These are used by FarMesh
- */
+
+
+ //These are used by FarMesh
bool get_have_beach(u64 seed, v2s16 p2d);
double tree_amount_2d(u64 seed, v2s16 p);
@@ -64,6 +172,6 @@ namespace mapgen
};
}; // namespace mapgen
-
+*/
#endif