Make sure all neighbors of changed fluids are activated

This should fix the remaining cases of fluid not advancing or not
retreating.
This commit is contained in:
Giuseppe Bilotta 2011-08-16 18:05:28 +02:00
parent 774faf4e85
commit 56e9f97294

@ -1743,6 +1743,7 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
*/ */
switch (content_features(n0.getContent()).liquid_type) { switch (content_features(n0.getContent()).liquid_type) {
case LIQUID_SOURCE: case LIQUID_SOURCE:
case LIQUID_FLOWING:
// make sure source flows into all neighboring nodes // make sure source flows into all neighboring nodes
for (u16 i = 0; i < num_flows; i++) for (u16 i = 0; i < num_flows; i++)
if (flows[i].t != NEIGHBOR_UPPER) if (flows[i].t != NEIGHBOR_UPPER)
@ -1756,19 +1757,6 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
for (u16 i = 0; i < num_flows; i++) for (u16 i = 0; i < num_flows; i++)
m_transforming_liquid.push_back(flows[i].p); m_transforming_liquid.push_back(flows[i].p);
break; break;
case LIQUID_FLOWING:
for (u16 i = 0; i < num_flows; i++) {
u8 flow_level = (flows[i].n.param2 & LIQUID_LEVEL_MASK);
// liquid_level is still the ORIGINAL level of this node.
if (flows[i].t != NEIGHBOR_UPPER && ((flow_level < liquid_level || flow_level < new_node_level) ||
flow_down_enabled))
m_transforming_liquid.push_back(flows[i].p);
}
for (u16 i = 0; i < num_airs; i++) {
if (airs[i].t != NEIGHBOR_UPPER && (airs[i].t == NEIGHBOR_LOWER || new_node_level > 0))
m_transforming_liquid.push_back(airs[i].p);
}
break;
} }
} }
//dstream<<"Map::transformLiquids(): loopcount="<<loopcount<<std::endl; //dstream<<"Map::transformLiquids(): loopcount="<<loopcount<<std::endl;