Use catchalls to skip over errors while centering views on players
Avoids crashes on badly-formed player data. Should tighten this up to only catch errors in getting the player's position. Should also add a validate function to AnvilPlayerRef (and every other ref, too?)
This commit is contained in:
parent
d10c6440ff
commit
cbd35c1605
@ -507,17 +507,17 @@ class EditorSession(QtCore.QObject):
|
||||
|
||||
def findReplace(self):
|
||||
self.findReplaceDialog.exec_()
|
||||
|
||||
|
||||
def analyze(self):
|
||||
if self.currentSelection is None:
|
||||
return
|
||||
task = self.currentDimension.analyzeIter(self.currentSelection)
|
||||
showProgress("Analyzing...", task)
|
||||
outputDialog = AnalyzeOutputDialog(self, task.blocks,
|
||||
task.entityCounts,
|
||||
outputDialog = AnalyzeOutputDialog(self, task.blocks,
|
||||
task.entityCounts,
|
||||
task.tileEntityCounts,
|
||||
task.dimension.worldEditor.displayName)
|
||||
|
||||
|
||||
def deleteSelection(self):
|
||||
command = SimpleRevisionCommand(self, "Delete")
|
||||
with command.begin():
|
||||
@ -673,31 +673,34 @@ class EditorSession(QtCore.QObject):
|
||||
# --- Misplaced startup code? ---
|
||||
|
||||
def loadDone(self):
|
||||
# Called by MCEditApp after the view is on screen to make sure view.center() works correctly xxx used depth
|
||||
# buffer read for that, now what?
|
||||
# Called by MCEditApp after the view is on screen to make sure view.center() works correctly
|
||||
# xxx used depthbuffer read for that, now what?
|
||||
try:
|
||||
player = self.worldEditor.getPlayer()
|
||||
center = Vector(*player.Position) + (0, 1.8, 0)
|
||||
dimNo = player.Dimension
|
||||
dimName = self.worldEditor.dimNameFromNumber(dimNo)
|
||||
log.info("Setting view angle to single-player player's view in dimension %s.", dimName)
|
||||
rotation = player.Rotation
|
||||
if dimName:
|
||||
self.gotoDimension(dimName)
|
||||
try:
|
||||
self.editorTab.currentView().yawPitch = rotation
|
||||
except AttributeError:
|
||||
pass
|
||||
except PlayerNotFound:
|
||||
try:
|
||||
center = self.worldEditor.worldSpawnPosition()
|
||||
log.info("Centering on spawn position.")
|
||||
except AttributeError:
|
||||
log.info("Centering on world center")
|
||||
center = self.currentDimension.bounds.origin + (self.currentDimension.bounds.size * 0.5)
|
||||
player = self.worldEditor.getPlayer()
|
||||
center = Vector(*player.Position) + (0, 1.8, 0)
|
||||
dimNo = player.Dimension
|
||||
dimName = self.worldEditor.dimNameFromNumber(dimNo)
|
||||
log.info("Setting view angle to single-player player's view in dimension %s.", dimName)
|
||||
rotation = player.Rotation
|
||||
if dimName:
|
||||
self.gotoDimension(dimName)
|
||||
try:
|
||||
self.editorTab.currentView().yawPitch = rotation
|
||||
except AttributeError:
|
||||
pass
|
||||
except PlayerNotFound:
|
||||
try:
|
||||
center = self.worldEditor.worldSpawnPosition()
|
||||
log.info("Centering on spawn position.")
|
||||
except AttributeError:
|
||||
log.info("Centering on world center")
|
||||
center = self.currentDimension.bounds.origin + (self.currentDimension.bounds.size * 0.5)
|
||||
self.editorTab.miniMap.centerOnPoint(center)
|
||||
self.editorTab.currentView().centerOnPoint(center, distance=0)
|
||||
except Exception as e:
|
||||
log.exception("Error while centering on player for world editor: %s", e)
|
||||
|
||||
self.editorTab.miniMap.centerOnPoint(center)
|
||||
self.editorTab.currentView().centerOnPoint(center, distance=0)
|
||||
|
||||
# --- Tools ---
|
||||
|
||||
|
@ -379,23 +379,27 @@ class WorldListWidget(QtGui.QDialog):
|
||||
self.chunkLoader.chunkCompleted.connect(self.worldView.update)
|
||||
|
||||
try:
|
||||
player = worldEditor.getPlayer()
|
||||
log.info("Centering on single-player player.")
|
||||
except PlayerNotFound:
|
||||
try:
|
||||
center = worldEditor.worldSpawnPosition()
|
||||
log.info("Centering on spawn position.")
|
||||
except AttributeError:
|
||||
log.info("Centering on world center")
|
||||
center = dim.bounds.origin + (dim.bounds.size * 0.5)
|
||||
else:
|
||||
if player.dimName == dim.dimName:
|
||||
center = Vector(*player.Position)
|
||||
self.worldView.centerOnPoint(center)
|
||||
player = worldEditor.getPlayer()
|
||||
log.info("Centering on single-player player.")
|
||||
except PlayerNotFound:
|
||||
try:
|
||||
center = worldEditor.worldSpawnPosition()
|
||||
log.info("Centering on spawn position.")
|
||||
except AttributeError:
|
||||
log.info("Centering on world center")
|
||||
center = dim.bounds.origin + (dim.bounds.size * 0.5)
|
||||
else:
|
||||
center = dim.bounds.origin + (dim.bounds.size * 0.5)
|
||||
if player.dimName == dim.dimName:
|
||||
center = Vector(*player.Position)
|
||||
self.worldView.centerOnPoint(center)
|
||||
else:
|
||||
center = dim.bounds.origin + (dim.bounds.size * 0.5)
|
||||
|
||||
self.worldView.centerOnPoint(center)
|
||||
except Exception as e:
|
||||
log.exception("Error while centering view in world list: %s", e)
|
||||
|
||||
self.worldView.centerOnPoint(center)
|
||||
log.info("Switched world view")
|
||||
|
||||
def setWorldView(self, worldView):
|
||||
|
Reference in New Issue
Block a user