merged fix to decapitated trees; other bugs now exists
commit
112b85d0fb
|
@ -6,9 +6,9 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: minetest\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-07-22 11:02+0200\n"
|
"POT-Creation-Date: 2011-07-24 11:32+0300\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
|
76
src/map.cpp
76
src/map.cpp
|
@ -2012,8 +2012,8 @@ ServerMap::~ServerMap()
|
||||||
|
|
||||||
void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos)
|
void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos)
|
||||||
{
|
{
|
||||||
/*dstream<<"initBlockMake(): ("<<blockpos.X<<","<<blockpos.Y<<","
|
dstream<<"initBlockMake(): ("<<blockpos.X<<","<<blockpos.Y<<","
|
||||||
<<blockpos.Z<<")"<<std::endl;*/
|
<<blockpos.Z<<")"<<std::endl;
|
||||||
|
|
||||||
// Do nothing if not inside limits (+-1 because of neighbors)
|
// Do nothing if not inside limits (+-1 because of neighbors)
|
||||||
if(blockpos_over_limit(blockpos - v3s16(1,1,1)) ||
|
if(blockpos_over_limit(blockpos - v3s16(1,1,1)) ||
|
||||||
|
@ -2043,25 +2043,28 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos)
|
||||||
|
|
||||||
for(s16 y=-1; y<=1; y++)
|
for(s16 y=-1; y<=1; y++)
|
||||||
{
|
{
|
||||||
//MapBlock *block = createBlock(blockpos);
|
v3s16 p(blockpos.X+x, blockpos.Y+y, blockpos.Z+z);
|
||||||
|
//MapBlock *block = createBlock(p);
|
||||||
// 1) get from memory, 2) load from disk
|
// 1) get from memory, 2) load from disk
|
||||||
MapBlock *block = emergeBlock(blockpos, false);
|
MapBlock *block = emergeBlock(p, false);
|
||||||
// 3) create a blank one
|
// 3) create a blank one
|
||||||
if(block == NULL)
|
if(block == NULL)
|
||||||
block = createBlock(blockpos);
|
{
|
||||||
|
block = createBlock(p);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Block gets sunlight if this is true.
|
||||||
|
|
||||||
|
Refer to the map generator heuristics.
|
||||||
|
*/
|
||||||
|
bool ug = mapgen::block_is_underground(data->seed, p);
|
||||||
|
block->setIsUnderground(ug);
|
||||||
|
}
|
||||||
|
|
||||||
// Lighting will not be valid after make_chunk is called
|
// Lighting will not be valid after make_chunk is called
|
||||||
block->setLightingExpired(true);
|
block->setLightingExpired(true);
|
||||||
// Lighting will be calculated
|
// Lighting will be calculated
|
||||||
//block->setLightingExpired(false);
|
//block->setLightingExpired(false);
|
||||||
|
|
||||||
/*
|
|
||||||
Block gets sunlight if this is true.
|
|
||||||
|
|
||||||
This should be set to true when the top side of a block
|
|
||||||
is completely exposed to the sky.
|
|
||||||
*/
|
|
||||||
block->setIsUnderground(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2137,10 +2140,14 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data,
|
||||||
assert(block);
|
assert(block);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Set is_underground flag for lighting with sunlight
|
Set is_underground flag for lighting with sunlight.
|
||||||
*/
|
|
||||||
|
Refer to map generator heuristics.
|
||||||
|
|
||||||
|
NOTE: This is done in initChunkMake
|
||||||
|
*/
|
||||||
|
//block->setIsUnderground(mapgen::block_is_underground(data->seed, blockpos));
|
||||||
|
|
||||||
block->setIsUnderground(mapgen::block_is_underground(data->seed, blockpos));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Add sunlight to central block.
|
Add sunlight to central block.
|
||||||
|
@ -2171,6 +2178,13 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data,
|
||||||
#if 1
|
#if 1
|
||||||
// Center block
|
// Center block
|
||||||
lighting_update_blocks.insert(block->getPos(), block);
|
lighting_update_blocks.insert(block->getPos(), block);
|
||||||
|
|
||||||
|
/*{
|
||||||
|
s16 x = 0;
|
||||||
|
s16 z = 0;
|
||||||
|
v3s16 p = block->getPos()+v3s16(x,1,z);
|
||||||
|
lighting_update_blocks[p] = getBlockNoCreateNoEx(p);
|
||||||
|
}*/
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
// All modified blocks
|
// All modified blocks
|
||||||
|
@ -2187,8 +2201,28 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data,
|
||||||
lighting_update_blocks.insert(i.getNode()->getKey(),
|
lighting_update_blocks.insert(i.getNode()->getKey(),
|
||||||
i.getNode()->getValue());
|
i.getNode()->getValue());
|
||||||
}
|
}
|
||||||
|
/*// Also force-add all the upmost blocks for proper sunlight
|
||||||
|
for(s16 x=-1; x<=1; x++)
|
||||||
|
for(s16 z=-1; z<=1; z++)
|
||||||
|
{
|
||||||
|
v3s16 p = block->getPos()+v3s16(x,1,z);
|
||||||
|
lighting_update_blocks[p] = getBlockNoCreateNoEx(p);
|
||||||
|
}*/
|
||||||
#endif
|
#endif
|
||||||
updateLighting(lighting_update_blocks, changed_blocks);
|
updateLighting(lighting_update_blocks, changed_blocks);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Set lighting to non-expired state in all of them.
|
||||||
|
This is cheating, but it is not fast enough if all of them
|
||||||
|
would actually be updated.
|
||||||
|
*/
|
||||||
|
for(s16 x=-1; x<=1; x++)
|
||||||
|
for(s16 y=-1; y<=1; y++)
|
||||||
|
for(s16 z=-1; z<=1; z++)
|
||||||
|
{
|
||||||
|
v3s16 p = block->getPos()+v3s16(x,y,z);
|
||||||
|
getBlockNoCreateNoEx(p)->setLightingExpired(false);
|
||||||
|
}
|
||||||
|
|
||||||
if(enable_mapgen_debug_info == false)
|
if(enable_mapgen_debug_info == false)
|
||||||
t.stop(true); // Hide output
|
t.stop(true); // Hide output
|
||||||
|
@ -2479,7 +2513,7 @@ MapBlock * ServerMap::emergeBlock(v3s16 p, bool allow_generate)
|
||||||
|
|
||||||
{
|
{
|
||||||
MapBlock *block = getBlockNoCreateNoEx(p);
|
MapBlock *block = getBlockNoCreateNoEx(p);
|
||||||
if(block)
|
if(block && block->isDummy() == false)
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4081,10 +4115,16 @@ void ManualMapVoxelManipulator::blitBackAll(
|
||||||
i = m_loaded_blocks.getIterator();
|
i = m_loaded_blocks.getIterator();
|
||||||
i.atEnd() == false; i++)
|
i.atEnd() == false; i++)
|
||||||
{
|
{
|
||||||
|
v3s16 p = i.getNode()->getKey();
|
||||||
bool existed = i.getNode()->getValue();
|
bool existed = i.getNode()->getValue();
|
||||||
if(existed == false)
|
if(existed == false)
|
||||||
|
{
|
||||||
|
// The Great Bug was found using this
|
||||||
|
/*dstream<<"ManualMapVoxelManipulator::blitBackAll: "
|
||||||
|
<<"Inexistent ("<<p.X<<","<<p.Y<<","<<p.Z<<")"
|
||||||
|
<<std::endl;*/
|
||||||
continue;
|
continue;
|
||||||
v3s16 p = i.getNode()->getKey();
|
}
|
||||||
MapBlock *block = m_map->getBlockNoCreateNoEx(p);
|
MapBlock *block = m_map->getBlockNoCreateNoEx(p);
|
||||||
if(block == NULL)
|
if(block == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -242,7 +242,12 @@ bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources,
|
||||||
// Check if node above block has sunlight
|
// Check if node above block has sunlight
|
||||||
try{
|
try{
|
||||||
MapNode n = getNodeParent(v3s16(x, MAP_BLOCKSIZE, z));
|
MapNode n = getNodeParent(v3s16(x, MAP_BLOCKSIZE, z));
|
||||||
if(n.getContent() == CONTENT_IGNORE || n.getLight(LIGHTBANK_DAY) != LIGHT_SUN)
|
if(n.getContent() == CONTENT_IGNORE)
|
||||||
|
{
|
||||||
|
// Trust heuristics
|
||||||
|
no_sunlight = is_underground;
|
||||||
|
}
|
||||||
|
else if(n.getLight(LIGHTBANK_DAY) != LIGHT_SUN)
|
||||||
{
|
{
|
||||||
no_sunlight = true;
|
no_sunlight = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue