From 550701557c1e021e45bddff92ad1a2e8c808e8e0 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sun, 14 Jul 2024 03:40:03 -0400 Subject: NEW LEVEL EDITOR!!!! --- .../net/sowgro/npehero/devmenu/DiffEditor.java | 131 +++++++++++++++------ 1 file changed, 97 insertions(+), 34 deletions(-) (limited to 'src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java') diff --git a/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java b/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java index 4bb55e4..74cfab6 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java @@ -1,52 +1,57 @@ package net.sowgro.npehero.devmenu; -import java.io.FileNotFoundException; -import java.io.UnsupportedEncodingException; - +import javafx.beans.binding.DoubleBinding; +import javafx.geometry.Pos; +import javafx.scene.control.ScrollPane; +import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; +import javafx.scene.paint.Color; import net.sowgro.npehero.Driver; +import net.sowgro.npehero.gameplay.Block; import net.sowgro.npehero.gui.LevelSurround; -import net.sowgro.npehero.gui.MainMenu; -import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.scene.text.Text; -import javafx.stage.Stage; import net.sowgro.npehero.main.Difficulty; +import net.sowgro.npehero.main.Note; public class DiffEditor extends Pane { + Difficulty diff; + ScrollPane scroll; + + public Pane prev; /* * this class is a layout class, most of its purpose is to place UI elements like Buttons within Panes like VBoxes. * the creation of these UI elements are mostly not commented due to their repetitive and self explanatory nature. * style classes are defined in the style.css file. */ - public DiffEditor(Difficulty diff) + public DiffEditor(Difficulty diff, Pane prev) { - Stage primaryStage = new Stage(); + this.diff = diff; + this.prev = prev; - Text folderNameLabel = new Text("Folder name (ordered alphabetically)"); + Text folderNameLabel = new Text("Folder name"); TextField folderName = new TextField(diff.thisDir.getName()); folderName.setDisable(true); Text titleLabel = new Text("Title"); TextField title = new TextField(diff.title); - Text bpmLabel = new Text("BPM"); - TextField bpm = new TextField(diff.bpm+""); - - Text numBeatsLabel = new Text("Number of beats (set by notes editor)"); - TextField numBeats = new TextField(diff.numBeats+""); - - Text priorityLabel = new Text("priority (lower first)"); + Text priorityLabel = new Text("Order (lower first)"); TextField priority = new TextField(diff.priority+""); Button editNotes = new Button("Edit notes"); editNotes.setOnAction(e -> { + Driver.setMenu(new NotesEditor2(diff, this)); + }); + + Button oldEditNotes = new Button("Edit notes (legacy)"); + oldEditNotes.setOnAction(_ -> { try { - new NotesEditor(diff); - } catch (FileNotFoundException | UnsupportedEncodingException e1) { + Driver.setMenu(new NotesEditor(diff, this)); + } catch (Exception e1) { e1.printStackTrace(); } }); @@ -54,28 +59,86 @@ public class DiffEditor extends Pane Button editScores = new Button("Clear leaderboard"); editScores.setOnAction(e -> diff.getLeaderboard().clear()); - Button playLevel = new Button("Launch level"); - playLevel.setOnAction(e -> Driver.setMenu(new LevelSurround(diff.level, diff, new MainMenu()))); - - Button refresh = new Button("Refresh"); - refresh.setOnAction( e -> { - numBeats.setText(diff.numBeats+""); - }); + Button playLevel = new Button("Play level"); + playLevel.setOnAction(e -> Driver.setMenu(new LevelSurround(diff.level, diff, this))); Button save = new Button("Save"); - save.setOnAction(e -> { //assigns text feilds to values + save.setOnAction(e -> { //assigns text fields to values diff.title = title.getText(); - diff.bpm = Double.parseDouble(bpm.getText()); - diff.numBeats = Integer.parseInt(numBeats.getText()); +// diff.bpm = Double.parseDouble(bpm.getText()); +// diff.numBeats = Integer.parseInt(numBeats.getText()); diff.priority = Integer.parseInt(priority.getText()); diff.writeMetadata(); }); - VBox main = new VBox(); - main.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,bpmLabel,bpm,numBeatsLabel,numBeats,refresh,priorityLabel,priority,editNotes,editScores,playLevel,save); -// Scene scene = new Scene(main); -// primaryStage.setScene(scene); -// primaryStage.show(); - super.getChildren().add(main); + HBox content = new HBox(); + ScrollPane scroll = new ScrollPane(content); + this.scroll = scroll; + scroll.getStyleClass().remove("scroll-pane"); + scroll.getStyleClass().add("box"); + scroll.setPrefHeight(400); + + Pane[] lanes = new Pane[5]; + for (int i = 0; i < lanes.length; i++) { + lanes[i] = new Pane(); + } + + content.getChildren().addAll(lanes); + + diff.notes.list.forEach(n -> lanes[n.lane].getChildren().add(drawNote(n))); + + VBox notePreview = new VBox(scroll); + notePreview.getChildren().addAll(editNotes,oldEditNotes); + notePreview.setSpacing(10); + + VBox left = new VBox(); + left.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,priorityLabel,priority,editScores,playLevel,save); + left.setSpacing(10); + + HBox main = new HBox(); + main.getChildren().addAll(left, notePreview); + main.setSpacing(30); + + Button exit = new Button(); + exit.setText("Back"); + exit.setOnAction(e -> { + Driver.soundController.playSfx("backward"); + Driver.setMenu(prev); + }); + + VBox centerBox = new VBox(); + centerBox.setAlignment(Pos.CENTER); + centerBox.setSpacing(10); + centerBox.getChildren().addAll(main,exit); + centerBox.setMinWidth(400); + + HBox rootBox = new HBox(); + rootBox.prefWidthProperty().bind(super.prefWidthProperty()); + rootBox.prefHeightProperty().bind(super.prefHeightProperty()); + rootBox.getChildren().add(centerBox); + rootBox.setAlignment(Pos.CENTER); + + super.getChildren().add(rootBox); + } + + // Duplicates of NotesEditor2 methods, should be made generic and combined + private Block drawNote(Note n) { + Color color = diff.level.colors[n.lane]; + Block b = new Block(color,20, 20, 5, false, n); + b.heightProperty().bind(scroll.widthProperty().divide(8)); + b.widthProperty().bind(scroll.widthProperty().divide(8)); + b.arcHeightProperty().bind(scroll.widthProperty().divide(25)); + b.arcWidthProperty().bind(scroll.widthProperty().divide(25)); + b.strokeWidthProperty().bind(scroll.widthProperty().divide(120)); + b.layoutYProperty().bind(secondToScreenPos(n.time.add(0))); + return b; + } + + private DoubleBinding secondToScreenPos(double second) { + return scroll.heightProperty().multiply(second * 0.9); + } + + private DoubleBinding secondToScreenPos(DoubleBinding second) { + return scroll.heightProperty().multiply(second).multiply(0.9); } } \ No newline at end of file -- cgit v1.2.3