Player Tool is now a Panel
This commit is contained in:
parent
a83977da99
commit
a206ab5336
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@ -98,21 +98,21 @@ class MCEditApp(QtGui.QApplication):
|
|||||||
self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested)
|
self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested)
|
||||||
self.tabWidget.currentChanged.connect(self.tabChanged)
|
self.tabWidget.currentChanged.connect(self.tabChanged)
|
||||||
|
|
||||||
# --- Sessions
|
# --- Sessions ---
|
||||||
|
|
||||||
self._currentSession = None
|
self._currentSession = None
|
||||||
self.sessions = []
|
self.sessions = []
|
||||||
self.sessionDockWidgets = []
|
self.sessionDockWidgets = []
|
||||||
self.sessionChanged.connect(self.sessionDidChange)
|
self.sessionChanged.connect(self.sessionDidChange)
|
||||||
|
|
||||||
# --- Dock Widgets ---
|
# --- Panel Widgets ---
|
||||||
|
|
||||||
self.undoView = QtGui.QUndoView(self.undoGroup)
|
self.undoView = QtGui.QUndoView(self.undoGroup)
|
||||||
undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget")
|
self.undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget")
|
||||||
undoDockWidget.setWidget(self.undoView)
|
self.undoDockWidget.setWidget(self.undoView)
|
||||||
mainWindow.addDockWidget(Qt.RightDockWidgetArea, undoDockWidget)
|
mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.undoDockWidget)
|
||||||
mainWindow.panelsToolBar.addAction(undoDockWidget.toggleViewAction())
|
mainWindow.panelsToolBar.addAction(self.undoDockWidget.toggleViewAction())
|
||||||
undoDockWidget.close()
|
self.undoDockWidget.close()
|
||||||
|
|
||||||
self.logViewWidget = LogViewFrame(mainWindow)
|
self.logViewWidget = LogViewFrame(mainWindow)
|
||||||
self.logViewDockWidget = QtGui.QDockWidget("Error Log", mainWindow, objectName="ErrorsWidget")
|
self.logViewDockWidget = QtGui.QDockWidget("Error Log", mainWindow, objectName="ErrorsWidget")
|
||||||
@ -121,6 +121,8 @@ class MCEditApp(QtGui.QApplication):
|
|||||||
mainWindow.panelsToolBar.addAction(self.logViewDockWidget.toggleViewAction())
|
mainWindow.panelsToolBar.addAction(self.logViewDockWidget.toggleViewAction())
|
||||||
self.logViewDockWidget.close()
|
self.logViewDockWidget.close()
|
||||||
|
|
||||||
|
self.globalPanels = [self.undoDockWidget, self.logViewDockWidget]
|
||||||
|
|
||||||
# --- Debug Widgets ---
|
# --- Debug Widgets ---
|
||||||
|
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
@ -167,6 +169,8 @@ class MCEditApp(QtGui.QApplication):
|
|||||||
|
|
||||||
mainWindow.addDockWidget(Qt.BottomDockWidgetArea, infoDockWidget)
|
mainWindow.addDockWidget(Qt.BottomDockWidgetArea, infoDockWidget)
|
||||||
mainWindow.tabifyDockWidget(infoDockWidget, self.logViewDockWidget)
|
mainWindow.tabifyDockWidget(infoDockWidget, self.logViewDockWidget)
|
||||||
|
|
||||||
|
self.globalPanels.append(infoDockWidget)
|
||||||
mainWindow.panelsToolBar.addAction(infoDockWidget.toggleViewAction())
|
mainWindow.panelsToolBar.addAction(infoDockWidget.toggleViewAction())
|
||||||
infoDockWidget.close()
|
infoDockWidget.close()
|
||||||
|
|
||||||
@ -199,7 +203,7 @@ class MCEditApp(QtGui.QApplication):
|
|||||||
mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit)
|
mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit)
|
||||||
|
|
||||||
# -- Window Menu --
|
# -- Window Menu --
|
||||||
mainWindow.menuWindow.addAction(undoDockWidget.toggleViewAction())
|
mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction())
|
||||||
mainWindow.menuWindow.addAction(self.logViewDockWidget.toggleViewAction())
|
mainWindow.menuWindow.addAction(self.logViewDockWidget.toggleViewAction())
|
||||||
|
|
||||||
# --- World List ---
|
# --- World List ---
|
||||||
@ -376,6 +380,11 @@ class MCEditApp(QtGui.QApplication):
|
|||||||
for menu in session.menus:
|
for menu in session.menus:
|
||||||
menuBar.insertMenu(self.mainWindow.menuWindow.menuAction(), menu)
|
menuBar.insertMenu(self.mainWindow.menuWindow.menuAction(), menu)
|
||||||
|
|
||||||
|
self.mainWindow.panelsToolBar.clear()
|
||||||
|
for panel in self.globalPanels:
|
||||||
|
self.mainWindow.panelsToolBar.addAction(panel.toggleViewAction())
|
||||||
|
for panel in session.panels:
|
||||||
|
self.mainWindow.panelsToolBar.addAction(panel.toggleViewAction())
|
||||||
|
|
||||||
self.mainWindow.toolsToolBar.clear()
|
self.mainWindow.toolsToolBar.clear()
|
||||||
for action in session.toolActions:
|
for action in session.toolActions:
|
||||||
|
@ -8,6 +8,7 @@ from PySide.QtCore import Qt
|
|||||||
from mcedit2 import editortools
|
from mcedit2 import editortools
|
||||||
from mcedit2.command import SimpleRevisionCommand
|
from mcedit2.command import SimpleRevisionCommand
|
||||||
from mcedit2.rendering.blockmodels import BlockModels
|
from mcedit2.rendering.blockmodels import BlockModels
|
||||||
|
from mcedit2.panels.player import PlayerPanel
|
||||||
from mcedit2.util.dialogs import NotImplementedYet
|
from mcedit2.util.dialogs import NotImplementedYet
|
||||||
from mcedit2.util.resources import resourcePath
|
from mcedit2.util.resources import resourcePath
|
||||||
from mcedit2.util.showprogress import showProgress
|
from mcedit2.util.showprogress import showProgress
|
||||||
@ -131,6 +132,11 @@ class EditorSession(QtCore.QObject):
|
|||||||
|
|
||||||
self.editorOverlay = scenegraph.Node()
|
self.editorOverlay = scenegraph.Node()
|
||||||
|
|
||||||
|
# --- Panels ---
|
||||||
|
|
||||||
|
self.playerPanel = PlayerPanel(self)
|
||||||
|
self.panels = [self.playerPanel]
|
||||||
|
|
||||||
# --- Tools ---
|
# --- Tools ---
|
||||||
def PickToolAction(tool):
|
def PickToolAction(tool):
|
||||||
name = tool.name
|
name = tool.name
|
||||||
@ -438,6 +444,7 @@ class EditorTab(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
:type editorSession: mcedit2.editorsession.EditorSession
|
:type editorSession: mcedit2.editorsession.EditorSession
|
||||||
|
:rtype: EditorTab
|
||||||
"""
|
"""
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
|
|
||||||
@ -467,7 +474,6 @@ class EditorTab(QtGui.QWidget):
|
|||||||
|
|
||||||
self.viewStack = QtGui.QStackedWidget()
|
self.viewStack = QtGui.QStackedWidget()
|
||||||
|
|
||||||
|
|
||||||
self.miniMap = MinimapWorldView(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache)
|
self.miniMap = MinimapWorldView(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache)
|
||||||
self.miniMapDockWidget = QtGui.QDockWidget("Minimap", objectName="MinimapWidget", floating=True)
|
self.miniMapDockWidget = QtGui.QDockWidget("Minimap", objectName="MinimapWidget", floating=True)
|
||||||
self.miniMapDockWidget.setWidget(self.miniMap)
|
self.miniMapDockWidget.setWidget(self.miniMap)
|
||||||
@ -499,6 +505,7 @@ class EditorTab(QtGui.QWidget):
|
|||||||
|
|
||||||
self.cameraViewFrame = CameraWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap)
|
self.cameraViewFrame = CameraWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap)
|
||||||
self.cameraViewFrame.worldView.viewID = "Cam"
|
self.cameraViewFrame.worldView.viewID = "Cam"
|
||||||
|
self.cameraView = self.cameraViewFrame.worldView
|
||||||
self._addView(self.cameraViewFrame)
|
self._addView(self.cameraViewFrame)
|
||||||
|
|
||||||
self.viewStack.currentChanged.connect(self._viewChanged)
|
self.viewStack.currentChanged.connect(self._viewChanged)
|
||||||
|
@ -38,7 +38,6 @@ def ToolClasses():
|
|||||||
from . import generate
|
from . import generate
|
||||||
from . import edit_chunk
|
from . import edit_chunk
|
||||||
from . import edit_entity
|
from . import edit_entity
|
||||||
from . import edit_player
|
|
||||||
from . import select
|
from . import select
|
||||||
from . import flood_fill
|
from . import flood_fill
|
||||||
|
|
||||||
@ -49,7 +48,6 @@ def ToolClasses():
|
|||||||
generate.GenerateTool,
|
generate.GenerateTool,
|
||||||
edit_chunk.ChunkTool,
|
edit_chunk.ChunkTool,
|
||||||
edit_entity.EntityTool,
|
edit_entity.EntityTool,
|
||||||
edit_player.PlayerTool,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# global _scanned_modules
|
# global _scanned_modules
|
||||||
|
@ -1,74 +0,0 @@
|
|||||||
"""
|
|
||||||
player
|
|
||||||
"""
|
|
||||||
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
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class PlayerTool(EditorTool):
|
|
||||||
name = "Edit Player"
|
|
||||||
iconName = "edit_player"
|
|
||||||
|
|
||||||
def __init__(self, editorSession, *args, **kwargs):
|
|
||||||
"""
|
|
||||||
|
|
||||||
:type editorSession: EditorSession
|
|
||||||
"""
|
|
||||||
super(PlayerTool, self).__init__(editorSession, *args, **kwargs)
|
|
||||||
|
|
||||||
self.toolWidget = load_ui("editortools/edit_player.ui")
|
|
||||||
|
|
||||||
self.toolWidget.movePlayerButton.clicked.connect(self.movePlayerToCamera)
|
|
||||||
self.toolWidget.viewPlayerButton.clicked.connect(self.showPlayerView)
|
|
||||||
|
|
||||||
for name in editorSession.worldEditor.listPlayers(): # xxx live update?
|
|
||||||
self.toolWidget.playerListBox.addItem(name)
|
|
||||||
|
|
||||||
self.toolWidget.playerListBox.currentIndexChanged[str].connect(self.setSelectedPlayer)
|
|
||||||
|
|
||||||
self.selectedPlayer = None
|
|
||||||
|
|
||||||
for playerUUID in editorSession.worldEditor.listPlayers():
|
|
||||||
self.setSelectedPlayer(playerUUID)
|
|
||||||
break
|
|
||||||
|
|
||||||
def setSelectedPlayer(self, name):
|
|
||||||
self.selectedPlayer = player = self.editorSession.worldEditor.getPlayer(name)
|
|
||||||
|
|
||||||
model = NBTTreeModel(player.rootTag)
|
|
||||||
proxyModel = NBTFilterProxyModel(self)
|
|
||||||
proxyModel.setSourceModel(model)
|
|
||||||
proxyModel.setDynamicSortFilter(True)
|
|
||||||
|
|
||||||
self.toolWidget.treeView.setModel(proxyModel)
|
|
||||||
self.toolWidget.treeView.sortByColumn(0, Qt.AscendingOrder)
|
|
||||||
|
|
||||||
def movePlayerToCamera(self):
|
|
||||||
view = self.editorSession.editorTab.currentView()
|
|
||||||
if view.viewID == "Cam":
|
|
||||||
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.")
|
|
||||||
|
|
||||||
|
|
||||||
def showPlayerView(self):
|
|
||||||
self.editorSession.editorTab.showCameraView()
|
|
||||||
view = self.editorSession.editorTab.currentView()
|
|
||||||
view.centerPoint = self.selectedPlayer.Position
|
|
||||||
view.yawPitch = self.selectedPlayer.Rotation
|
|
7
src/mcedit2/panels/__init__.py
Normal file
7
src/mcedit2/panels/__init__.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
"""
|
||||||
|
__init__.py
|
||||||
|
"""
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
import logging
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
105
src/mcedit2/panels/player.py
Normal file
105
src/mcedit2/panels/player.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
"""
|
||||||
|
player
|
||||||
|
"""
|
||||||
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
import logging
|
||||||
|
from PySide import QtGui
|
||||||
|
from PySide.QtCore import Qt
|
||||||
|
from mcedit2.command import SimpleRevisionCommand
|
||||||
|
from mcedit2.nbt_treemodel import NBTTreeModel, NBTFilterProxyModel
|
||||||
|
from mcedit2.util.load_ui import load_ui
|
||||||
|
from mcedit2.util.resources import resourcePath
|
||||||
|
from mceditlib.exceptions import PlayerNotFound
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class PlayerPanel(QtGui.QWidget):
|
||||||
|
name = "Edit Player"
|
||||||
|
iconName = "edit_player"
|
||||||
|
|
||||||
|
def __init__(self, editorSession, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
|
||||||
|
:type editorSession: mcedit2.editorsession.EditorSession
|
||||||
|
:rtype: PlayerPanel
|
||||||
|
"""
|
||||||
|
super(PlayerPanel, self).__init__(*args, **kwargs)
|
||||||
|
self.editorSession = editorSession
|
||||||
|
load_ui("panels/player.ui", baseinstance=self)
|
||||||
|
|
||||||
|
self.movePlayerButton.clicked.connect(self.movePlayerToCamera)
|
||||||
|
self.viewPlayerButton.clicked.connect(self.showPlayerView)
|
||||||
|
|
||||||
|
for name in editorSession.worldEditor.listPlayers(): # xxx live update?
|
||||||
|
if name == "":
|
||||||
|
displayName = "[Single-player]"
|
||||||
|
else:
|
||||||
|
displayName = name
|
||||||
|
self.playerListBox.addItem(displayName, name)
|
||||||
|
|
||||||
|
self.playerListBox.currentIndexChanged[int].connect(self.setSelectedPlayer)
|
||||||
|
|
||||||
|
self.selectedPlayer = None
|
||||||
|
|
||||||
|
# for playerUUID in editorSession.worldEditor.listPlayers():
|
||||||
|
# self.setSelectedPlayer(playerUUID)
|
||||||
|
# break
|
||||||
|
|
||||||
|
icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png"))
|
||||||
|
action = QtGui.QAction(icon, "Edit Player", self)
|
||||||
|
action.setCheckable(True)
|
||||||
|
action.triggered.connect(self.toggleView)
|
||||||
|
self._toggleViewAction = action
|
||||||
|
|
||||||
|
def toggleView(self):
|
||||||
|
if self.isHidden():
|
||||||
|
self.show()
|
||||||
|
self._toggleViewAction.setChecked(True)
|
||||||
|
else:
|
||||||
|
self.hide()
|
||||||
|
self._toggleViewAction.setChecked(False)
|
||||||
|
|
||||||
|
def toggleViewAction(self):
|
||||||
|
return self._toggleViewAction
|
||||||
|
|
||||||
|
def setSelectedPlayer(self, index):
|
||||||
|
name = self.playerListBox.itemData(index)
|
||||||
|
try:
|
||||||
|
self.selectedPlayer = player = self.editorSession.worldEditor.getPlayer(name)
|
||||||
|
except PlayerNotFound:
|
||||||
|
log.info("PlayerPanel: player %s not found!", name)
|
||||||
|
self.treeView.setModel(None)
|
||||||
|
else:
|
||||||
|
model = NBTTreeModel(player.rootTag)
|
||||||
|
proxyModel = NBTFilterProxyModel(self)
|
||||||
|
proxyModel.setSourceModel(model)
|
||||||
|
proxyModel.setDynamicSortFilter(True)
|
||||||
|
|
||||||
|
self.treeView.setModel(proxyModel)
|
||||||
|
self.treeView.sortByColumn(0, Qt.AscendingOrder)
|
||||||
|
|
||||||
|
def movePlayerToCamera(self):
|
||||||
|
view = self.editorSession.editorTab.currentView()
|
||||||
|
if view.viewID == "Cam":
|
||||||
|
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.")
|
||||||
|
|
||||||
|
|
||||||
|
def showPlayerView(self):
|
||||||
|
self.editorSession.editorTab.showCameraView()
|
||||||
|
view = self.editorSession.editorTab.cameraView
|
||||||
|
view.setPerspective(False)
|
||||||
|
view = self.editorSession.editorTab.currentView()
|
||||||
|
view.centerPoint = self.selectedPlayer.Position
|
||||||
|
view.yawPitch = self.selectedPlayer.Rotation
|
@ -87,6 +87,9 @@
|
|||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>toolBar</string>
|
<string>toolBar</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||||
|
</property>
|
||||||
<attribute name="toolBarArea">
|
<attribute name="toolBarArea">
|
||||||
<enum>TopToolBarArea</enum>
|
<enum>TopToolBarArea</enum>
|
||||||
</attribute>
|
</attribute>
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string>Edit Players</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
Reference in New Issue
Block a user