aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/editor
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-07-23 00:24:44 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-07-23 00:24:44 -0400
commitaae98b8bfca1578c14d6dde3a2f3180c7c580131 (patch)
treea01dbb81ce6289c72b172b040a0a8185faaefd8e /src/main/java/net/sowgro/npehero/editor
parent231c511304915d80aab89d28779d7445ad21ef70 (diff)
downloadNPEhero-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-xsrc/main/java/net/sowgro/npehero/editor/DiffEditor.java (renamed from src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java)32
-rwxr-xr-xsrc/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-xsrc/main/java/net/sowgro/npehero/editor/LevelEditor.java (renamed from src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java)40
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelList.java (renamed from src/main/java/net/sowgro/npehero/devmenu/LevelList.java)2
-rwxr-xr-xsrc/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() {