diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-23 00:24:44 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-23 00:24:44 -0400 |
commit | aae98b8bfca1578c14d6dde3a2f3180c7c580131 (patch) | |
tree | a01dbb81ce6289c72b172b040a0a8185faaefd8e /src/main/java/net/sowgro/npehero/editor | |
parent | 231c511304915d80aab89d28779d7445ad21ef70 (diff) | |
download | NPEhero-aae98b8bfca1578c14d6dde3a2f3180c7c580131.tar.gz NPEhero-aae98b8bfca1578c14d6dde3a2f3180c7c580131.tar.bz2 NPEhero-aae98b8bfca1578c14d6dde3a2f3180c7c580131.zip |
Improve difficulty ordering and add songEnd and support multiple file types.
Diffstat (limited to '')
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/DiffEditor.java (renamed from src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java) | 32 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/DiffList.java (renamed from src/main/java/net/sowgro/npehero/devmenu/DiffList.java) | 38 | ||||
-rw-r--r-- | src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java (renamed from src/main/java/net/sowgro/npehero/devmenu/ErrorDisplay.java) | 2 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/LevelEditor.java (renamed from src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java) | 40 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/LevelList.java (renamed from src/main/java/net/sowgro/npehero/devmenu/LevelList.java) | 2 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/NotesEditor.java (renamed from src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java) | 4 | ||||
-rw-r--r-- | src/main/java/net/sowgro/npehero/editor/NotesEditor2.java (renamed from src/main/java/net/sowgro/npehero/devmenu/NotesEditor2.java) | 67 |
7 files changed, 134 insertions, 51 deletions
diff --git a/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java index 11ee274..f98ff46 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java @@ -1,17 +1,14 @@ -package net.sowgro.npehero.devmenu; +package net.sowgro.npehero.editor; import javafx.beans.binding.DoubleBinding; import javafx.geometry.Pos; -import javafx.scene.control.Label; -import javafx.scene.control.ScrollPane; +import javafx.scene.control.*; 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 javafx.scene.control.Button; -import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import net.sowgro.npehero.main.*; @@ -36,17 +33,19 @@ public class DiffEditor extends Page Text titleLabel = new Text("Title"); TextField title = new TextField(diff.title); - Text priorityLabel = new Text("Order (lower first)"); - TextField priority = new TextField(diff.priority+""); - Button editNotes = new Button("Edit notes"); editNotes.setOnAction(_ -> { if (diff.level.song == null) { Driver.setMenu(new ErrorDisplay("You must import a song file before editing the notes!", this)); } - else { - Driver.setMenu(new NotesEditor2(diff, this)); + if (diff.bpm != 0.0) { + Driver.setMenu(new ErrorDisplay( + "Note:\nThe new notes editor does not support bpm and beat based songs. If you continue the beats will be converted to seconds.", + this, + new NotesEditor2(diff, this) + )); } + Driver.setMenu(new NotesEditor2(diff, this)); }); Button oldEditNotes = new Button("Edit notes (legacy)"); @@ -56,6 +55,7 @@ public class DiffEditor extends Page new NotesEditor(diff, this)) )); + Label scoresLable = new Label("Scores"); Button editScores = new Button("Clear leaderboard"); editScores.setOnAction(_ -> diff.leaderboard.entries.clear()); @@ -74,14 +74,12 @@ public class DiffEditor extends Page diff.title = title.getText(); // diff.bpm = Double.parseDouble(bpm.getText()); // diff.numBeats = Integer.parseInt(numBeats.getText()); - diff.priority = Integer.parseInt(priority.getText()); diff.write(); }); HBox scrollContent = new HBox(); - ScrollPane scroll = new ScrollPane(scrollContent); + scroll = new ScrollPane(scrollContent); scroll.setFitToWidth(true); - this.scroll = scroll; scroll.getStyleClass().remove("scroll-pane"); scroll.getStyleClass().add("box"); // scroll.setPrefHeight(400); @@ -112,7 +110,7 @@ public class DiffEditor extends Page notePreview.setSpacing(10); VBox left = new VBox(); - left.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,priorityLabel,priority,editScores,playLevel,save); + left.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,scoresLable,editScores,playLevel); left.setSpacing(10); HBox main = new HBox(); @@ -126,8 +124,12 @@ public class DiffEditor extends Page Driver.setMenu(prev); }); + HBox bottom = new HBox(exit,save); + bottom.setSpacing(10); + bottom.setAlignment(Pos.CENTER); + VBox centerBox = new VBox(); - centerBox.getChildren().addAll(main, exit); + centerBox.getChildren().addAll(main, bottom); centerBox.setSpacing(10); centerBox.setAlignment(Pos.CENTER); diff --git a/src/main/java/net/sowgro/npehero/devmenu/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java index 63c09bb..13e4795 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/DiffList.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java @@ -1,6 +1,7 @@ -package net.sowgro.npehero.devmenu; +package net.sowgro.npehero.editor; import javafx.beans.property.ReadOnlyStringWrapper; +import javafx.collections.ObservableList; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.*; @@ -13,6 +14,8 @@ import net.sowgro.npehero.main.Level; import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; +import java.util.Collections; + public class DiffList extends Page { private HBox content = new HBox(); @@ -66,14 +69,41 @@ public class DiffList extends Page Button refresh = new Button("Refresh"); refresh.setOnAction(e -> { - level.readData(); - diffs.setItems(level.difficulties.list); +// level.readData(); +// diffs.setItems(level.difficulties.list.sorted()); + diffs.refresh(); }); ToggleButton create = new ToggleButton("Create"); + Button moveUp = new Button("Move Up"); + moveUp.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); + moveUp.setOnAction(_ -> { + Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get(); + ObservableList<Difficulty> diffList = level.difficulties.list; + int oldIndex = diffList.indexOf(diff); + if (oldIndex <= 0) { + return; + } + Collections.swap(diffList, oldIndex, oldIndex-1); + level.difficulties.saveOrder(); + }); + + Button moveDown = new Button("Move Down"); + moveDown.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); + moveDown.setOnAction(_ -> { + Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get(); + ObservableList<Difficulty> diffList = level.difficulties.list; + int oldIndex = diffList.indexOf(diff); + if (oldIndex >= diffList.size()-1) { + return; + } + Collections.swap(diffList, oldIndex, oldIndex+1); + level.difficulties.saveOrder(); + }); + VBox buttons = new VBox(); - buttons.getChildren().addAll(create, edit, remove, refresh); + buttons.getChildren().addAll(create, edit, remove, moveUp, moveDown, refresh); buttons.setSpacing(10); TextField newLevelEntry = new TextField(); diff --git a/src/main/java/net/sowgro/npehero/devmenu/ErrorDisplay.java b/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java index dc4b40c..b3ec751 100644 --- a/src/main/java/net/sowgro/npehero/devmenu/ErrorDisplay.java +++ b/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java @@ -1,4 +1,4 @@ -package net.sowgro.npehero.devmenu; +package net.sowgro.npehero.editor; import javafx.geometry.Insets; import javafx.geometry.Pos; diff --git a/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java index 003f929..56a2924 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java @@ -1,4 +1,4 @@ -package net.sowgro.npehero.devmenu; +package net.sowgro.npehero.editor; import java.io.File; @@ -57,24 +57,24 @@ public class LevelEditor extends Page ValidIndicator songValid = new ValidIndicator(); if (level.song == null) { - songValid.setInvalid("Missing file song.wav!"); + songValid.setInvalid("Missing song file!"); } HBox filesLabel = new HBox(new Text("Files"), songValid); FileChooser backgroundChooser = new FileChooser(); - backgroundChooser.getExtensionFilters().add(new ExtensionFilter("PNG", "*.png")); + backgroundChooser.getExtensionFilters().add(new ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif")); Button backgroundButton = new Button("Background Image"); - backgroundButton.setOnAction(e -> {selectedBackground = backgroundChooser.showOpenDialog(Driver.primaryStage);}); + backgroundButton.setOnAction(_ -> selectedBackground = backgroundChooser.showOpenDialog(Driver.primaryStage)); FileChooser previewChooser = new FileChooser(); - previewChooser.getExtensionFilters().add(new ExtensionFilter("PNG", "*.png")); + previewChooser.getExtensionFilters().add(new ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif")); Button previewButton = new Button("Preview Image"); - previewButton.setOnAction(e -> {selectedPreview = previewChooser.showOpenDialog(Driver.primaryStage);}); + previewButton.setOnAction(_ -> selectedPreview = previewChooser.showOpenDialog(Driver.primaryStage)); FileChooser songChooser = new FileChooser(); - songChooser.getExtensionFilters().add(new ExtensionFilter("WAV", "*.wav")); + songChooser.getExtensionFilters().add(new ExtensionFilter("Audio Files", "*.wav", "*.mp3", "*.aac")); Button songButton = new Button("Song file"); - songButton.setOnAction(e -> selectedSong = songChooser.showOpenDialog(Driver.primaryStage)); + songButton.setOnAction(_ -> selectedSong = songChooser.showOpenDialog(Driver.primaryStage)); ValidIndicator diffsInvalid = new ValidIndicator(); @@ -131,17 +131,14 @@ public class LevelEditor extends Page level.colors[2] = colorsPickers[2].getValue(); level.colors[3] = colorsPickers[3].getValue(); level.colors[4] = colorsPickers[4].getValue(); - if (selectedBackground != null && selectedBackground.exists()) - { - level.addFile(selectedBackground,"background.png"); + if (selectedBackground != null && selectedBackground.exists()) { + level.addFile(selectedBackground,"background." + getFileExtension(selectedBackground)); } - if (selectedPreview != null && selectedPreview.exists()) - { - level.addFile(selectedPreview,"preview.png"); + if (selectedPreview != null && selectedPreview.exists()) { + level.addFile(selectedPreview,"preview." + getFileExtension(selectedPreview)); } - if (selectedSong != null) - { - level.addFile(selectedSong,"song.wav"); + if (selectedSong != null) { + level.addFile(selectedSong,"song." + getFileExtension(selectedSong)); } level.writeMetadata(); }); @@ -186,4 +183,13 @@ public class LevelEditor extends Page public Pane getContent() { return content; } + + /** + * Get the extension of a file. + * @param file The file to return the extension of + * @return The extension of the file in the format "*.ext" + */ + public String getFileExtension(File file) { + return file.getName().substring(file.getName().lastIndexOf('.') + 1); + } }
\ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/devmenu/LevelList.java b/src/main/java/net/sowgro/npehero/editor/LevelList.java index 7d899bd..b479f49 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/LevelList.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java @@ -1,4 +1,4 @@ -package net.sowgro.npehero.devmenu; +package net.sowgro.npehero.editor; import javafx.beans.property.ReadOnlyStringWrapper; import javafx.geometry.Insets; diff --git a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor.java index 3754847..133330f 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor.java @@ -1,4 +1,4 @@ -package net.sowgro.npehero.devmenu; +package net.sowgro.npehero.editor; import java.io.FileNotFoundException; import java.io.PrintWriter; @@ -119,7 +119,7 @@ public class NotesEditor extends Page try { Sound.stopSong(); - diff.numBeats = (int)Double.parseDouble(timer.toString()); +// diff.numBeats = (int)Double.parseDouble(timer.toString()); timer = null; writer.close(); help.setText(t1); diff --git a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor2.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java index 22c3f5e..38ad234 100644 --- a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor2.java +++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java @@ -1,7 +1,9 @@ -package net.sowgro.npehero.devmenu; +package net.sowgro.npehero.editor; import javafx.beans.binding.DoubleBinding; +import javafx.beans.property.DoubleProperty; import javafx.beans.property.ListProperty; +import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.property.SimpleListProperty; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; @@ -37,13 +39,14 @@ public class NotesEditor2 extends Page { ListProperty<Block> activeNotes = new SimpleListProperty<>(FXCollections.observableArrayList()); ListProperty<Note> noteList; DiffEditor prev; + DoubleProperty newEndTime = new SimpleDoubleProperty(0); private HBox content = new HBox(); public NotesEditor2(Difficulty diff, DiffEditor prev) { this.diff = diff; noteList = diff.notes.deepCopyList(); - m = new MediaPlayer(new Media(diff.level.song.toURI().toString())); + m = new MediaPlayer(diff.level.song); this.prev = prev; // Buttons @@ -65,7 +68,8 @@ public class NotesEditor2 extends Page { ToggleButton play = new ToggleButton("Play"); Button reset = new Button("Reset"); ToggleButton scrollLock = new ToggleButton("Scroll Lock"); - actionBox.getChildren().addAll(playbackLabel, play, reset, scrollLock); + Button setEnd = new Button("End Here"); + actionBox.getChildren().addAll(playbackLabel, play, reset, scrollLock, setEnd); delNote.disableProperty().bind(activeNotes.emptyProperty()); moveNote.disableProperty().bind(activeNotes.emptyProperty()); @@ -85,7 +89,8 @@ public class NotesEditor2 extends Page { lane.prefWidthProperty().bind(sizer.widthProperty()); } Pane rulerLane = new Pane(); - rulerLane.setManaged(false); +// rulerLane.setManaged(false); + Pane playheadLane = new Pane(); playheadLane.setOnMouseClicked(e -> { m.seek(new Duration(screenPosToSecond(e.getY()) * 1000)); @@ -101,6 +106,10 @@ public class NotesEditor2 extends Page { ); playhead.setFill(Color.WHITE); playheadLane.getChildren().add(playhead); +// playhead.setOnMouseDragged(e -> { +// scroll.get +// playhead.layoutYProperty().bind(secondToScreenPos()); +// }); HBox scrollContent = new HBox(); scrollContent.setAlignment(Pos.CENTER); @@ -116,7 +125,14 @@ public class NotesEditor2 extends Page { playheadLine.setStroke(Color.WHITE); playheadLine.layoutYProperty().bind(playhead.layoutYProperty()); - Pane contentOverlay = new Pane(playheadLine); + Line endLine = new Line(); + endLine.setStartX(0); + endLine.endXProperty().bind(scroll.widthProperty().subtract(80)); + endLine.setStartY(0); + endLine.setEndY(0); + endLine.setStroke(Color.RED); + + Pane contentOverlay = new Pane(playheadLine, endLine); contentOverlay.setPickOnBounds(false); StackPane stackPane = new StackPane(); @@ -124,8 +140,9 @@ public class NotesEditor2 extends Page { scroll.setContent(stackPane); // scroll.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.35)); - scroll.setMinWidth(400); -// scroll.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); +// scroll.setMinWidth(400); + scroll.prefHeightProperty().bind(content.heightProperty().multiply(0.75)); + scroll.prefWidthProperty().bind(scroll.prefHeightProperty().multiply(0.70)); scroll.getStyleClass().remove("scroll-pane"); scroll.getStyleClass().add("box"); scroll.setPadding(new Insets(5)); @@ -144,10 +161,11 @@ public class NotesEditor2 extends Page { }); Button save = new Button(); - save.setText("Done"); + save.setText("Save"); save.setOnAction(_ -> { diff.notes.list = noteList; diff.notes.writeFile(); + diff.endTime = newEndTime.get(); Sound.playSfx(Sound.BACKWARD); Driver.setMenu(new DiffEditor(diff, prev.prev)); }); @@ -156,6 +174,20 @@ public class NotesEditor2 extends Page { buttons.setSpacing(10); buttons.setAlignment(Pos.CENTER); + Runnable updateEndLine = () -> { + System.out.println("LISTENER CALLED"); + if (newEndTime.get() != 0) { + endLine.layoutYProperty().bind(secondToScreenPos(newEndTime.get())); + } + else { + endLine.layoutYProperty().bind(secondToScreenPos(m.getTotalDuration().toSeconds())); + } + }; + + newEndTime.addListener((_, _, _) -> updateEndLine.run()); + newEndTime.set(diff.endTime); + updateEndLine.run(); + // Draw notes noteList.forEach(n -> lanes[n.lane].getChildren().add(drawBlock(n))); noteList.addListener((ListChangeListener<? super Note>) _ -> { @@ -180,7 +212,7 @@ public class NotesEditor2 extends Page { }); VBox centerBox = new VBox(); - centerBox.getChildren().addAll(main, exit); + centerBox.getChildren().addAll(main, buttons); centerBox.setSpacing(10); centerBox.setAlignment(Pos.CENTER); @@ -284,6 +316,16 @@ public class NotesEditor2 extends Page { helpBox.getChildren().clear(); } }); + + setEnd.setOnAction(_ -> { + double tmp = screenPosToSecond(playhead.getLayoutY()); + if (Math.round(tmp*10)/10 == Math.round(m.getTotalDuration().toSeconds() * 10)/10) { + newEndTime.set(0); + } + else { + newEndTime.set(tmp); + } + }); } @Override @@ -294,6 +336,9 @@ public class NotesEditor2 extends Page { @Override public void onView() { Sound.stopSong(); + m.play(); + m.pause(); + m.seek(Duration.ZERO); } @Override @@ -357,11 +402,11 @@ public class NotesEditor2 extends Page { } private void MoveNoteUp() { - activeNotes.forEach(n -> n.note.time.setValue(n.note.time.get() + 0.01)); + activeNotes.forEach(n -> n.note.time.setValue(n.note.time.get() - 0.01)); } private void MoveNoteDown() { - activeNotes.forEach(n -> n.note.time.setValue(n.note.time.get() - 0.01)); + activeNotes.forEach(n -> n.note.time.setValue(n.note.time.get() + 0.01)); } private Pane addHelp() { |