aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/editor
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-07-28 01:07:41 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-07-28 01:07:41 -0400
commit0ce09f72f4af26412356b9699d402b52dbcfc94f (patch)
treeb01b94b1b80d1f3fc5aea559b3718024b79cfe91 /src/main/java/net/sowgro/npehero/editor
parentd04c277edff957d14b6261dd38da43c18b7ba189 (diff)
downloadNPEhero-0ce09f72f4af26412356b9699d402b52dbcfc94f.tar.gz
NPEhero-0ce09f72f4af26412356b9699d402b52dbcfc94f.tar.bz2
NPEhero-0ce09f72f4af26412356b9699d402b52dbcfc94f.zip
Finalize level API and new Json library
Diffstat (limited to 'src/main/java/net/sowgro/npehero/editor')
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/DiffEditor.java26
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/DiffList.java29
-rw-r--r--src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java5
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelEditor.java54
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelList.java13
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/NotesEditor.java12
-rw-r--r--src/main/java/net/sowgro/npehero/editor/NotesEditor2.java11
7 files changed, 110 insertions, 40 deletions
diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java
index 6940485..0eb4968 100755
--- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java
+++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java
@@ -11,8 +11,12 @@ import net.sowgro.npehero.gameplay.Block;
import net.sowgro.npehero.gui.LevelSurround;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
+import net.sowgro.npehero.levelapi.Difficulty;
+import net.sowgro.npehero.levelapi.Note;
import net.sowgro.npehero.main.*;
+import java.io.IOException;
+
public class DiffEditor extends Page
{
Difficulty diff;
@@ -37,13 +41,15 @@ public class DiffEditor extends Page
editNotes.setOnAction(_ -> {
if (diff.level.song == null) {
Driver.setMenu(new ErrorDisplay("You must import a song file before editing the notes!", this));
+ return;
}
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.",
+ "Note:\nThe new notes editor does not support bpm and beat based songs. If you continue, the notes will be converted.",
this,
new NotesEditor2(diff, this)
));
+ return;
}
Driver.setMenu(new NotesEditor2(diff, this));
});
@@ -57,7 +63,15 @@ public class DiffEditor extends Page
Label scoresLable = new Label("Scores");
Button editScores = new Button("Clear leaderboard");
- editScores.setOnAction(_ -> diff.leaderboard.entries.clear());
+ editScores.setOnAction(_ -> {
+ diff.leaderboard.entries.clear();
+ try {
+ diff.leaderboard.save();
+ } catch (IOException e) {
+ e.printStackTrace();
+ Driver.setMenu(new ErrorDisplay("Failed to clear the leaderboard:\n"+e, this));
+ }
+ });
Button playLevel = new Button("Play level");
playLevel.setOnAction(_ -> {
@@ -74,7 +88,13 @@ public class DiffEditor extends Page
diff.title = title.getText();
// diff.bpm = Double.parseDouble(bpm.getText());
// diff.numBeats = Integer.parseInt(numBeats.getText());
- diff.write();
+ try {
+ diff.writeMetadata();
+ } catch (IOException e) {
+ e.printStackTrace();
+ //TODO
+ throw new RuntimeException(e);
+ }
});
HBox scrollContent = new HBox();
diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java
index 7017c32..9e2df9b 100755
--- a/src/main/java/net/sowgro/npehero/editor/DiffList.java
+++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java
@@ -9,12 +9,13 @@ import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import net.sowgro.npehero.Driver;
-import net.sowgro.npehero.main.Difficulty;
-import net.sowgro.npehero.main.Level;
+import net.sowgro.npehero.levelapi.Difficulty;
+import net.sowgro.npehero.levelapi.Level;
import net.sowgro.npehero.main.Page;
import net.sowgro.npehero.main.Sound;
import java.io.IOException;
+import java.nio.file.FileAlreadyExistsException;
import java.util.Collections;
public class DiffList extends Page
@@ -68,6 +69,7 @@ public class DiffList extends Page
try {
level.difficulties.remove(diffs.getSelectionModel().getSelectedItem());
} catch (IOException ex) {
+ ex.printStackTrace();
Driver.setMenu(new ErrorDisplay("Failed to remove difficulty\n"+e, this));
}
});
@@ -76,7 +78,11 @@ public class DiffList extends Page
Button refresh = new Button("Refresh");
refresh.setOnAction(e -> {
-// level.readData();
+ try {
+ level.difficulties.read();
+ } catch (IOException ex) {
+ // TODO
+ }
// diffs.setItems(level.difficulties.list.sorted());
diffs.refresh();
});
@@ -93,7 +99,12 @@ public class DiffList extends Page
return;
}
Collections.swap(diffList, oldIndex, oldIndex-1);
- level.difficulties.saveOrder();
+ try {
+ level.difficulties.saveOrder();
+ } catch (IOException e) {
+ e.printStackTrace();
+ Driver.setMenu(new ErrorDisplay("Failed to move difficulty\n"+e,this));
+ }
});
Button moveDown = new Button("Move Down");
@@ -106,7 +117,12 @@ public class DiffList extends Page
return;
}
Collections.swap(diffList, oldIndex, oldIndex+1);
- level.difficulties.saveOrder();
+ try {
+ level.difficulties.saveOrder();
+ } catch (IOException e) {
+ e.printStackTrace();
+ Driver.setMenu(new ErrorDisplay("Failed to move difficulty\n"+e,this));
+ }
});
VBox buttons = new VBox();
@@ -148,8 +164,11 @@ public class DiffList extends Page
newLevelButton.setOnAction(_ -> {
try {
level.difficulties.add(newLevelEntry.getText());
+ } catch (FileAlreadyExistsException e) {
+ Driver.setMenu(new ErrorDisplay("Failed to add level\nA difficulty already exists with the folder name " + e.getFile(), this));
} catch (IOException e) {
Driver.setMenu(new ErrorDisplay("Failed to add level\n"+e, this));
+ e.printStackTrace();
}
newLevelEntry.clear();
refresh.fire();
diff --git a/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java b/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java
index b3ec751..c07d12f 100644
--- a/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java
+++ b/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java
@@ -23,9 +23,11 @@ public class ErrorDisplay extends Page {
public ErrorDisplay(String message, Page prev) {
Label main = new Label(message);
main.getStyleClass().add("box");
+ main.setPadding(new Insets(10));
+ main.setWrapText(true);
Button exit = new Button();
- exit.setText("Back");
+ exit.setText("Ok");
exit.setOnAction(e -> {
Sound.playSfx(Sound.BACKWARD);
Driver.setMenu(prev);
@@ -50,6 +52,7 @@ public class ErrorDisplay extends Page {
Label main = new Label(message);
main.getStyleClass().add("box");
main.setPadding(new Insets(10));
+ main.setWrapText(true);
Button exit = new Button();
exit.setText("Cancel");
diff --git a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
index b3ae2b8..ae56d44 100755
--- a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
+++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
@@ -1,6 +1,7 @@
package net.sowgro.npehero.editor;
import java.io.File;
+import java.io.IOException;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.geometry.Pos;
@@ -10,10 +11,16 @@ import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import net.sowgro.npehero.Driver;
+import net.sowgro.npehero.levelapi.Difficulty;
+import net.sowgro.npehero.levelapi.Level;
import net.sowgro.npehero.main.*;
public class LevelEditor extends Page
{
+ private final ValidIndicator songValid = new ValidIndicator();
+ private final ValidIndicator diffsInvalid = new ValidIndicator();
+ Level level;
+
private HBox content = new HBox();
private File selectedSong = null;
@@ -22,6 +29,7 @@ public class LevelEditor extends Page
public LevelEditor(Level level, Page prev)
{
+ this.level = level;
Text folderNameLabel = new Text("Folder name");
TextField folderName = new TextField();
if (level.dir != null) {
@@ -55,10 +63,6 @@ public class LevelEditor extends Page
HBox colorPickerBox = new HBox();
colorPickerBox.getChildren().addAll(colorsPickers);
- ValidIndicator songValid = new ValidIndicator();
- if (level.song == null) {
- songValid.setInvalid("Missing song file!");
- }
HBox filesLabel = new HBox(new Text("Files"), songValid);
FileChooser backgroundChooser = new FileChooser();
@@ -77,10 +81,6 @@ public class LevelEditor extends Page
songButton.setOnAction(_ -> selectedSong = songChooser.showOpenDialog(Driver.primaryStage));
- ValidIndicator diffsInvalid = new ValidIndicator();
- if (level.difficulties.getValidList().isEmpty()) {
- diffsInvalid.setInvalid("This level contains no valid difficulties!");
- }
HBox diffLabel = new HBox(new Text("Difficulties"), diffsInvalid);
diffLabel.setSpacing(5);
@@ -134,18 +134,25 @@ public class LevelEditor extends Page
try {
if (selectedBackground != null && selectedBackground.exists()) {
- level.addFile(selectedBackground, "background." + getFileExtension(selectedBackground));
+ level.addFile(selectedBackground, "background");
}
if (selectedPreview != null && selectedPreview.exists()) {
- level.addFile(selectedPreview, "preview." + getFileExtension(selectedPreview));
+ level.addFile(selectedPreview, "preview");
}
if (selectedSong != null) {
- level.addFile(selectedSong, "song." + getFileExtension(selectedSong));
+ level.addFile(selectedSong, "song");
}
- } catch (Exception _) {
+ } catch (Exception ex) {
+ // TODO
+ ex.printStackTrace();
+ }
+ try {
+ level.writeMetadata();
+ } catch (IOException ex) {
// TODO
+ ex.printStackTrace();
}
- level.writeMetadata();
+ validate();
});
VBox left = new VBox(filesLabel, songButton, previewButton, backgroundButton, colorsLabel, colorPickerBox);
@@ -189,12 +196,19 @@ public class LevelEditor extends Page
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);
+ @Override
+ public void onView() {
+ validate();
+ }
+
+ public void validate() {
+ if (level.difficulties.getValidList().isEmpty()) {
+ diffsInvalid.setInvalid("This level contains no valid difficulties!");
+ } else {
+ diffsInvalid.setValid();
+ }
+ if (level.song == null) {
+ songValid.setInvalid("Missing song file!");
+ }
}
} \ No newline at end of file
diff --git a/src/main/java/net/sowgro/npehero/editor/LevelList.java b/src/main/java/net/sowgro/npehero/editor/LevelList.java
index 1bc85dd..86c65b5 100755
--- a/src/main/java/net/sowgro/npehero/editor/LevelList.java
+++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java
@@ -9,13 +9,14 @@ import net.sowgro.npehero.Driver;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import net.sowgro.npehero.gui.MainMenu;
-import net.sowgro.npehero.main.Level;
-import net.sowgro.npehero.main.Levels;
+import net.sowgro.npehero.levelapi.Level;
+import net.sowgro.npehero.levelapi.Levels;
import net.sowgro.npehero.main.Page;
import net.sowgro.npehero.main.Sound;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.nio.file.FileAlreadyExistsException;
public class LevelList extends Page
{
@@ -71,6 +72,7 @@ public class LevelList extends Page
Levels.remove(levels.getSelectionModel().getSelectedItem());
} catch (IOException ex) {
Driver.setMenu(new ErrorDisplay("Failed to remove this level\n"+e.toString(), this));
+ ex.printStackTrace();
}
});
remove.setDisable(true);
@@ -80,8 +82,9 @@ public class LevelList extends Page
refresh.setOnAction(e -> {
try {
Levels.readData();
- } catch (FileNotFoundException ex) {
+ } catch (IOException ex) {
Driver.setMenu(new ErrorDisplay("Failed to load levels: Level folder is missing\n"+e.toString(), this));
+ ex.printStackTrace();
}
levels.setItems(Levels.list);
});
@@ -135,8 +138,12 @@ public class LevelList extends Page
newLevelButton.setOnAction(_ -> {
try {
Levels.add(newLevelEntry.getText());
+ } catch (FileAlreadyExistsException e) {
+ Driver.setMenu(new ErrorDisplay("Failed to add level\nA level already exists with the folder name " + e.getFile(), this));
+ e.printStackTrace();
} catch (IOException e) {
Driver.setMenu(new ErrorDisplay("Failed to create this level\n"+e.toString(), this));
+ e.printStackTrace();
}
newLevelEntry.clear();
refresh.fire();
diff --git a/src/main/java/net/sowgro/npehero/editor/NotesEditor.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor.java
index 133330f..da5af33 100755
--- a/src/main/java/net/sowgro/npehero/editor/NotesEditor.java
+++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor.java
@@ -16,7 +16,7 @@ import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import net.sowgro.npehero.main.Control;
-import net.sowgro.npehero.main.Difficulty;
+import net.sowgro.npehero.levelapi.Difficulty;
import net.sowgro.npehero.main.Page;
import net.sowgro.npehero.main.Sound;
@@ -64,11 +64,11 @@ public class NotesEditor extends Page
content.getChildren().add(centerBox);
content.setAlignment(Pos.CENTER);
- try {
- writer = new PrintWriter(diff.notes.getFile(), "UTF-8");
- } catch (FileNotFoundException | UnsupportedEncodingException e) {
- throw new RuntimeException(e);
- }
+// try {
+// writer = new PrintWriter(diff.notes.getFile(), "UTF-8");
+// } catch (FileNotFoundException | UnsupportedEncodingException e) {
+// throw new RuntimeException(e);
+// }
Scene scene = Driver.primaryStage.getScene();
scene.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
diff --git a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java
index 8d17900..b6810d8 100644
--- a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java
+++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java
@@ -16,7 +16,6 @@ import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
-import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
@@ -25,9 +24,12 @@ import javafx.util.Duration;
import net.sowgro.npehero.Driver;
import net.sowgro.npehero.gameplay.Block;
import net.sowgro.npehero.gameplay.Target;
+import net.sowgro.npehero.levelapi.Difficulty;
+import net.sowgro.npehero.levelapi.Note;
import net.sowgro.npehero.main.*;
import net.sowgro.npehero.main.Control;
+import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
public class NotesEditor2 extends Page {
@@ -164,7 +166,12 @@ public class NotesEditor2 extends Page {
save.setText("Save");
save.setOnAction(_ -> {
diff.notes.list = noteList;
- diff.notes.writeFile();
+ try {
+ diff.notes.writeFile();
+ } catch (IOException e) {
+ // TODO
+ throw new RuntimeException(e);
+ }
diff.endTime = newEndTime.get();
Sound.playSfx(Sound.BACKWARD);
Driver.setMenu(new DiffEditor(diff, prev.prev));