From 91f6b2be946571f83cf081834f44d1652d56664a Mon Sep 17 00:00:00 2001 From: David Vierra Date: Wed, 28 Oct 2015 19:17:47 -1000 Subject: [PATCH] ChunkLoader now notifies clients of deleted chunks via chunkInvalid --- src/mcedit2/rendering/chunkloader.py | 18 +++++++++++++++++- src/mcedit2/worldview/cutaway.py | 2 +- src/mcedit2/worldview/worldview.py | 6 ++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/mcedit2/rendering/chunkloader.py b/src/mcedit2/rendering/chunkloader.py index 5f74c81..176574f 100644 --- a/src/mcedit2/rendering/chunkloader.py +++ b/src/mcedit2/rendering/chunkloader.py @@ -88,6 +88,21 @@ class IChunkLoaderClient(object): :param (cx, cz): chunk position """ + def chunkInvalid(self, (cx, cz), deleted): + """ + Called when the revision changes indicate a chunk is modified or deleted. + + Parameters + ---------- + deleted : bool + True if the chunk was deleted. + + Returns + ------- + None + + """ + class ChunkLoader(QtCore.QObject): chunkCompleted = QtCore.Signal() allChunksDone = QtCore.Signal() @@ -185,10 +200,11 @@ class ChunkLoader(QtCore.QObject): invalidChunks = self.invalidChunks.pop(self.dimension.dimName, []) for c in invalidChunks: + deleted = not self.dimension.containsChunk(*c) for ref in self.clients: client = ref() if client: - client.chunkInvalid(c) + client.chunkInvalid(c, deleted) for ref in self.clients: client = ref() diff --git a/src/mcedit2/worldview/cutaway.py b/src/mcedit2/worldview/cutaway.py index 9b5aa97..a25f7ab 100644 --- a/src/mcedit2/worldview/cutaway.py +++ b/src/mcedit2/worldview/cutaway.py @@ -165,7 +165,7 @@ class SlicedWorldScene(scenenode.Node): for _ in mesh.workOnChunk(c, sections): yield _ - def chunkInvalid(self, c): + def chunkInvalid(self, c, deleted): for mesh in self.sliceScenes.values(): mesh.invalidateChunk(*c) diff --git a/src/mcedit2/worldview/worldview.py b/src/mcedit2/worldview/worldview.py index 2df3de8..30c79a9 100644 --- a/src/mcedit2/worldview/worldview.py +++ b/src/mcedit2/worldview/worldview.py @@ -673,7 +673,6 @@ class WorldView(QGLWidget): def chunkNotPresent(self, cPos): self.worldScene.chunkNotPresent(cPos) - self.loadableChunksNode.dirty = True # gross. def recieveChunk(self, chunk): t = time.time() @@ -695,8 +694,11 @@ class WorldView(QGLWidget): return self.worldScene.workOnChunk(chunk, visibleSections) - def chunkInvalid(self, (cx, cz)): + def chunkInvalid(self, (cx, cz), deleted): self.worldScene.invalidateChunk(cx, cz) + if deleted: + self.loadableChunksNode.dirty = True + self.resetLoadOrder() def setLayerVisible(self, layerName, visible):