From 4f01db256f7ee4ece5515c417919fb975dab0dca Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Fri, 3 Feb 2012 02:23:21 +0200 Subject: Re-implement and re-tune mapgen v2 --- src/map.cpp | 59 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 19 deletions(-) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index 217bdfcc7..835aca4fb 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2074,17 +2074,24 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos) <<"("<no_op = true; return; @@ -2103,15 +2110,18 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos) { //TimeTaker timer("initBlockMake() create area"); - for(s16 x=blockpos_min.X-1; x<=blockpos_max.X+1; x++) - for(s16 z=blockpos_min.Z-1; z<=blockpos_max.Z+1; z++) + for(s16 x=blockpos_min.X-extra_borders.X; + x<=blockpos_max.X+extra_borders.X; x++) + for(s16 z=blockpos_min.Z-extra_borders.Z; + z<=blockpos_max.Z+extra_borders.Z; z++) { v2s16 sectorpos(x, z); // Sector metadata is loaded from disk if not already loaded. ServerMapSector *sector = createSector(sectorpos); assert(sector); - for(s16 y=blockpos_min.Y-1; y<=blockpos_max.Y+1; y++) + for(s16 y=blockpos_min.Y-extra_borders.Y; + y<=blockpos_max.Y+extra_borders.Y; y++) { v3s16 p(x,y,z); //MapBlock *block = createBlock(p); @@ -2147,8 +2157,8 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos) */ // The area that contains this block and it's neighbors - v3s16 bigarea_blocks_min = blockpos_min - v3s16(1,1,1); - v3s16 bigarea_blocks_max = blockpos_max + v3s16(1,1,1); + v3s16 bigarea_blocks_min = blockpos_min - extra_borders; + v3s16 bigarea_blocks_max = blockpos_max + extra_borders; data->vmanip = new ManualMapVoxelManipulator(this); //data->vmanip->setMap(this); @@ -2172,6 +2182,8 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, <no_op) { //infostream<<"finishBlockMake(): no-op"<vmanip.print(infostream);*/ // Make sure affected blocks are loaded - for(s16 x=blockpos_min.X-1; x<=blockpos_max.X+1; x++) - for(s16 z=blockpos_min.Z-1; z<=blockpos_max.Z+1; z++) - for(s16 y=blockpos_min.Y-1; y<=blockpos_max.Y+1; y++) + for(s16 x=blockpos_min.X-extra_borders.X; + x<=blockpos_max.X+extra_borders.X; x++) + for(s16 z=blockpos_min.Z-extra_borders.Z; + z<=blockpos_max.Z+extra_borders.Z; z++) + for(s16 y=blockpos_min.Y-extra_borders.Y; + y<=blockpos_max.Y+extra_borders.Y; y++) { v3s16 p(x, y, z); // Load from disk if not already in memory @@ -2230,9 +2245,12 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, core::map lighting_update_blocks; // Center blocks - for(s16 x=blockpos_min.X; x<=blockpos_max.X; x++) - for(s16 z=blockpos_min.Z; z<=blockpos_max.Z; z++) - for(s16 y=blockpos_min.Y; y<=blockpos_max.Y; y++) + for(s16 x=blockpos_min.X-extra_borders.X; + x<=blockpos_max.X+extra_borders.X; x++) + for(s16 z=blockpos_min.Z-extra_borders.Z; + z<=blockpos_max.Z+extra_borders.Z; z++) + for(s16 y=blockpos_min.Y-extra_borders.Y; + y<=blockpos_max.Y+extra_borders.Y; y++) { v3s16 p(x, y, z); MapBlock *block = getBlockNoCreateNoEx(p); @@ -2248,9 +2266,12 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, This is cheating, but it is not fast enough if all of them would actually be updated. */ - for(s16 x=blockpos_min.X-1; x<=blockpos_max.X+1; x++) - for(s16 z=blockpos_min.Z-1; z<=blockpos_max.Z+1; z++) - for(s16 y=blockpos_min.Y-1; y<=blockpos_max.Y+1; y++) + for(s16 x=blockpos_min.X-extra_borders.X; + x<=blockpos_max.X+extra_borders.X; x++) + for(s16 z=blockpos_min.Z-extra_borders.Z; + z<=blockpos_max.Z+extra_borders.Z; z++) + for(s16 y=blockpos_min.Y-extra_borders.Y; + y<=blockpos_max.Y+extra_borders.Y; y++) { v3s16 p(x, y, z); getBlockNoCreateNoEx(p)->setLightingExpired(false); -- cgit v1.2.3