diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-28 01:07:41 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-28 01:07:41 -0400 |
commit | 0ce09f72f4af26412356b9699d402b52dbcfc94f (patch) | |
tree | b01b94b1b80d1f3fc5aea559b3718024b79cfe91 /src/main/java/net/sowgro/npehero/editor | |
parent | d04c277edff957d14b6261dd38da43c18b7ba189 (diff) | |
download | NPEhero-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')
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)); |