From 0b1f47c2b9073213f7ec85fcdf6b36ea62f026b8 Mon Sep 17 00:00:00 2001 From: David Vierra Date: Tue, 6 Oct 2015 17:12:32 -1000 Subject: [PATCH] WorldLoader now has a startLoader function with a minimum duration. The minimum duration tells how long to load chunks immediately before starting the async loader. --- src/mcedit2/editortools/brush/__init__.py | 2 +- src/mcedit2/editortools/generate.py | 2 +- src/mcedit2/editortools/move.py | 4 ++-- src/mcedit2/util/worldloader.py | 7 +++++++ src/mcedit2/worldview/schematic_worldview.py | 2 +- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/mcedit2/editortools/brush/__init__.py b/src/mcedit2/editortools/brush/__init__.py index 6fbd783..b4675ff 100644 --- a/src/mcedit2/editortools/brush/__init__.py +++ b/src/mcedit2/editortools/brush/__init__.py @@ -220,7 +220,7 @@ class BrushTool(EditorTool): self.cursorNode.addChild(self.cursorBoxNode) self.brushLoader = WorldLoader(self.cursorWorldScene) - self.brushLoader.timer.start() + self.brushLoader.startLoader() # xxx button palette? diff --git a/src/mcedit2/editortools/generate.py b/src/mcedit2/editortools/generate.py index 1d56b6f..11b84da 100644 --- a/src/mcedit2/editortools/generate.py +++ b/src/mcedit2/editortools/generate.py @@ -412,7 +412,7 @@ class GenerateTool(EditorTool): if dim.chunkCount() <= self.instantDisplayChunks: exhaust(self.loader.work()) else: - self.loader.timer.start() + self.loader.startLoader() else: self.clearSchematic() diff --git a/src/mcedit2/editortools/move.py b/src/mcedit2/editortools/move.py index dd26ab3..7903b31 100644 --- a/src/mcedit2/editortools/move.py +++ b/src/mcedit2/editortools/move.py @@ -161,7 +161,7 @@ class PendingImportNode(Node, QtCore.QObject): self.loader = WorldLoader(self.worldScene, list(pendingImport.selection.chunkPositions())) - self.loader.timer.start() + self.loader.startLoader() def handleBoundsChanged(self, bounds): self.pos = bounds.origin @@ -202,7 +202,7 @@ class PendingImportNode(Node, QtCore.QObject): cPos = list(self.pendingImport.transformedDim.chunkPositions()) self.loader = WorldLoader(self.transformedWorldScene, cPos) - self.loader.timer.start() + self.loader.startLoader() else: self.rotateNode.visible = True diff --git a/src/mcedit2/util/worldloader.py b/src/mcedit2/util/worldloader.py index acbeb54..1acb926 100644 --- a/src/mcedit2/util/worldloader.py +++ b/src/mcedit2/util/worldloader.py @@ -6,6 +6,7 @@ import contextlib import logging import weakref from PySide import QtCore +import time from mcedit2.util import profiler log = logging.getLogger(__name__) @@ -56,6 +57,12 @@ class WorldLoader(object): self.chunkPositions = chunkPositions self.chunkIter = self.work() + def startLoader(self, duration=0.12): + self.timer.start() + start = time.time() + while time.time() < start + duration: + self.loadChunk() + def loadChunk(self): try: self.chunkIter.next() diff --git a/src/mcedit2/worldview/schematic_worldview.py b/src/mcedit2/worldview/schematic_worldview.py index ed0c78e..c44694b 100644 --- a/src/mcedit2/worldview/schematic_worldview.py +++ b/src/mcedit2/worldview/schematic_worldview.py @@ -85,8 +85,8 @@ def displaySchematic(schematic): _swv_view = SchematicWorldView(dim, textureAtlas) loader = WorldLoader(_swv_view.worldScene) - loader.timer.start() loader.timer.timeout.connect(_swv_view.update) + loader.startLoader() centerWidgetInScreen(_swv_view, resize=0.75)