master #6

Merged
BRNSystems merged 85 commits from Mirrorlandia_minetest/minetest:master into master 2024-01-09 17:53:52 +01:00
4 changed files with 29 additions and 17 deletions
Showing only changes of commit 22a1653702 - Show all commits

@ -350,18 +350,21 @@ void RemoteClient::GetNextBlocks (
if (!block->getIsUnderground() && !block->getDayNightDiff()) if (!block->getIsUnderground() && !block->getDayNightDiff())
continue; continue;
} }
}
/* /*
Check occlusion cache first. Check occlusion cache first.
*/ */
if (m_blocks_occ.find(p) != m_blocks_occ.end()) if (m_blocks_occ.find(p) != m_blocks_occ.end())
continue; continue;
if (m_occ_cull && !block_not_found && /*
env->getMap().isBlockOccluded(block, cam_pos_nodes, d >= d_cull_opt)) { Note that we do this even before the block is loaded as this does not depend on its contents.
m_blocks_occ.insert(p); */
continue; if (m_occ_cull &&
} env->getMap().isBlockOccluded(p * MAP_BLOCKSIZE, cam_pos_nodes, d >= d_cull_opt)) {
m_blocks_occ.insert(p);
continue;
} }
/* /*

@ -1155,7 +1155,7 @@ bool Map::isOccluded(const v3s16 &pos_camera, const v3s16 &pos_target,
return false; return false;
} }
bool Map::isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_check) bool Map::isBlockOccluded(v3s16 pos_relative, v3s16 cam_pos_nodes, bool simple_check)
{ {
// Check occlusion for center and all 8 corners of the mapblock // Check occlusion for center and all 8 corners of the mapblock
// Overshoot a little for less flickering // Overshoot a little for less flickering
@ -1172,7 +1172,7 @@ bool Map::isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_chec
v3s16(-1, -1, -1) * bs2, v3s16(-1, -1, -1) * bs2,
}; };
v3s16 pos_blockcenter = block->getPosRelative() + (MAP_BLOCKSIZE / 2); v3s16 pos_blockcenter = pos_relative + (MAP_BLOCKSIZE / 2);
// Starting step size, value between 1m and sqrt(3)m // Starting step size, value between 1m and sqrt(3)m
float step = BS * 1.2f; float step = BS * 1.2f;
@ -1203,7 +1203,7 @@ bool Map::isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_chec
// Additional occlusion check, see comments in that function // Additional occlusion check, see comments in that function
v3s16 check; v3s16 check;
if (determineAdditionalOcclusionCheck(cam_pos_nodes, block->getBox(), check)) { if (determineAdditionalOcclusionCheck(cam_pos_nodes, MapBlock::getBox(pos_relative), check)) {
// node is always on a side facing the camera, end_offset can be lower // node is always on a side facing the camera, end_offset can be lower
if (!isOccluded(cam_pos_nodes, check, step, stepfac, start_offset, if (!isOccluded(cam_pos_nodes, check, step, stepfac, start_offset,
-1.0f, needed_count)) -1.0f, needed_count))

@ -305,7 +305,12 @@ public:
} }
} }
bool isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_check = false); bool isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_check = false)
{
return isBlockOccluded(block->getPosRelative(), cam_pos_nodes, simple_check);
}
bool isBlockOccluded(v3s16 pos_relative, v3s16 cam_pos_nodes, bool simple_check = false);
protected: protected:
IGameDef *m_gamedef; IGameDef *m_gamedef;

@ -216,10 +216,14 @@ public:
return m_pos_relative; return m_pos_relative;
} }
inline core::aabbox3d<s16> getBox() inline core::aabbox3d<s16> getBox() {
return getBox(getPosRelative());
}
static inline core::aabbox3d<s16> getBox(const v3s16 &pos_relative)
{ {
return core::aabbox3d<s16>(getPosRelative(), return core::aabbox3d<s16>(pos_relative,
getPosRelative() pos_relative
+ v3s16(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE) + v3s16(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE)
- v3s16(1,1,1)); - v3s16(1,1,1));
} }