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):