Don't copy back already generated blocks on map generation

master
kwolekr 2014-07-07 01:51:04 -04:00
parent 8b3ed78e53
commit a2e1b0fc7f
2 changed files with 8 additions and 7 deletions

View File

@ -2312,7 +2312,7 @@ void ServerMap::finishBlockMake(BlockMakeData *data,
{ {
// 70ms @cs=8 // 70ms @cs=8
//TimeTaker timer("finishBlockMake() blitBackAll"); //TimeTaker timer("finishBlockMake() blitBackAll");
data->vmanip->blitBackAll(&changed_blocks); data->vmanip->blitBackAll(&changed_blocks, false);
} }
EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" << changed_blocks.size()); EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" << changed_blocks.size());
@ -3586,7 +3586,8 @@ void ManualMapVoxelManipulator::initialEmerge(v3s16 blockpos_min,
} }
void ManualMapVoxelManipulator::blitBackAll( void ManualMapVoxelManipulator::blitBackAll(
std::map<v3s16, MapBlock*> * modified_blocks) std::map<v3s16, MapBlock*> *modified_blocks,
bool overwrite_generated)
{ {
if(m_area.getExtent() == v3s16(0,0,0)) if(m_area.getExtent() == v3s16(0,0,0))
return; return;
@ -3601,10 +3602,9 @@ 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) || (block == NULL)) if ((existed == false) || (block == NULL) ||
{ (overwrite_generated == false && block->isGenerated() == true))
continue; continue;
}
block->copyFrom(*this); block->copyFrom(*this);

View File

@ -543,10 +543,11 @@ public:
{m_map = map;} {m_map = map;}
void initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max, void initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max,
bool load_if_inexistent = true); bool load_if_inexistent = true);
// This is much faster with big chunks of generated data // This is much faster with big chunks of generated data
void blitBackAll(std::map<v3s16, MapBlock*> * modified_blocks); void blitBackAll(std::map<v3s16, MapBlock*> * modified_blocks,
bool overwrite_generated = true);
protected: protected:
bool m_create_area; bool m_create_area;