Skip to content
Permalink
Browse files

Minor stability improvements in block emerge handling

  • Loading branch information
sapier sapier
sapier authored and sapier committed Jun 14, 2014
1 parent 6c98fd6 commit 9d57413af007ae952f08bf1130ee60da472c1099
Showing with 18 additions and 17 deletions.
  1. +16 −15 src/map.cpp
  2. +2 −2 src/map.h
@@ -2255,7 +2255,7 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos)
//TimeTaker timer("initBlockMake() initialEmerge"); //TimeTaker timer("initBlockMake() initialEmerge");
data->vmanip->initialEmerge(bigarea_blocks_min, bigarea_blocks_max, false); data->vmanip->initialEmerge(bigarea_blocks_min, bigarea_blocks_max, false);
} }

// Ensure none of the blocks to be generated were marked as containing CONTENT_IGNORE // Ensure none of the blocks to be generated were marked as containing CONTENT_IGNORE
/* for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) { /* for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) {
for (s16 y = blockpos_min.Y; y <= blockpos_max.Y; y++) { for (s16 y = blockpos_min.Y; y <= blockpos_max.Y; y++) {
@@ -2275,7 +2275,7 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos)
return true; return true;
} }


MapBlock* ServerMap::finishBlockMake(BlockMakeData *data, void ServerMap::finishBlockMake(BlockMakeData *data,
std::map<v3s16, MapBlock*> &changed_blocks) std::map<v3s16, MapBlock*> &changed_blocks)
{ {
v3s16 blockpos_min = data->blockpos_min; v3s16 blockpos_min = data->blockpos_min;
@@ -2369,7 +2369,9 @@ MapBlock* ServerMap::finishBlockMake(BlockMakeData *data,
y<=blockpos_max.Y+extra_borders.Y; y++) y<=blockpos_max.Y+extra_borders.Y; y++)
{ {
v3s16 p(x, y, z); v3s16 p(x, y, z);
getBlockNoCreateNoEx(p)->setLightingExpired(false); MapBlock * block = getBlockNoCreateNoEx(p);
if (block != NULL)
block->setLightingExpired(false);
} }


#if 0 #if 0
@@ -2385,7 +2387,8 @@ MapBlock* ServerMap::finishBlockMake(BlockMakeData *data,
i != changed_blocks.end(); ++i) i != changed_blocks.end(); ++i)
{ {
MapBlock *block = i->second; MapBlock *block = i->second;
assert(block); if (!block)
continue;
/* /*
Update day/night difference cache of the MapBlocks Update day/night difference cache of the MapBlocks
*/ */
@@ -2406,7 +2409,8 @@ MapBlock* ServerMap::finishBlockMake(BlockMakeData *data,
{ {
v3s16 p(x, y, z); v3s16 p(x, y, z);
MapBlock *block = getBlockNoCreateNoEx(p); MapBlock *block = getBlockNoCreateNoEx(p);
assert(block); if (!block)
continue;
block->setGenerated(true); block->setGenerated(true);
} }


@@ -2419,8 +2423,8 @@ MapBlock* ServerMap::finishBlockMake(BlockMakeData *data,
/*infostream<<"finishBlockMake() done for ("<<blockpos_requested.X /*infostream<<"finishBlockMake() done for ("<<blockpos_requested.X
<<","<<blockpos_requested.Y<<"," <<","<<blockpos_requested.Y<<","
<<blockpos_requested.Z<<")"<<std::endl;*/ <<blockpos_requested.Z<<")"<<std::endl;*/


#if 0 #if 0
if(enable_mapgen_debug_info) if(enable_mapgen_debug_info)
{ {
@@ -2444,10 +2448,7 @@ MapBlock* ServerMap::finishBlockMake(BlockMakeData *data,
} }
#endif #endif


MapBlock *block = getBlockNoCreateNoEx(blockpos_requested); getBlockNoCreateNoEx(blockpos_requested);
assert(block);

return block;
} }


ServerMapSector * ServerMap::createSector(v2s16 p2d) ServerMapSector * ServerMap::createSector(v2s16 p2d)
@@ -3068,7 +3069,7 @@ void ServerMap::loadMapMeta()
break; break;
params.parseConfigLine(line); params.parseConfigLine(line);
} }

m_emerge->loadParamsFromSettings(&params); m_emerge->loadParamsFromSettings(&params);


verbosestream<<"ServerMap::loadMapMeta(): seed=" verbosestream<<"ServerMap::loadMapMeta(): seed="
@@ -3710,7 +3711,7 @@ void ManualMapVoxelManipulator::initialEmerge(v3s16 blockpos_min,


if(block_data_inexistent) if(block_data_inexistent)
{ {

if (load_if_inexistent) { if (load_if_inexistent) {
ServerMap *svrmap = (ServerMap *)m_map; ServerMap *svrmap = (ServerMap *)m_map;
block = svrmap->emergeBlock(p, false); block = svrmap->emergeBlock(p, false);
@@ -3720,7 +3721,7 @@ void ManualMapVoxelManipulator::initialEmerge(v3s16 blockpos_min,
block->copyTo(*this); block->copyTo(*this);
} else { } else {
flags |= VMANIP_BLOCK_DATA_INEXIST; flags |= VMANIP_BLOCK_DATA_INEXIST;

/* /*
Mark area inexistent Mark area inexistent
*/ */
@@ -3760,7 +3761,7 @@ void ManualMapVoxelManipulator::blitBackAll(
v3s16 p = i->first; v3s16 p = i->first;
MapBlock *block = m_map->getBlockNoCreateNoEx(p); MapBlock *block = m_map->getBlockNoCreateNoEx(p);
bool existed = !(i->second & VMANIP_BLOCK_DATA_INEXIST); bool existed = !(i->second & VMANIP_BLOCK_DATA_INEXIST);
if(existed == false) if((existed == false) || (block == NULL))
{ {
continue; continue;
} }
@@ -401,7 +401,7 @@ class ServerMap : public Map
Blocks are generated by using these and makeBlock(). Blocks are generated by using these and makeBlock().
*/ */
bool initBlockMake(BlockMakeData *data, v3s16 blockpos); bool initBlockMake(BlockMakeData *data, v3s16 blockpos);
MapBlock *finishBlockMake(BlockMakeData *data, void finishBlockMake(BlockMakeData *data,
std::map<v3s16, MapBlock*> &changed_blocks); std::map<v3s16, MapBlock*> &changed_blocks);


/* /*
@@ -419,7 +419,7 @@ class ServerMap : public Map
*/ */
MapBlock * emergeBlock(v3s16 p, bool create_blank=true); MapBlock * emergeBlock(v3s16 p, bool create_blank=true);

/* /*
Try to get a block. Try to get a block.
If it does not exist in memory, add it to the emerge queue. If it does not exist in memory, add it to the emerge queue.

0 comments on commit 9d57413

Please sign in to comment.
You can’t perform that action at this time.