clean out some cruft

This commit is contained in:
darkrose 2015-05-01 21:42:34 +10:00
parent 9b47c8af4c
commit 0909bd9e47
5 changed files with 91 additions and 219 deletions

View File

@ -340,7 +340,7 @@ void Map::unspreadLight(enum LightBank bank,
/* /*
And the neighbor is transparent and it has some light And the neighbor is transparent and it has some light
*/ */
if (n2.light_propagates() && n2.getLight(bank) != 0) { if (content_features(n2).light_propagates && n2.getLight(bank) != 0) {
/* /*
Set light to 0 and add to queue Set light to 0 and add to queue
*/ */
@ -516,7 +516,7 @@ void Map::spreadLight(enum LightBank bank,
would spread on it, add to list would spread on it, add to list
*/ */
if (n2.getLight(bank) < newlight) { if (n2.getLight(bank) < newlight) {
if (n2.light_propagates()) { if (content_features(n2).light_propagates) {
n2.setLight(bank, newlight); n2.setLight(bank, newlight);
block->setNode(relpos, n2); block->setNode(relpos, n2);
lighted_nodes.insert(n2pos, true); lighted_nodes.insert(n2pos, true);
@ -621,15 +621,14 @@ s16 Map::propagateSunlight(v3s16 start,
if (!is_valid_position) if (!is_valid_position)
continue; continue;
if (n.sunlight_propagates()) { // Sunlight goes no further
n.setLight(LIGHTBANK_DAY, LIGHT_SUN); if (!content_features(n).sunlight_propagates)
block->setNode(relpos, n);
modified_blocks.insert(blockpos, block);
}else{
// Sunlight goes no further
break; break;
}
n.setLight(LIGHTBANK_DAY, LIGHT_SUN);
block->setNode(relpos, n);
modified_blocks.insert(blockpos, block);
} }
return y + 1; return y + 1;
} }

View File

@ -217,21 +217,18 @@ bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources,
v3s16 pos_relative = getPosRelative(); v3s16 pos_relative = getPosRelative();
for(s16 x=0; x<MAP_BLOCKSIZE; x++) for (s16 x=0; x<MAP_BLOCKSIZE; x++) {
{ for (s16 z=0; z<MAP_BLOCKSIZE; z++) {
for(s16 z=0; z<MAP_BLOCKSIZE; z++)
{
#if 1
bool no_sunlight = false; bool no_sunlight = false;
//bool no_top_block = false; //bool no_top_block = false;
// Check if node above block has sunlight // Check if node above block has sunlight
bool is_valid_position; bool is_valid_position;
MapNode n = getNodeParent(v3s16(x, MAP_BLOCKSIZE, z), &is_valid_position); MapNode np = getNodeParent(v3s16(x, MAP_BLOCKSIZE, z), &is_valid_position);
if (is_valid_position) { if (is_valid_position) {
if (n.getContent() == CONTENT_IGNORE) { if (np.getContent() == CONTENT_IGNORE) {
// Trust heuristics // Trust heuristics
no_sunlight = is_underground; no_sunlight = is_underground;
}else if (n.getLight(LIGHTBANK_DAY) != LIGHT_SUN) { }else if (np.getLight(LIGHTBANK_DAY) != LIGHT_SUN) {
no_sunlight = true; no_sunlight = true;
} }
}else{ }else{
@ -251,29 +248,6 @@ bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources,
// No sunlight here // No sunlight here
//no_sunlight = true; //no_sunlight = true;
} }
#endif
#if 0 // Doesn't work; nothing gets light.
bool no_sunlight = true;
bool no_top_block = false;
// Check if node above block has sunlight
try{
MapNode n = getNodeParent(v3s16(x, MAP_BLOCKSIZE, z));
if(n.getLight(LIGHTBANK_DAY) == LIGHT_SUN)
{
no_sunlight = false;
}
}
catch(InvalidPositionException &e)
{
no_top_block = true;
}
#endif
/*std::cout<<"("<<x<<","<<z<<"): "
<<"no_top_block="<<no_top_block
<<", is_underground="<<is_underground
<<", no_sunlight="<<no_sunlight
<<std::endl;*/
s16 y = MAP_BLOCKSIZE-1; s16 y = MAP_BLOCKSIZE-1;
@ -282,72 +256,34 @@ bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources,
u8 current_light = no_sunlight ? 0 : LIGHT_SUN; u8 current_light = no_sunlight ? 0 : LIGHT_SUN;
for(; y >= 0; y--) for (; y >= 0; y--) {
{
v3s16 pos(x, y, z); v3s16 pos(x, y, z);
MapNode &n = getNodeRef(pos); MapNode &n = getNodeRef(pos);
ContentFeatures &f = content_features(n);
if(current_light == 0) if (current_light != 0) {
{ if ((current_light != LIGHT_SUN || !f.sunlight_propagates) && !f.light_propagates) {
// Do nothing // A solid object is on the way.
} stopped_to_solid_object = true;
else if(current_light == LIGHT_SUN && n.sunlight_propagates())
{
// Do nothing: Sunlight is continued
}
else if(n.light_propagates() == false)
{
/*// DEPRECATED TODO: REMOVE
if(grow_grass)
{
bool upper_is_air = false;
try
{
if(getNodeParent(pos+v3s16(0,1,0)).getContent() == CONTENT_AIR)
upper_is_air = true;
}
catch(InvalidPositionException &e)
{
}
// Turn mud into grass
if(upper_is_air && n.getContent() == CONTENT_MUD
&& current_light == LIGHT_SUN)
{
n.d = CONTENT_GRASS;
}
}*/
// A solid object is on the way. // Light stops.
stopped_to_solid_object = true; current_light = 0;
}else{
// Light stops. // Diminish light
current_light = 0; current_light = diminish_light(current_light);
} }
else
{
// Diminish light
current_light = diminish_light(current_light);
} }
u8 old_light = n.getLight(LIGHTBANK_DAY); u8 old_light = n.getLight(LIGHTBANK_DAY);
if(current_light > old_light || remove_light) if (current_light > old_light || remove_light)
{
n.setLight(LIGHTBANK_DAY, current_light); n.setLight(LIGHTBANK_DAY, current_light);
}
if(diminish_light(current_light) != 0) if (diminish_light(current_light) != 0)
{
light_sources.insert(pos_relative + pos, true); light_sources.insert(pos_relative + pos, true);
}
if(current_light == 0 && stopped_to_solid_object) if (current_light == 0 && stopped_to_solid_object && black_air_left)
{ *black_air_left = true;
if(black_air_left)
{
*black_air_left = true;
}
}
} }
// Whether or not the block below should see LIGHT_SUN // Whether or not the block below should see LIGHT_SUN
@ -361,26 +297,24 @@ bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources,
Ignore non-transparent nodes as they always have no light Ignore non-transparent nodes as they always have no light
*/ */
try try {
{ if (block_below_is_valid) {
if(block_below_is_valid) MapNode n = getNodeParent(v3s16(x, -1, z));
{ if (content_features(n).light_propagates) {
MapNode n = getNodeParent(v3s16(x, -1, z)); if (
if(n.light_propagates()) n.getLight(LIGHTBANK_DAY) == LIGHT_SUN
{ && sunlight_should_go_down == false
if(n.getLight(LIGHTBANK_DAY) == LIGHT_SUN ) {
&& sunlight_should_go_down == false) block_below_is_valid = false;
block_below_is_valid = false; }else if (
else if(n.getLight(LIGHTBANK_DAY) != LIGHT_SUN n.getLight(LIGHTBANK_DAY) != LIGHT_SUN
&& sunlight_should_go_down == true) && sunlight_should_go_down == true
block_below_is_valid = false; ) {
block_below_is_valid = false;
}
}
} }
}//if }catch(InvalidPositionException &e) {
}//try
catch(InvalidPositionException &e)
{
/*std::cout<<"InvalidBlockException for bottom block node"
<<std::endl;*/
// Just no block below, no need to panic. // Just no block below, no need to panic.
} }
} }

View File

@ -848,40 +848,20 @@ struct MapNode
envticks = 0; envticks = 0;
} }
/*
These four are DEPRECATED I guess. -c55
*/
bool light_propagates()
{
return content_features(*this).light_propagates;
}
bool sunlight_propagates()
{
return content_features(*this).sunlight_propagates;
}
u8 solidness()
{
return content_features(*this).solidness;
}
u8 light_source()
{
return content_features(*this).light_source;
}
u8 getLightBanksWithSource() u8 getLightBanksWithSource()
{ {
// Select the brightest of [light source, propagated light] // Select the brightest of [light source, propagated light]
u8 lightday = 0; u8 lightday = 0;
u8 lightnight = 0; u8 lightnight = 0;
if(content_features(*this).param_type == CPT_LIGHT) ContentFeatures &f = content_features(content);
{ if (f.param_type == CPT_LIGHT) {
lightday = param1 & 0x0f; lightday = param1 & 0x0f;
lightnight = (param1>>4)&0x0f; lightnight = (param1>>4)&0x0f;
} }
if(light_source() > lightday) if (f.light_source > lightday)
lightday = light_source(); lightday = f.light_source;
if(light_source() > lightnight) if (f.light_source > lightnight)
lightnight = light_source(); lightnight = f.light_source;
return (lightday&0x0f) | ((lightnight<<4)&0xf0); return (lightday&0x0f) | ((lightnight<<4)&0xf0);
} }
@ -889,17 +869,16 @@ struct MapNode
{ {
// Select the brightest of [light source, propagated light] // Select the brightest of [light source, propagated light]
u8 light = 0; u8 light = 0;
if(content_features(*this).param_type == CPT_LIGHT) ContentFeatures &f = content_features(content);
{ if (f.param_type == CPT_LIGHT) {
if(bank == LIGHTBANK_DAY) if (bank == LIGHTBANK_DAY) {
light = param1 & 0x0f; light = param1 & 0x0f;
else if(bank == LIGHTBANK_NIGHT) }else if (bank == LIGHTBANK_NIGHT) {
light = (param1>>4)&0x0f; light = (param1>>4)&0x0f;
else }
assert(0);
} }
if(light_source() > light) if (f.light_source > light)
light = light_source(); light = f.light_source;
return light; return light;
} }
@ -917,35 +896,19 @@ struct MapNode
l = max; l = max;
return l; return l;
} }
/*// 0 <= daylight_factor <= 1000
// 0 <= return value <= 255
u8 getLightBlend(u32 daylight_factor)
{
u8 daylight = decode_light(getLight(LIGHTBANK_DAY));
u8 nightlight = decode_light(getLight(LIGHTBANK_NIGHT));
u8 mix = ((daylight_factor * daylight
+ (1000-daylight_factor) * nightlight)
)/1000;
return mix;
}*/
void setLight(enum LightBank bank, u8 a_light) void setLight(enum LightBank bank, u8 a_light)
{ {
// If node doesn't contain light data, ignore this // If node doesn't contain light data, ignore this
if(content_features(*this).param_type != CPT_LIGHT) if (content_features(content).param_type != CPT_LIGHT)
return; return;
if(bank == LIGHTBANK_DAY) if (bank == LIGHTBANK_DAY) {
{
param1 &= 0xf0; param1 &= 0xf0;
param1 |= a_light & 0x0f; param1 |= a_light & 0x0f;
} }else if(bank == LIGHTBANK_NIGHT) {
else if(bank == LIGHTBANK_NIGHT)
{
param1 &= 0x0f; param1 &= 0x0f;
param1 |= (a_light & 0x0f)<<4; param1 |= (a_light & 0x0f)<<4;
} }
else
assert(0);
} }
v3s16 getRotation(v3s16 dir = v3s16(1,1,1)); v3s16 getRotation(v3s16 dir = v3s16(1,1,1));
s16 getRotationAngle(); s16 getRotationAngle();

View File

@ -233,9 +233,9 @@ struct TestMapNode
// Transparency // Transparency
n.setContent(CONTENT_AIR); n.setContent(CONTENT_AIR);
assert(n.light_propagates() == true); assert(content_features(n).light_propagates == true);
n.setContent(CONTENT_STONE); n.setContent(CONTENT_STONE);
assert(n.light_propagates() == false); assert(content_features(n).light_propagates == false);
} }
}; };

View File

@ -318,14 +318,13 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight,
emerge(VoxelArea(p - v3s16(1,1,1), p + v3s16(1,1,1))); emerge(VoxelArea(p - v3s16(1,1,1), p + v3s16(1,1,1)));
// Loop through 6 neighbors // Loop through 6 neighbors
for(u16 i=0; i<6; i++) for (u16 i=0; i<6; i++) {
{
// Get the position of the neighbor node // Get the position of the neighbor node
v3s16 n2pos = p + dirs[i]; v3s16 n2pos = p + dirs[i];
u32 n2i = m_area.index(n2pos); u32 n2i = m_area.index(n2pos);
if(m_flags[n2i] & VOXELFLAG_INEXISTENT) if (m_flags[n2i] & VOXELFLAG_INEXISTENT)
continue; continue;
MapNode &n2 = m_data[n2i]; MapNode &n2 = m_data[n2i];
@ -335,13 +334,11 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight,
as oldlight (the light of the previous node) as oldlight (the light of the previous node)
*/ */
u8 light2 = n2.getLight(bank); u8 light2 = n2.getLight(bank);
if(light2 < oldlight) if (light2 < oldlight) {
{
/* /*
And the neighbor is transparent and it has some light And the neighbor is transparent and it has some light
*/ */
if(n2.light_propagates() && light2 != 0) if (content_features(n2).light_propagates && light2 != 0) {
{
/* /*
Set light to 0 and add to queue Set light to 0 and add to queue
*/ */
@ -360,8 +357,7 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight,
light_sources.remove(n2pos); light_sources.remove(n2pos);
}*/ }*/
} }
} }else{
else{
light_sources.insert(n2pos, true); light_sources.insert(n2pos, true);
} }
} }
@ -531,7 +527,7 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p)
u32 i = m_area.index(p); u32 i = m_area.index(p);
if(m_flags[i] & VOXELFLAG_INEXISTENT) if (m_flags[i] & VOXELFLAG_INEXISTENT)
return; return;
MapNode &n = m_data[i]; MapNode &n = m_data[i];
@ -540,14 +536,13 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p)
u8 newlight = diminish_light(oldlight); u8 newlight = diminish_light(oldlight);
// Loop through 6 neighbors // Loop through 6 neighbors
for(u16 i=0; i<6; i++) for (u16 i=0; i<6; i++) {
{
// Get the position of the neighbor node // Get the position of the neighbor node
v3s16 n2pos = p + dirs[i]; v3s16 n2pos = p + dirs[i];
u32 n2i = m_area.index(n2pos); u32 n2i = m_area.index(n2pos);
if(m_flags[n2i] & VOXELFLAG_INEXISTENT) if (m_flags[n2i] & VOXELFLAG_INEXISTENT)
continue; continue;
MapNode &n2 = m_data[n2i]; MapNode &n2 = m_data[n2i];
@ -557,21 +552,15 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p)
If the neighbor is brighter than the current node, If the neighbor is brighter than the current node,
add to list (it will light up this node on its turn) add to list (it will light up this node on its turn)
*/ */
if(light2 > undiminish_light(oldlight)) if (light2 > undiminish_light(oldlight))
{
spreadLight(bank, n2pos); spreadLight(bank, n2pos);
}
/* /*
If the neighbor is dimmer than how much light this node If the neighbor is dimmer than how much light this node
would spread on it, add to list would spread on it, add to list
*/ */
if(light2 < newlight) if (light2 < newlight && content_features(n2).light_propagates) {
{ n2.setLight(bank, newlight);
if(n2.light_propagates()) spreadLight(bank, n2pos);
{
n2.setLight(bank, newlight);
spreadLight(bank, n2pos);
}
} }
} }
} }
@ -587,17 +576,15 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p)
void VoxelManipulator::spreadLight(enum LightBank bank, void VoxelManipulator::spreadLight(enum LightBank bank,
core::map<v3s16, bool> & from_nodes) core::map<v3s16, bool> & from_nodes)
{ {
if(from_nodes.size() == 0) if (from_nodes.size() == 0)
return; return;
core::map<v3s16, bool> lighted_nodes; core::map<v3s16, bool> lighted_nodes;
core::map<v3s16, bool>::Iterator j; core::map<v3s16, bool>::Iterator j;
j = from_nodes.getIterator(); j = from_nodes.getIterator();
for(; j.atEnd() == false; j++) for (; j.atEnd() == false; j++) {
{
v3s16 pos = j.getNode()->getKey(); v3s16 pos = j.getNode()->getKey();
spreadLight(bank, pos); spreadLight(bank, pos);
} }
} }
@ -620,22 +607,21 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
v3s16(-1,0,0), // left v3s16(-1,0,0), // left
}; };
if(from_nodes.size() == 0) if (from_nodes.size() == 0)
return; return;
core::map<v3s16, bool> lighted_nodes; core::map<v3s16, bool> lighted_nodes;
core::map<v3s16, bool>::Iterator j; core::map<v3s16, bool>::Iterator j;
j = from_nodes.getIterator(); j = from_nodes.getIterator();
for(; j.atEnd() == false; j++) for (; j.atEnd() == false; j++) {
{
v3s16 pos = j.getNode()->getKey(); v3s16 pos = j.getNode()->getKey();
emerge(VoxelArea(pos - v3s16(1,1,1), pos + v3s16(1,1,1))); emerge(VoxelArea(pos - v3s16(1,1,1), pos + v3s16(1,1,1)));
u32 i = m_area.index(pos); u32 i = m_area.index(pos);
if(m_flags[i] & VOXELFLAG_INEXISTENT) if (m_flags[i] & VOXELFLAG_INEXISTENT)
continue; continue;
MapNode &n = m_data[i]; MapNode &n = m_data[i];
@ -644,16 +630,14 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
u8 newlight = diminish_light(oldlight); u8 newlight = diminish_light(oldlight);
// Loop through 6 neighbors // Loop through 6 neighbors
for(u16 i=0; i<6; i++) for (u16 i=0; i<6; i++) {
{
// Get the position of the neighbor node // Get the position of the neighbor node
v3s16 n2pos = pos + dirs[i]; v3s16 n2pos = pos + dirs[i];
try try{
{
u32 n2i = m_area.index(n2pos); u32 n2i = m_area.index(n2pos);
if(m_flags[n2i] & VOXELFLAG_INEXISTENT) if (m_flags[n2i] & VOXELFLAG_INEXISTENT)
continue; continue;
MapNode &n2 = m_data[n2i]; MapNode &n2 = m_data[n2i];
@ -663,25 +647,17 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
If the neighbor is brighter than the current node, If the neighbor is brighter than the current node,
add to list (it will light up this node on its turn) add to list (it will light up this node on its turn)
*/ */
if(light2 > undiminish_light(oldlight)) if (light2 > undiminish_light(oldlight))
{
lighted_nodes.insert(n2pos, true); lighted_nodes.insert(n2pos, true);
}
/* /*
If the neighbor is dimmer than how much light this node If the neighbor is dimmer than how much light this node
would spread on it, add to list would spread on it, add to list
*/ */
if(light2 < newlight) if (light2 < newlight && content_features(n2).light_propagates) {
{ n2.setLight(bank, newlight);
if(n2.light_propagates()) lighted_nodes.insert(n2pos, true);
{
n2.setLight(bank, newlight);
lighted_nodes.insert(n2pos, true);
}
} }
} }catch(InvalidPositionException &e) {
catch(InvalidPositionException &e)
{
continue; continue;
} }
} }
@ -692,7 +668,7 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
<<" for "<<from_nodes.size()<<" nodes" <<" for "<<from_nodes.size()<<" nodes"
<<std::endl;*/ <<std::endl;*/
if(lighted_nodes.size() > 0) if (lighted_nodes.size() > 0)
spreadLight(bank, lighted_nodes); spreadLight(bank, lighted_nodes);
} }
#endif #endif