Prep ent
This commit is contained in:
@@ -177,27 +177,6 @@ class Tile:
|
|||||||
def buffer(self, vertexBuffer):
|
def buffer(self, vertexBuffer):
|
||||||
if self.shape == TILE_SHAPE_NULL:
|
if self.shape == TILE_SHAPE_NULL:
|
||||||
return
|
return
|
||||||
# Old code:
|
|
||||||
# if self.x != 0 or self.y != 0 or self.z != 0:
|
|
||||||
# return # Only buffer the tile at (0,0,0)
|
|
||||||
# Center tile.
|
|
||||||
# x = self.posX - TILE_WIDTH / 2.0
|
|
||||||
# y = self.posY - TILE_HEIGHT / 2.0
|
|
||||||
# z = self.posZ - TILE_DEPTH / 2.0
|
|
||||||
# w = TILE_WIDTH
|
|
||||||
# h = TILE_HEIGHT
|
|
||||||
# d = TILE_DEPTH
|
|
||||||
|
|
||||||
# # Quad on the XY plane at z
|
|
||||||
# vertexBuffer.vertices.extend([
|
|
||||||
# x, y, z, # bottom left
|
|
||||||
# x + w, y, z, # bottom right
|
|
||||||
# x + w, y + h, z, # top right
|
|
||||||
|
|
||||||
# x, y, z, # bottom left
|
|
||||||
# x + w, y + h, z, # top right
|
|
||||||
# x, y + h, z # top left
|
|
||||||
# ])
|
|
||||||
|
|
||||||
# New code:
|
# New code:
|
||||||
baseData = self.getBaseTileModel()
|
baseData = self.getBaseTileModel()
|
||||||
|
|||||||
@@ -8,13 +8,15 @@ from OpenGL.GL import *
|
|||||||
from OpenGL.GLU import *
|
from OpenGL.GLU import *
|
||||||
from editortool.maptool import MapWindow
|
from editortool.maptool import MapWindow
|
||||||
from editortool.langtool import LangToolWindow
|
from editortool.langtool import LangToolWindow
|
||||||
|
from editortool.cutscenetool import CutsceneToolWindow
|
||||||
|
|
||||||
# DEFAULT_TOOL = None
|
DEFAULT_TOOL = None
|
||||||
DEFAULT_TOOL = "map"
|
DEFAULT_TOOL = "map"
|
||||||
|
|
||||||
TOOLS = [
|
TOOLS = [
|
||||||
("Map Editor", "map", MapWindow),
|
("Map Editor", "map", MapWindow),
|
||||||
("Language Editor", "language", LangToolWindow)
|
("Language Editor", "language", LangToolWindow),
|
||||||
|
("Cutscene Editor", "cutscene", CutsceneToolWindow),
|
||||||
]
|
]
|
||||||
|
|
||||||
class EditorChoiceDialog(QDialog):
|
class EditorChoiceDialog(QDialog):
|
||||||
|
|||||||
53
tools/editortool/cutscene/cutsceneitem.py
Normal file
53
tools/editortool/cutscene/cutsceneitem.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLineEdit, QLabel, QSizePolicy, QComboBox, QHBoxLayout, QSpacerItem
|
||||||
|
from PyQt5.QtCore import Qt, pyqtSignal
|
||||||
|
from .cutscenewait import CutsceneWaitEditor
|
||||||
|
from .cutscenetext import CutsceneTextEditor
|
||||||
|
|
||||||
|
EDITOR_MAP = (
|
||||||
|
( "wait", "Wait", CutsceneWaitEditor ),
|
||||||
|
( "text", "Text", CutsceneTextEditor )
|
||||||
|
)
|
||||||
|
|
||||||
|
class CutsceneItemEditor(QWidget):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.layout = QVBoxLayout(self)
|
||||||
|
self.layout.setAlignment(Qt.AlignTop | Qt.AlignLeft)
|
||||||
|
self.layout.addWidget(QLabel("Item Properties:"))
|
||||||
|
|
||||||
|
rowLayout = QHBoxLayout()
|
||||||
|
rowLayout.setSpacing(8)
|
||||||
|
|
||||||
|
rowLayout.addWidget(QLabel("Name:"))
|
||||||
|
self.nameInput = QLineEdit()
|
||||||
|
rowLayout.addWidget(self.nameInput)
|
||||||
|
|
||||||
|
rowLayout.addWidget(QLabel("Type:"))
|
||||||
|
self.typeDropdown = QComboBox()
|
||||||
|
self.typeDropdown.addItems([typeName for typeKey, typeName, editorClass in EDITOR_MAP])
|
||||||
|
rowLayout.addWidget(self.typeDropdown)
|
||||||
|
self.layout.addLayout(rowLayout)
|
||||||
|
|
||||||
|
self.activeEditor = None
|
||||||
|
|
||||||
|
# Events
|
||||||
|
self.typeDropdown.currentTextChanged.connect(self.onTypeChanged)
|
||||||
|
|
||||||
|
# First load
|
||||||
|
self.onTypeChanged(self.typeDropdown.currentText())
|
||||||
|
|
||||||
|
def onTypeChanged(self, typeText):
|
||||||
|
typeKey = typeText.lower()
|
||||||
|
|
||||||
|
# Remove existing editor
|
||||||
|
if self.activeEditor:
|
||||||
|
self.layout.removeWidget(self.activeEditor)
|
||||||
|
self.activeEditor.deleteLater()
|
||||||
|
self.activeEditor = None
|
||||||
|
|
||||||
|
# Create new editor
|
||||||
|
for key, name, editorClass in EDITOR_MAP:
|
||||||
|
if key == typeKey:
|
||||||
|
self.activeEditor = editorClass()
|
||||||
|
self.layout.addWidget(self.activeEditor)
|
||||||
|
break
|
||||||
21
tools/editortool/cutscene/cutscenetext.py
Normal file
21
tools/editortool/cutscene/cutscenetext.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QTextEdit
|
||||||
|
from PyQt5.QtCore import Qt
|
||||||
|
|
||||||
|
class CutsceneTextEditor(QWidget):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
layout = QVBoxLayout(self)
|
||||||
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
layout.setSpacing(0)
|
||||||
|
label = QLabel("Text:")
|
||||||
|
label.setSizePolicy(label.sizePolicy().Expanding, label.sizePolicy().Fixed)
|
||||||
|
layout.addWidget(label)
|
||||||
|
self.textInput = QTextEdit()
|
||||||
|
self.textInput.setSizePolicy(self.textInput.sizePolicy().Expanding, self.textInput.sizePolicy().Expanding)
|
||||||
|
layout.addWidget(self.textInput, stretch=1)
|
||||||
|
|
||||||
|
def setText(self, text):
|
||||||
|
self.textInput.setPlainText(text)
|
||||||
|
|
||||||
|
def getText(self):
|
||||||
|
return self.textInput.toPlainText()
|
||||||
20
tools/editortool/cutscene/cutscenewait.py
Normal file
20
tools/editortool/cutscene/cutscenewait.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
from PyQt5.QtWidgets import QWidget, QFormLayout, QDoubleSpinBox, QLabel
|
||||||
|
|
||||||
|
class CutsceneWaitEditor(QWidget):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
layout = QFormLayout(self)
|
||||||
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
layout.setSpacing(0)
|
||||||
|
self.waitTimeInput = QDoubleSpinBox()
|
||||||
|
self.waitTimeInput.setMinimum(0.0)
|
||||||
|
self.waitTimeInput.setMaximum(9999.0)
|
||||||
|
self.waitTimeInput.setDecimals(2)
|
||||||
|
self.waitTimeInput.setSingleStep(0.1)
|
||||||
|
layout.addRow(QLabel("Wait Time (seconds):"), self.waitTimeInput)
|
||||||
|
|
||||||
|
def setWaitTime(self, value):
|
||||||
|
self.waitTimeInput.setValue(value)
|
||||||
|
|
||||||
|
def getWaitTime(self):
|
||||||
|
return self.waitTimeInput.value()
|
||||||
80
tools/editortool/cutscenetool.py
Normal file
80
tools/editortool/cutscenetool.py
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QListWidget, QListWidgetItem
|
||||||
|
from editortool.cutscene.cutsceneitem import CutsceneItemEditor
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class CutsceneToolWindow(QMainWindow):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.setWindowTitle("Dusk Cutscene Editor")
|
||||||
|
self.setGeometry(100, 100, 800, 600)
|
||||||
|
self.nextItemNumber = 1 # Track next available number
|
||||||
|
|
||||||
|
# Main layout: horizontal split
|
||||||
|
central = QWidget()
|
||||||
|
mainLayout = QHBoxLayout(central)
|
||||||
|
self.setCentralWidget(central)
|
||||||
|
|
||||||
|
# Timeline
|
||||||
|
leftPanel = QWidget()
|
||||||
|
leftLayout = QVBoxLayout(leftPanel)
|
||||||
|
|
||||||
|
self.timelineList = QListWidget()
|
||||||
|
self.timelineList.setSelectionMode(QListWidget.SingleSelection)
|
||||||
|
leftLayout.addWidget(QLabel("Cutscene Timeline"))
|
||||||
|
leftLayout.addWidget(self.timelineList)
|
||||||
|
|
||||||
|
btnLayout = QHBoxLayout()
|
||||||
|
self.addBtn = QPushButton("Add")
|
||||||
|
self.removeBtn = QPushButton("Remove")
|
||||||
|
btnLayout.addWidget(self.addBtn)
|
||||||
|
btnLayout.addWidget(self.removeBtn)
|
||||||
|
leftLayout.addLayout(btnLayout)
|
||||||
|
mainLayout.addWidget(leftPanel, 2)
|
||||||
|
|
||||||
|
# Property editor
|
||||||
|
self.editorPanel = QWidget()
|
||||||
|
self.editorLayout = QVBoxLayout(self.editorPanel)
|
||||||
|
self.itemEditor = None # Only create when needed
|
||||||
|
mainLayout.addWidget(self.editorPanel, 3)
|
||||||
|
|
||||||
|
# Events
|
||||||
|
self.timelineList.currentItemChanged.connect(self.onItemSelected)
|
||||||
|
self.addBtn.clicked.connect(self.addCutsceneItem)
|
||||||
|
self.removeBtn.clicked.connect(self.removeCutsceneItem)
|
||||||
|
|
||||||
|
def addCutsceneItem(self):
|
||||||
|
name = f"Cutscene item {self.nextItemNumber}"
|
||||||
|
item = QListWidgetItem(name)
|
||||||
|
self.timelineList.addItem(item)
|
||||||
|
self.timelineList.setCurrentItem(item)
|
||||||
|
self.nextItemNumber += 1
|
||||||
|
|
||||||
|
def removeCutsceneItem(self):
|
||||||
|
row = self.timelineList.currentRow()
|
||||||
|
if row >= 0:
|
||||||
|
self.timelineList.takeItem(row)
|
||||||
|
# Remove editor if nothing selected
|
||||||
|
if self.timelineList.currentItem() is None:
|
||||||
|
if self.itemEditor:
|
||||||
|
self.editorLayout.removeWidget(self.itemEditor)
|
||||||
|
self.itemEditor.deleteLater()
|
||||||
|
self.itemEditor = None
|
||||||
|
|
||||||
|
def onItemSelected(self, current, previous):
|
||||||
|
if current:
|
||||||
|
if not self.itemEditor:
|
||||||
|
self.itemEditor = CutsceneItemEditor()
|
||||||
|
self.editorLayout.addWidget(self.itemEditor)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not self.itemEditor:
|
||||||
|
return
|
||||||
|
self.editorLayout.removeWidget(self.itemEditor)
|
||||||
|
self.itemEditor.deleteLater()
|
||||||
|
self.itemEditor = None
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
window = CutsceneToolWindow()
|
||||||
|
window.show()
|
||||||
|
sys.exit(app.exec_())
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
from PyQt5.QtWidgets import QMainWindow, QWidget, QHBoxLayout, QMessageBox
|
from PyQt5.QtWidgets import QMainWindow, QWidget, QHBoxLayout, QMessageBox, QTabWidget
|
||||||
from PyQt5.QtCore import Qt
|
from PyQt5.QtCore import Qt
|
||||||
from editortool.map.glwidget import GLWidget
|
from editortool.map.glwidget import GLWidget
|
||||||
from editortool.map.chunkpanel import ChunkPanel
|
from editortool.map.chunkpanel import ChunkPanel
|
||||||
@@ -36,10 +36,14 @@ class MapWindow(QMainWindow):
|
|||||||
self.setCentralWidget(central)
|
self.setCentralWidget(central)
|
||||||
mainLayout = QHBoxLayout(central)
|
mainLayout = QHBoxLayout(central)
|
||||||
|
|
||||||
# Left panel (ChunkPanel)
|
# Tabs (left)
|
||||||
|
self.tabs = QTabWidget()
|
||||||
|
|
||||||
self.chunkPanel = ChunkPanel(self)
|
self.chunkPanel = ChunkPanel(self)
|
||||||
self.chunkPanel.setFixedWidth(200)
|
self.chunkPanel.setFixedWidth(200)
|
||||||
mainLayout.addWidget(self.chunkPanel)
|
self.tabs.addTab(self.chunkPanel, "Tile Editor")
|
||||||
|
|
||||||
|
mainLayout.addWidget(self.tabs)
|
||||||
|
|
||||||
# Center panel (GLWidget + controls)
|
# Center panel (GLWidget + controls)
|
||||||
self.glWidget = GLWidget(self)
|
self.glWidget = GLWidget(self)
|
||||||
|
|||||||
Reference in New Issue
Block a user