Move Player command works, use player's rotation when opening first view

This commit is contained in:
David Vierra 2015-01-02 10:07:22 -10:00
parent f8025c890d
commit 636934b71a
4 changed files with 28 additions and 5 deletions

View File

@ -259,6 +259,11 @@ class EditorSession(QtCore.QObject):
player = self.worldEditor.getPlayer()
center = Vector(*player.Position)
log.info("Centering on single-player player.")
rotation = player.Rotation
try:
self.editorTab.currentView().yawPitch = rotation
except AttributeError:
pass
except PlayerNotFound:
try:
center = self.worldEditor.worldSpawnPosition()

View File

@ -4,6 +4,7 @@
from __future__ import absolute_import, division, print_function, unicode_literals
import logging
from PySide.QtCore import Qt
from mcedit2.command import SimpleRevisionCommand
from mcedit2.editortools import EditorTool
from mcedit2.nbt_treemodel import NBTTreeModel, NBTFilterProxyModel
from mcedit2.util.load_ui import load_ui
@ -52,7 +53,16 @@ class PlayerTool(EditorTool):
def movePlayerToCamera(self):
view = self.editorSession.editorTab.currentView()
if view.viewID == "Cam":
self.selectedPlayer.Position = view.centerPoint
command = SimpleRevisionCommand(self.editorSession, "Move Player")
with command.begin():
self.selectedPlayer.Position = view.centerPoint
try:
self.selectedPlayer.Rotation = view.yawPitch
except AttributeError:
pass
self.selectedPlayer.dirty = True # xxx do in AnvilPlayerRef
self.editorSession.pushCommand(command)
else:
raise ValueError("Current view is not camera view.")

View File

@ -335,6 +335,7 @@ class AnvilWorldMetadata(object):
def __init__(self, metadataTag):
self.metadataTag = metadataTag
self.rootTag = metadataTag["Data"]
self.dirty = False
# --- NBT Tag variables ---
@ -487,7 +488,9 @@ class AnvilWorldAdapter(object):
:return:
:rtype:
"""
self.selectedRevision.writeFile("level.dat", self.metadata.metadataTag.save())
if self.metadata.dirty:
self.selectedRevision.writeFile("level.dat", self.metadata.metadataTag.save())
self.metadata.dirty = False
def saveChanges(self):
"""
@ -801,7 +804,7 @@ class AnvilWorldAdapter(object):
def savePlayerTag(self, tag, playerUUID):
if playerUUID == "":
# sync metadata?
return
self.metadata.dirty = True
else:
self.selectedRevision.writeFile("playerdata/%s.dat" % playerUUID, tag.save())
@ -920,6 +923,7 @@ class AnvilPlayerRef(object):
def save(self):
if self.dirty:
self.adapter.savePlayerTag(self.rootTag, self.playerUUID)
self.dirty = False
_dimNames = {
-1:"DIM-1",

View File

@ -252,8 +252,11 @@ class WorldEditor(object):
:return:
:rtype:
"""
dirtyPlayers = 0
for player in self.playerCache.itervalues():
player.save()
if player.dirty:
dirtyPlayers += 1
player.save()
dirtyChunkCount = 0
for chunk in self._loadedChunkData.itervalues():
@ -261,7 +264,8 @@ class WorldEditor(object):
dirtyChunkCount += 1
self.adapter.writeChunk(chunk)
chunk.dirty = False
log.info(u"Saved {0} chunks".format(dirtyChunkCount))
self.adapter.syncToDisk()
log.info(u"Saved %d chunks and %d players", dirtyChunkCount, dirtyPlayers)
def saveChanges(self):
if self.readonly: