ChunkLoader now notifies clients of deleted chunks via chunkInvalid

This commit is contained in:
David Vierra 2015-10-28 19:17:47 -10:00
parent af264492c2
commit 91f6b2be94
3 changed files with 22 additions and 4 deletions

View File

@ -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()

View File

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

View File

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