Abt to cutscene
Some checks failed
Build Dusk / build-linux (push) Failing after 6m26s
Build Dusk / build-psp (push) Failing after 1m1s

This commit is contained in:
2025-11-25 08:45:12 -06:00
parent fe0529d021
commit 538079880d
4 changed files with 95 additions and 14 deletions

View File

@@ -11,7 +11,8 @@ from editortool.langtool import LangToolWindow
from editortool.cutscenetool import CutsceneToolWindow from editortool.cutscenetool import CutsceneToolWindow
DEFAULT_TOOL = None DEFAULT_TOOL = None
DEFAULT_TOOL = "map" # DEFAULT_TOOL = "map"
DEFAULT_TOOL = "cutscene"
TOOLS = [ TOOLS = [
("Map Editor", "map", MapWindow), ("Map Editor", "map", MapWindow),

View File

@@ -31,11 +31,16 @@ class CutsceneItemEditor(QWidget):
self.activeEditor = None self.activeEditor = None
# Events # Events
self.nameInput.textChanged.connect(self.onNameChanged)
self.typeDropdown.currentTextChanged.connect(self.onTypeChanged) self.typeDropdown.currentTextChanged.connect(self.onTypeChanged)
# First load # First load
self.onNameChanged(self.nameInput.text())
self.onTypeChanged(self.typeDropdown.currentText()) self.onTypeChanged(self.typeDropdown.currentText())
def onNameChanged(self, nameText):
pass
def onTypeChanged(self, typeText): def onTypeChanged(self, typeText):
typeKey = typeText.lower() typeKey = typeText.lower()

View File

@@ -0,0 +1,54 @@
from PyQt5.QtWidgets import QMenuBar, QAction, QFileDialog, QMessageBox
from PyQt5.QtGui import QKeySequence
class CutsceneMenuBar(QMenuBar):
def __init__(self, parent):
super().__init__(parent)
self.parent = parent
fileMenu = self.addMenu("File")
self.newAction = QAction("New", self)
self.newAction.setShortcut(QKeySequence.New)
self.newAction.triggered.connect(self.newFile)
fileMenu.addAction(self.newAction)
self.openAction = QAction("Open", self)
self.openAction.setShortcut(QKeySequence.Open)
self.openAction.triggered.connect(self.openFile)
fileMenu.addAction(self.openAction)
self.saveAction = QAction("Save", self)
self.saveAction.setShortcut(QKeySequence.Save)
self.saveAction.triggered.connect(self.saveFile)
fileMenu.addAction(self.saveAction)
self.saveAsAction = QAction("Save As", self)
self.saveAsAction.setShortcut(QKeySequence.SaveAs)
self.saveAsAction.triggered.connect(self.saveFileAs)
fileMenu.addAction(self.saveAsAction)
def newFile(self):
self.parent.clearCutscene()
def openFile(self):
path, _ = QFileDialog.getOpenFileName(self.parent, "Open Cutscene File", "", "JSON Files (*.json);;All Files (*)")
if not path:
return
# TODO: Load file contents into timeline
self.parent.currentFile = path
pass
def saveFile(self):
if not self.parent.currentFile:
self.saveFileAs()
return
# TODO: Save timeline to self.parent.currentFile
pass
def saveFileAs(self):
path, _ = QFileDialog.getSaveFileName(self.parent, "Save Cutscene File As", "", "JSON Files (*.json);;All Files (*)")
if path:
self.parent.currentFile = path
self.saveFile()

View File

@@ -1,5 +1,7 @@
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QListWidget, QListWidgetItem from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QListWidget, QListWidgetItem, QMenuBar, QAction, QFileDialog, QMessageBox
from editortool.cutscene.cutsceneitem import CutsceneItemEditor from PyQt5.QtGui import QKeySequence
from editortool.cutscene.cutsceneitemeditor import CutsceneItemEditor
from editortool.cutscene.cutscenemenubar import CutsceneMenuBar
import sys import sys
class CutsceneToolWindow(QMainWindow): class CutsceneToolWindow(QMainWindow):
@@ -8,6 +10,12 @@ class CutsceneToolWindow(QMainWindow):
self.setWindowTitle("Dusk Cutscene Editor") self.setWindowTitle("Dusk Cutscene Editor")
self.setGeometry(100, 100, 800, 600) self.setGeometry(100, 100, 800, 600)
self.nextItemNumber = 1 # Track next available number self.nextItemNumber = 1 # Track next available number
self.currentFile = None
self.dirty = False # Track unsaved changes
# File menu (handled by CutsceneMenuBar)
menubar = CutsceneMenuBar(self)
self.setMenuBar(menubar)
# Main layout: horizontal split # Main layout: horizontal split
central = QWidget() central = QWidget()
@@ -44,21 +52,34 @@ class CutsceneToolWindow(QMainWindow):
def addCutsceneItem(self): def addCutsceneItem(self):
name = f"Cutscene item {self.nextItemNumber}" name = f"Cutscene item {self.nextItemNumber}"
item = QListWidgetItem(name) timelineItem = QListWidgetItem(name)
self.timelineList.addItem(item) self.timelineList.addItem(timelineItem)
self.timelineList.setCurrentItem(item) self.timelineList.setCurrentItem(timelineItem)
self.nextItemNumber += 1 self.nextItemNumber += 1
self.dirty = True
def removeCutsceneItem(self): def removeCutsceneItem(self):
row = self.timelineList.currentRow() row = self.timelineList.currentRow()
if row >= 0: if row < 0:
self.timelineList.takeItem(row) return
# Remove editor if nothing selected self.timelineList.takeItem(row)
if self.timelineList.currentItem() is None: self.dirty = True
if self.itemEditor:
self.editorLayout.removeWidget(self.itemEditor) # Remove editor if nothing selected
self.itemEditor.deleteLater() if self.timelineList.currentItem() is None or self.itemEditor is None:
self.itemEditor = None return
self.editorLayout.removeWidget(self.itemEditor)
self.itemEditor.deleteLater()
self.itemEditor = None
def clearCutscene(self):
self.timelineList.clear()
self.nextItemNumber = 1
self.currentFile = None
self.dirty = False
if self.itemEditor:
self.editorLayout.removeWidget(self.itemEditor)
def onItemSelected(self, current, previous): def onItemSelected(self, current, previous):
if current: if current: