#include "settings.h"
#include "log.h"
#include "profiler.h"
+#include "mapnode_contentfeatures.h"
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
/*
update the current node
*/
- bool flow_down_enabled = (flowing_down && ((n0.param2 & LIQUID_FLOW_DOWN_MASK) != LIQUID_FLOW_DOWN_MASK));
+ //bool flow_down_enabled = (flowing_down && ((n0.param2 & LIQUID_FLOW_DOWN_MASK) != LIQUID_FLOW_DOWN_MASK));
if (content_features(new_node_content).liquid_type == LIQUID_FLOWING) {
// set level to last 3 bits, flowing down bit to 4th bit
n0.param2 = (flowing_down ? LIQUID_FLOW_DOWN_MASK : 0x00) | (new_node_level & LIQUID_LEVEL_MASK);
<<std::endl;
return NULL;
}
- NodeMetadata *meta = block->m_node_metadata.get(p_rel);
+ NodeMetadata *meta = block->m_node_metadata->get(p_rel);
return meta;
}
<<std::endl;
return;
}
- block->m_node_metadata.set(p_rel, meta);
+ block->m_node_metadata->set(p_rel, meta);
}
void Map::removeNodeMetadata(v3s16 p)
<<std::endl;
return;
}
- block->m_node_metadata.remove(p_rel);
+ block->m_node_metadata->remove(p_rel);
}
void Map::nodeMetadataStep(float dtime,
for(i=sectorblocks.begin(); i!=sectorblocks.end(); i++)
{
MapBlock *block = *i;
- bool changed = block->m_node_metadata.step(dtime);
+ bool changed = block->m_node_metadata->step(dtime);
if(changed)
changed_blocks[block->getPos()] = block;
}
ISceneNode::OnRegisterSceneNode();
}
-static bool isOccluded(Map *map, v3s16 p0, v3s16 p1, float step,
+static bool isOccluded(Map *map, v3s16 p0, v3s16 p1, float step, float stepfac,
float start_off, float end_off, u32 needed_count)
{
float d0 = (float)BS * p0.getDistanceFrom(p1);
if(count >= needed_count)
return true;
}
+ step *= stepfac;
}
return false;
}
blocks_in_range++;
- // This block is in range. Reset usage timer.
- block->resetUsageTimer();
-
#if 1
/*
Update expired mesh (used for day/night change)
Occlusion culling
*/
- v3s16 cpn = v3s16(block->getPos() * MAP_BLOCKSIZE)
- + v3s16(MAP_BLOCKSIZE)/2;
- float step = BS*2;
- float startoff = BS*3;
+ v3s16 cpn = block->getPos() * MAP_BLOCKSIZE;
+ cpn += v3s16(MAP_BLOCKSIZE/2, MAP_BLOCKSIZE/2, MAP_BLOCKSIZE/2);
+ float step = BS*1;
+ float stepfac = 1.1;
+ float startoff = BS*1;
float endoff = -BS*MAP_BLOCKSIZE*1.42*1.42;
v3s16 spn = cam_pos_nodes + v3s16(0,0,0);
s16 bs2 = MAP_BLOCKSIZE/2 + 1;
u32 needed_count = 1;
if(
isOccluded(this, spn, cpn + v3s16(0,0,0),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(bs2,bs2,bs2),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(bs2,bs2,-bs2),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(bs2,-bs2,bs2),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(bs2,-bs2,-bs2),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(-bs2,bs2,bs2),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(-bs2,bs2,-bs2),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(-bs2,-bs2,bs2),
- step, startoff, endoff, needed_count) &&
+ step, stepfac, startoff, endoff, needed_count) &&
isOccluded(this, spn, cpn + v3s16(-bs2,-bs2,-bs2),
- step, startoff, endoff, needed_count)
+ step, stepfac, startoff, endoff, needed_count)
)
{
blocks_occlusion_culled++;
continue;
}
+ // This block is in range. Reset usage timer.
+ block->resetUsageTimer();
+
/*
Ignore if mesh doesn't exist
*/