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.currentChanged.connect(self.tabChanged)
|
||||
|
||||
# --- Sessions
|
||||
# --- Sessions ---
|
||||
|
||||
self._currentSession = None
|
||||
self.sessions = []
|
||||
self.sessionDockWidgets = []
|
||||
self.sessionChanged.connect(self.sessionDidChange)
|
||||
|
||||
# --- Dock Widgets ---
|
||||
# --- Panel Widgets ---
|
||||
|
||||
self.undoView = QtGui.QUndoView(self.undoGroup)
|
||||
undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget")
|
||||
undoDockWidget.setWidget(self.undoView)
|
||||
mainWindow.addDockWidget(Qt.RightDockWidgetArea, undoDockWidget)
|
||||
mainWindow.panelsToolBar.addAction(undoDockWidget.toggleViewAction())
|
||||
undoDockWidget.close()
|
||||
self.undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget")
|
||||
self.undoDockWidget.setWidget(self.undoView)
|
||||
mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.undoDockWidget)
|
||||
mainWindow.panelsToolBar.addAction(self.undoDockWidget.toggleViewAction())
|
||||
self.undoDockWidget.close()
|
||||
|
||||
self.logViewWidget = LogViewFrame(mainWindow)
|
||||
self.logViewDockWidget = QtGui.QDockWidget("Error Log", mainWindow, objectName="ErrorsWidget")
|
||||
@ -121,6 +121,8 @@ class MCEditApp(QtGui.QApplication):
|
||||
mainWindow.panelsToolBar.addAction(self.logViewDockWidget.toggleViewAction())
|
||||
self.logViewDockWidget.close()
|
||||
|
||||
self.globalPanels = [self.undoDockWidget, self.logViewDockWidget]
|
||||
|
||||
# --- Debug Widgets ---
|
||||
|
||||
if DEBUG:
|
||||
@ -167,6 +169,8 @@ class MCEditApp(QtGui.QApplication):
|
||||
|
||||
mainWindow.addDockWidget(Qt.BottomDockWidgetArea, infoDockWidget)
|
||||
mainWindow.tabifyDockWidget(infoDockWidget, self.logViewDockWidget)
|
||||
|
||||
self.globalPanels.append(infoDockWidget)
|
||||
mainWindow.panelsToolBar.addAction(infoDockWidget.toggleViewAction())
|
||||
infoDockWidget.close()
|
||||
|
||||
@ -199,7 +203,7 @@ class MCEditApp(QtGui.QApplication):
|
||||
mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit)
|
||||
|
||||
# -- Window Menu --
|
||||
mainWindow.menuWindow.addAction(undoDockWidget.toggleViewAction())
|
||||
mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction())
|
||||
mainWindow.menuWindow.addAction(self.logViewDockWidget.toggleViewAction())
|
||||
|
||||
# --- World List ---
|
||||
@ -376,6 +380,11 @@ class MCEditApp(QtGui.QApplication):
|
||||
for menu in session.menus:
|
||||
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()
|
||||
for action in session.toolActions:
|
||||
|
@ -8,6 +8,7 @@ from PySide.QtCore import Qt
|
||||
from mcedit2 import editortools
|
||||
from mcedit2.command import SimpleRevisionCommand
|
||||
from mcedit2.rendering.blockmodels import BlockModels
|
||||
from mcedit2.panels.player import PlayerPanel
|
||||
from mcedit2.util.dialogs import NotImplementedYet
|
||||
from mcedit2.util.resources import resourcePath
|
||||
from mcedit2.util.showprogress import showProgress
|
||||
@ -131,6 +132,11 @@ class EditorSession(QtCore.QObject):
|
||||
|
||||
self.editorOverlay = scenegraph.Node()
|
||||
|
||||
# --- Panels ---
|
||||
|
||||
self.playerPanel = PlayerPanel(self)
|
||||
self.panels = [self.playerPanel]
|
||||
|
||||
# --- Tools ---
|
||||
def PickToolAction(tool):
|
||||
name = tool.name
|
||||
@ -438,6 +444,7 @@ class EditorTab(QtGui.QWidget):
|
||||
"""
|
||||
|
||||
:type editorSession: mcedit2.editorsession.EditorSession
|
||||
:rtype: EditorTab
|
||||
"""
|
||||
settings = Settings()
|
||||
|
||||
@ -467,7 +474,6 @@ class EditorTab(QtGui.QWidget):
|
||||
|
||||
self.viewStack = QtGui.QStackedWidget()
|
||||
|
||||
|
||||
self.miniMap = MinimapWorldView(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache)
|
||||
self.miniMapDockWidget = QtGui.QDockWidget("Minimap", objectName="MinimapWidget", floating=True)
|
||||
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.worldView.viewID = "Cam"
|
||||
self.cameraView = self.cameraViewFrame.worldView
|
||||
self._addView(self.cameraViewFrame)
|
||||
|
||||
self.viewStack.currentChanged.connect(self._viewChanged)
|
||||
|
@ -38,7 +38,6 @@ def ToolClasses():
|
||||
from . import generate
|
||||
from . import edit_chunk
|
||||
from . import edit_entity
|
||||
from . import edit_player
|
||||
from . import select
|
||||
from . import flood_fill
|
||||
|
||||
@ -49,7 +48,6 @@ def ToolClasses():
|
||||
generate.GenerateTool,
|
||||
edit_chunk.ChunkTool,
|
||||
edit_entity.EntityTool,
|
||||
edit_player.PlayerTool,
|
||||
)
|
||||
|
||||
# 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">
|
||||
<string>toolBar</string>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
|
@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
<string>Edit Players</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
Reference in New Issue
Block a user