summaryrefslogtreecommitdiff
path: root/src/map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/map.cpp')
-rw-r--r--src/map.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/map.cpp b/src/map.cpp
index 147bd3584..236972ae9 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -2757,6 +2757,28 @@ MapBlock *ServerMap::getBlockOrEmerge(v3s16 p3d)
void ServerMap::prepareBlock(MapBlock *block) {
}
+// N.B. This requires no synchronization, since data will not be modified unless
+// the VoxelManipulator being updated belongs to the same thread.
+void ServerMap::updateVManip(v3s16 pos)
+{
+ Mapgen *mg = m_emerge->getCurrentMapgen();
+ if (!mg)
+ return;
+
+ ManualMapVoxelManipulator *vm = mg->vm;
+ if (!vm)
+ return;
+
+ if (!vm->m_area.contains(pos))
+ return;
+
+ s32 idx = vm->m_area.index(pos);
+ vm->m_data[idx] = getNodeNoEx(pos);
+ vm->m_flags[idx] &= ~VOXELFLAG_NO_DATA;
+
+ vm->m_is_dirty = true;
+}
+
s16 ServerMap::findGroundLevel(v2s16 p2d)
{
#if 0
@@ -3523,6 +3545,7 @@ void ServerMap::PrintInfo(std::ostream &out)
ManualMapVoxelManipulator::ManualMapVoxelManipulator(Map *map):
VoxelManipulator(),
+ m_is_dirty(false),
m_create_area(false),
m_map(map)
{
@@ -3617,6 +3640,8 @@ void ManualMapVoxelManipulator::initialEmerge(v3s16 blockpos_min,
m_loaded_blocks[p] = flags;
}
+
+ m_is_dirty = false;
}
void ManualMapVoxelManipulator::blitBackAll(