summaryrefslogtreecommitdiff
path: root/src/mapgen.cpp
diff options
context:
space:
mode:
authorkwolekr <mirrorisim@gmail.com>2012-12-22 00:34:35 -0500
committerPerttu Ahola <celeron55@gmail.com>2013-01-21 21:41:37 +0200
commitd5029958b9017ad89775bc4f68c4de3db603e618 (patch)
tree757d6e545217c3b0da34d66d00f1e5a99aeb22a2 /src/mapgen.cpp
parentbddd5f2b98a56fc735d5687ecd0b43767aec8066 (diff)
downloadminetest-d5029958b9017ad89775bc4f68c4de3db603e618.tar.gz
minetest-d5029958b9017ad89775bc4f68c4de3db603e618.tar.bz2
minetest-d5029958b9017ad89775bc4f68c4de3db603e618.zip
Readded and optimized mapgen V6
Diffstat (limited to 'src/mapgen.cpp')
-rw-r--r--src/mapgen.cpp48
1 files changed, 16 insertions, 32 deletions
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index f9c27ac1e..a141fc165 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -52,21 +52,21 @@ Mapgen::Mapgen(BiomeDefManager *biomedef) {
}*/
-Mapgen::Mapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed) {
- initMapgen(biomedef, mapgenid, seed,
+MapgenV7::MapgenV7(BiomeDefManager *biomedef, int mapgenid, u64 seed) {
+ init(biomedef, mapgenid, seed,
&nparams_mtdefault, &nparams_def_bgroup,
&nparams_def_heat, &nparams_def_humidity);
}
-Mapgen::Mapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
+MapgenV7::MapgenV7(BiomeDefManager *biomedef, int mapgenid, u64 seed,
NoiseParams *np_terrain, NoiseParams *np_bgroup,
NoiseParams *np_heat, NoiseParams *np_humidity) {
- initMapgen(biomedef, mapgenid, seed,
+ init(biomedef, mapgenid, seed,
np_terrain, np_bgroup, np_heat, np_humidity);
}
-void Mapgen::initMapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
+void MapgenV7::init(BiomeDefManager *biomedef, int mapgenid, u64 seed,
NoiseParams *np_terrain, NoiseParams *np_bgroup,
NoiseParams *np_heat, NoiseParams *np_humidity) {
this->generating = false;
@@ -75,6 +75,7 @@ void Mapgen::initMapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
this->biomedef = biomedef;
this->csize = v3s16(5, 5, 5) * MAP_BLOCKSIZE; /////////////////get this from config!
this->water_level = g_settings->getS16("default_water_level"); ////fix this!
+ this->ystride = csize.X;
this->np_terrain = np_terrain;
this->np_bgroup = np_bgroup;
@@ -92,7 +93,7 @@ void Mapgen::initMapgen(BiomeDefManager *biomedef, int mapgenid, u64 seed,
}
-Mapgen::~Mapgen() {
+MapgenV7::~MapgenV7() {
delete noise_terrain;
delete noise_bgroup;
delete noise_heat;
@@ -100,12 +101,10 @@ Mapgen::~Mapgen() {
}
-void Mapgen::makeChunk(BlockMakeData *data) {
+void MapgenV7::makeChunk(BlockMakeData *data) {
if (data->no_op)
return;
- //printf("generating...\n");//////////////
-
assert(data->vmanip);
assert(data->nodedef);
assert(data->blockpos_requested.X >= data->blockpos_min.X &&
@@ -123,6 +122,9 @@ void Mapgen::makeChunk(BlockMakeData *data) {
this->ystride = em.X;
this->zstride = em.Y * em.X;
+ if (node_max.X - node_min.X != 80)
+ printf("uhoh, diff = %d, ystride = %d\n", node_max.X - node_min.X, ystride);
+
node_min = (data->blockpos_min) * MAP_BLOCKSIZE;
node_max = (data->blockpos_max + v3s16(1, 1, 1)) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
v3s16 full_node_min = (data->blockpos_min - 1) * MAP_BLOCKSIZE;
@@ -132,7 +134,7 @@ void Mapgen::makeChunk(BlockMakeData *data) {
int y2 = node_max.Y;
int x = node_min.X;
int z = node_min.Z;
- //printf("full_node_min.X: %d | full_node_min.Z: %d | MinEdge: %d | MaxEdge: %d\n", node_min.X, node_min.Z, vmanip->m_area.MinEdge.X, vmanip->m_area.MinEdge.Z);
+
TimeTaker timer("Generating terrain");
map_terrain = noise_terrain->perlinMap2D(x, z);
map_bgroup = noise_bgroup->perlinMap2D(x, z);
@@ -161,11 +163,10 @@ void Mapgen::makeChunk(BlockMakeData *data) {
updateLighting(node_min, node_max);
this->generating = false;
- //printf("generated block (%d, %d) to (%d, %d)\n", node_min.X, node_min.Y, node_max.X, node_max.Y);//////////
}
-void Mapgen::updateLiquid(v3s16 node_min, v3s16 node_max) {
+void MapgenV7::updateLiquid(v3s16 node_min, v3s16 node_max) {
bool isliquid, wasliquid;
u32 i;
@@ -190,7 +191,7 @@ void Mapgen::updateLiquid(v3s16 node_min, v3s16 node_max) {
}
-void Mapgen::updateLighting(v3s16 node_min, v3s16 node_max) {
+void MapgenV7::updateLighting(v3s16 node_min, v3s16 node_max) {
enum LightBank banks[2] = {LIGHTBANK_DAY, LIGHTBANK_NIGHT};
VoxelArea a(node_min - v3s16(1,0,1) * MAP_BLOCKSIZE,
@@ -207,30 +208,13 @@ void Mapgen::updateLighting(v3s16 node_min, v3s16 node_max) {
voxalgo::clearLightAndCollectSources(*vmanip, a, bank, ndef,
light_sources, unlight_from);
voxalgo::propagateSunlight(*vmanip, a, sunlight, light_sources, ndef);
- printf("light_sources: %d\t\tunlight_from: %d\n", light_sources.size(), unlight_from.size());
+ //printf("light_sources: %d\t\tunlight_from: %d\n", light_sources.size(), unlight_from.size());
vmanip->unspreadLight(bank, unlight_from, light_sources, ndef);
vmanip->spreadLight(bank, light_sources, ndef);
}
}
-/*class EmergeManager {
-public:
- int seed;
- int water_level;
- BiomeDefManager *biomedef;
-
- //mapgen objects here
-
- void addBlockToQueue();
-
-
- //mapgen helper methods
- int getGroundLevelAtPoint(u64 mseed, v2s16 p);
- bool isBlockUnderground(u64 mseed, v3s16 blockpos);
- u32 getBlockSeed(u64 mseed, v3s16 p);
-};*/
-
EmergeManager::EmergeManager(IGameDef *gamedef) {
this->seed = 0;
this->water_level = 0;
@@ -279,7 +263,7 @@ bool EmergeManager::isBlockUnderground(v3s16 blockpos) {
//yuck, but then again, should i bother being accurate?
//the height of the nodes in a single block is quite variable
- return false; //blockpos.Y * (MAP_BLOCKSIZE + 1) <= water_level;
+ return blockpos.Y * (MAP_BLOCKSIZE + 1) <= water_level;
}