mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Update Mapgen VoxelManipulator on buffer invalidation
This commit is contained in:
parent
3fa4f782d9
commit
9e4e7072da
6 changed files with 75 additions and 10 deletions
|
@ -778,19 +778,26 @@ bool ServerEnvironment::setNode(v3s16 p, const MapNode &n)
|
|||
{
|
||||
INodeDefManager *ndef = m_gamedef->ndef();
|
||||
MapNode n_old = m_map->getNodeNoEx(p);
|
||||
|
||||
// Call destructor
|
||||
if(ndef->get(n_old).has_on_destruct)
|
||||
if (ndef->get(n_old).has_on_destruct)
|
||||
m_script->node_on_destruct(p, n_old);
|
||||
|
||||
// Replace node
|
||||
bool succeeded = m_map->addNodeWithEvent(p, n);
|
||||
if(!succeeded)
|
||||
if (!m_map->addNodeWithEvent(p, n))
|
||||
return false;
|
||||
|
||||
// Update active VoxelManipulator if a mapgen thread
|
||||
m_map->updateVManip(p);
|
||||
|
||||
// Call post-destructor
|
||||
if(ndef->get(n_old).has_after_destruct)
|
||||
if (ndef->get(n_old).has_after_destruct)
|
||||
m_script->node_after_destruct(p, n_old);
|
||||
|
||||
// Call constructor
|
||||
if(ndef->get(n).has_on_construct)
|
||||
if (ndef->get(n).has_on_construct)
|
||||
m_script->node_on_construct(p, n);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -798,24 +805,36 @@ bool ServerEnvironment::removeNode(v3s16 p)
|
|||
{
|
||||
INodeDefManager *ndef = m_gamedef->ndef();
|
||||
MapNode n_old = m_map->getNodeNoEx(p);
|
||||
|
||||
// Call destructor
|
||||
if(ndef->get(n_old).has_on_destruct)
|
||||
if (ndef->get(n_old).has_on_destruct)
|
||||
m_script->node_on_destruct(p, n_old);
|
||||
|
||||
// Replace with air
|
||||
// This is slightly optimized compared to addNodeWithEvent(air)
|
||||
bool succeeded = m_map->removeNodeWithEvent(p);
|
||||
if(!succeeded)
|
||||
if (!m_map->removeNodeWithEvent(p))
|
||||
return false;
|
||||
|
||||
// Update active VoxelManipulator if a mapgen thread
|
||||
m_map->updateVManip(p);
|
||||
|
||||
// Call post-destructor
|
||||
if(ndef->get(n_old).has_after_destruct)
|
||||
if (ndef->get(n_old).has_after_destruct)
|
||||
m_script->node_after_destruct(p, n_old);
|
||||
|
||||
// Air doesn't require constructor
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ServerEnvironment::swapNode(v3s16 p, const MapNode &n)
|
||||
{
|
||||
return m_map->addNodeWithEvent(p, n, false);
|
||||
if (!m_map->addNodeWithEvent(p, n, false))
|
||||
return false;
|
||||
|
||||
// Update active VoxelManipulator if a mapgen thread
|
||||
m_map->updateVManip(p);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::set<u16> ServerEnvironment::getObjectsInsideRadius(v3f pos, float radius)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue