ChunkLoader now notifies clients of deleted chunks via chunkInvalid
This commit is contained in:
parent
af264492c2
commit
91f6b2be94
@ -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()
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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):
|
||||
|
Reference in New Issue
Block a user