diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-29 00:30:28 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-29 00:30:28 -0400 |
commit | f3a037701799169066c6cb12b3c7023029b8b281 (patch) | |
tree | 6e9bb0839152dc52faab8d3a927d077b864a85de | |
parent | 0ce09f72f4af26412356b9699d402b52dbcfc94f (diff) | |
download | NPEhero-f3a037701799169066c6cb12b3c7023029b8b281.tar.gz NPEhero-f3a037701799169066c6cb12b3c7023029b8b281.tar.bz2 NPEhero-f3a037701799169066c6cb12b3c7023029b8b281.zip |
Show level and difficulty loading errors in the gui
-rwxr-xr-x | README.md | 3 | ||||
-rw-r--r-- | controls.json | 17 | ||||
-rwxr-xr-x | settings.json | 6 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/DiffEditor.java | 11 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/DiffList.java | 43 | ||||
-rw-r--r-- | src/main/java/net/sowgro/npehero/editor/ErrorList.java | 70 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/LevelList.java | 28 | ||||
-rw-r--r-- | src/main/java/net/sowgro/npehero/editor/NotesEditor2.java | 15 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/gui/LevelDetails.java | 2 | ||||
-rw-r--r-- | src/main/java/net/sowgro/npehero/levelapi/Difficulties.java | 2 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/levelapi/Levels.java | 2 | ||||
-rwxr-xr-x | src/main/resources/net/sowgro/npehero/style.css | 18 |
12 files changed, 201 insertions, 16 deletions
@@ -10,9 +10,8 @@ Goals: - [ ] Installer / Linux package Todo: -- [ ] Make validation update on view -- [ ] Click sounds on all buttons in editor - [ ] Display problems on diffList and levelList +- [ ] Click sounds on all buttons in editor # Installation Coming soon. diff --git a/controls.json b/controls.json index 4f5ab8f..e347aec 100644 --- a/controls.json +++ b/controls.json @@ -1 +1,16 @@ -{"LEGACY_STOP":"ESCAPE","LANE4":"K","LANE1":"F","LANE0":"D","LANE3":"J","LANE2":"SPACE","DELETE_NOTE":"DELETE","SCROLL_LOCK":"L","NOTE_DOWN":"DOWN","LEGACY_PRINT":"Q","PLAY_PAUSE":"P","SELECT_ALL":"S","CLEAR_SELECTION":"ESCAPE","NOTE_UP":"UP"}
\ No newline at end of file +{ + "LEGACY_STOP": "ESCAPE", + "LANE4": "K", + "LANE1": "F", + "LANE0": "D", + "LANE3": "J", + "LANE2": "SPACE", + "DELETE_NOTE": "DELETE", + "SCROLL_LOCK": "L", + "NOTE_DOWN": "DOWN", + "LEGACY_PRINT": "Q", + "PLAY_PAUSE": "P", + "SELECT_ALL": "S", + "CLEAR_SELECTION": "ESCAPE", + "NOTE_UP": "UP" +}
\ No newline at end of file diff --git a/settings.json b/settings.json index 8d4feca..fb4d270 100755 --- a/settings.json +++ b/settings.json @@ -1 +1,5 @@ -{"musicVol":0.0,"effectsVol":1.0}
\ No newline at end of file +{ + "effectsVol": 1.0, + "musicVol": 1.0, + "enableMenuMusic": true +}
\ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java index 0eb4968..7671bc6 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java @@ -39,6 +39,7 @@ public class DiffEditor extends Page Button editNotes = new Button("Edit notes"); editNotes.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); if (diff.level.song == null) { Driver.setMenu(new ErrorDisplay("You must import a song file before editing the notes!", this)); return; @@ -55,15 +56,19 @@ public class DiffEditor extends Page }); Button oldEditNotes = new Button("Edit notes (legacy)"); - oldEditNotes.setOnAction(_ -> Driver.setMenu(new ErrorDisplay( + oldEditNotes.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + Driver.setMenu(new ErrorDisplay( "Warning: \nThe legacy editor will overwrite all existing notes!", this, new NotesEditor(diff, this)) - )); + ); + }); Label scoresLable = new Label("Scores"); Button editScores = new Button("Clear leaderboard"); editScores.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); diff.leaderboard.entries.clear(); try { diff.leaderboard.save(); @@ -75,6 +80,7 @@ public class DiffEditor extends Page Button playLevel = new Button("Play level"); playLevel.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); if (diff.isValid() && diff.level.isValid()) { Driver.setMenu(new LevelSurround(diff.level, diff, this)); } @@ -85,6 +91,7 @@ public class DiffEditor extends Page Button save = new Button("Save"); save.setOnAction(_ -> { //assigns text fields to values + Sound.playSfx(Sound.FORWARD); diff.title = title.getText(); // diff.bpm = Double.parseDouble(bpm.getText()); // diff.numBeats = Integer.parseInt(numBeats.getText()); diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java index 9e2df9b..f3769ab 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffList.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java @@ -8,11 +8,14 @@ import javafx.scene.control.*; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; import net.sowgro.npehero.Driver; +import net.sowgro.npehero.gui.MainMenu; 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 net.sowgro.npehero.main.ValidIndicator; import java.io.IOException; import java.nio.file.FileAlreadyExistsException; @@ -20,10 +23,14 @@ import java.util.Collections; public class DiffList extends Page { + private final Label error; + private final HBox errorBox; private HBox content = new HBox(); + private Level level; public DiffList(Level level, Page prev) { + this.level = level; //sets up table view: requires special getters, setters and constructors to work TableView<Difficulty> diffs = new TableView<>(); @@ -59,13 +66,28 @@ public class DiffList extends Page diffs.setPrefWidth(400); diffs.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.67)); + error = new Label(); + errorBox = new HBox(error); + errorBox.setSpacing(10); + errorBox.setPadding(new Insets(10)); + errorBox.getStyleClass().addAll("box", "red"); + errorBox.setOnMouseClicked(_ -> { + // TODO + Driver.setMenu(new ErrorList(level.difficulties.problems, this)); + }); + refresh(); + Button edit = new Button("Edit"); - edit.setOnAction(e -> Driver.setMenu(new DiffEditor(diffs.getSelectionModel().getSelectedItem(), this))); + edit.setOnAction(e -> { + Sound.playSfx(Sound.FORWARD); + Driver.setMenu(new DiffEditor(diffs.getSelectionModel().getSelectedItem(), this)); + }); edit.setDisable(true); edit.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); Button remove = new Button("Delete"); remove.setOnAction(e -> { + Sound.playSfx(Sound.FORWARD); try { level.difficulties.remove(diffs.getSelectionModel().getSelectedItem()); } catch (IOException ex) { @@ -78,6 +100,7 @@ public class DiffList extends Page Button refresh = new Button("Refresh"); refresh.setOnAction(e -> { + Sound.playSfx(Sound.FORWARD); try { level.difficulties.read(); } catch (IOException ex) { @@ -85,6 +108,7 @@ public class DiffList extends Page } // diffs.setItems(level.difficulties.list.sorted()); diffs.refresh(); + refresh(); }); ToggleButton create = new ToggleButton("Create"); @@ -92,6 +116,7 @@ public class DiffList extends Page Button moveUp = new Button("Move Up"); moveUp.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); moveUp.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get(); ObservableList<Difficulty> diffList = level.difficulties.list; int oldIndex = diffList.indexOf(diff); @@ -110,6 +135,7 @@ public class DiffList extends Page Button moveDown = new Button("Move Down"); moveDown.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); moveDown.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get(); ObservableList<Difficulty> diffList = level.difficulties.list; int oldIndex = diffList.indexOf(diff); @@ -142,7 +168,7 @@ public class DiffList extends Page Pane sidebar = new Pane(); HBox main = new HBox(); - main.getChildren().addAll(diffs,buttons, sidebar); + main.getChildren().addAll(new VBox(diffs, errorBox),buttons, sidebar); main.setSpacing(10); Button exit = new Button(); @@ -153,6 +179,7 @@ public class DiffList extends Page }); create.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); if (create.isSelected()) { sidebar.getChildren().add(newLevelBox); } @@ -162,6 +189,7 @@ public class DiffList extends Page }); newLevelButton.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); try { level.difficulties.add(newLevelEntry.getText()); } catch (FileAlreadyExistsException e) { @@ -189,4 +217,15 @@ public class DiffList extends Page public Pane getContent() { return content; } + + public void refresh() { + error.setText("Failed to load " + level.difficulties.problems.size() + " difficulty(s)"); + if (level.difficulties.problems.isEmpty()) { + errorBox.setVisible(false); + errorBox.setManaged(false); + } else { + errorBox.setVisible(true); + errorBox.setManaged(true); + } + } }
\ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/editor/ErrorList.java b/src/main/java/net/sowgro/npehero/editor/ErrorList.java new file mode 100644 index 0000000..92a9455 --- /dev/null +++ b/src/main/java/net/sowgro/npehero/editor/ErrorList.java @@ -0,0 +1,70 @@ +package net.sowgro.npehero.editor; + +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.*; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.*; +import net.sowgro.npehero.Driver; +import net.sowgro.npehero.gui.SettingsEditor; +import net.sowgro.npehero.main.Control; +import net.sowgro.npehero.main.Page; +import net.sowgro.npehero.main.Sound; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public class ErrorList extends Page { + + private HBox content = new HBox(); + + public ErrorList(Map<String, Exception> list, Page prev) { + + GridPane controls = new GridPane(); + ScrollPane scrollPane = new ScrollPane(controls); + scrollPane.getStyleClass().remove("scroll-pane"); + scrollPane.getStyleClass().add("box"); + scrollPane.setPadding(new Insets(10)); + controls.setPadding(new Insets(10)); + controls.setVgap(20); + controls.setHgap(40); + + scrollPane.setPrefWidth(700); + scrollPane.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); + + Button exit = new Button(); + exit.setText("Back"); + exit.setOnAction(e -> { + Sound.playSfx(Sound.BACKWARD); + Driver.setMenu(prev); + }); + + VBox centerBox = new VBox(); + centerBox.getChildren().addAll(scrollPane, exit); + centerBox.setSpacing(10); + centerBox.setAlignment(Pos.CENTER); + + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + + int i = 0; + for (Map.Entry<String, Exception> error : list.entrySet()) { + // label + Label label = new Label(error.getKey()); + controls.add(label, 0, i); + + // reset button + Button resetButton = new Button("View Error"); + resetButton.setOnAction(_ -> Driver.setMenu(new ErrorDisplay("E: \n"+error.getValue(), this))); + controls.add(resetButton, 1, i); + i++; + } + } + + @Override + public Pane getContent() { + return content; + } +} diff --git a/src/main/java/net/sowgro/npehero/editor/LevelList.java b/src/main/java/net/sowgro/npehero/editor/LevelList.java index 86c65b5..596f433 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelList.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java @@ -22,6 +22,9 @@ public class LevelList extends Page { private HBox content = new HBox(); + private final Label error; + private final HBox errorBox; + public LevelList() { //sets up table view: requires special getters, setters and constructors to work @@ -61,6 +64,18 @@ public class LevelList extends Page levels.setPrefWidth(600); levels.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); + error = new Label(); + errorBox = new HBox(error); + errorBox.setSpacing(10); + errorBox.setPadding(new Insets(10)); + errorBox.getStyleClass().addAll("box", "red"); + errorBox.setOnMouseClicked(_ -> { + // TODO + Driver.setMenu(new ErrorList(Levels.problems, this)); + }); + refresh(); + + Button edit = new Button("Edit"); edit.setOnAction(e -> Driver.setMenu(new LevelEditor(levels.getSelectionModel().getSelectedItem(), this))); edit.setDisable(true); @@ -108,7 +123,7 @@ public class LevelList extends Page Pane sidebar = new Pane(); HBox main = new HBox(); - main.getChildren().addAll(levels,buttons,sidebar); + main.getChildren().addAll(new VBox(levels, errorBox),buttons,sidebar); main.setSpacing(10); Button exit = new Button(); @@ -156,4 +171,15 @@ public class LevelList extends Page public Pane getContent() { return content; } + + public void refresh() { + error.setText("Failed to load " + Levels.problems.size() + " level(s)"); + if (Levels.problems.isEmpty()) { + errorBox.setVisible(false); + errorBox.setManaged(false); + } else { + errorBox.setVisible(true); + errorBox.setManaged(true); + } + } }
\ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java index b6810d8..e3db0b1 100644 --- a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java +++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java @@ -173,6 +173,12 @@ public class NotesEditor2 extends Page { throw new RuntimeException(e); } diff.endTime = newEndTime.get(); + diff.bpm = 0.0; + try { + diff.readMetadata(); + } catch (IOException e) { + // TODO + } Sound.playSfx(Sound.BACKWARD); Driver.setMenu(new DiffEditor(diff, prev.prev)); }); @@ -333,6 +339,15 @@ public class NotesEditor2 extends Page { newEndTime.set(tmp); } }); + + activeNotes.addListener((_, _, _) -> { + if (activeNotes.isEmpty()) { + selectionLabel.setText("Selection"); + } + else { + selectionLabel.setText("Selection (" + activeNotes.size() + ")"); + } + }); } @Override diff --git a/src/main/java/net/sowgro/npehero/gui/LevelDetails.java b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java index 55c45bd..1ab4ae4 100755 --- a/src/main/java/net/sowgro/npehero/gui/LevelDetails.java +++ b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java @@ -35,6 +35,7 @@ public class LevelDetails extends VBox rightBox.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); rightBox.setMinWidth(350); rightBox.getStyleClass().add("box"); + rightBox.setPadding(new Insets(5)); Button play = new Button(); play.setDisable(true); @@ -59,6 +60,7 @@ public class LevelDetails extends VBox else { VBox details = new VBox(); + details.setPadding(new Insets(5)); ScrollPane detailsScroll = new ScrollPane(details); detailsScroll.prefHeightProperty().bind(rightBox.prefHeightProperty()); diff --git a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java index cffd95e..ea17e21 100644 --- a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java @@ -51,7 +51,7 @@ public class Difficulties { Difficulty diff = new Difficulty(cur, level); list.add(diff); } catch (IOException e) { - problems.put("", e); + problems.put(cur.getName(), e); e.printStackTrace(); } } diff --git a/src/main/java/net/sowgro/npehero/levelapi/Levels.java b/src/main/java/net/sowgro/npehero/levelapi/Levels.java index 84ffe51..f6251e9 100755 --- a/src/main/java/net/sowgro/npehero/levelapi/Levels.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Levels.java @@ -40,7 +40,7 @@ public class Levels { Level level = new Level(file); list.add(level); } catch (IOException e) { - problems.put("", e); + problems.put(file.getName(), e); e.printStackTrace(); } } diff --git a/src/main/resources/net/sowgro/npehero/style.css b/src/main/resources/net/sowgro/npehero/style.css index 1637c4a..9549b43 100755 --- a/src/main/resources/net/sowgro/npehero/style.css +++ b/src/main/resources/net/sowgro/npehero/style.css @@ -11,7 +11,7 @@ } /* buttons */ -Button, TextField, RadioButton, ToggleButton, ColorPicker { +.button, TextField, RadioButton, ToggleButton, ColorPicker { -fx-background-color: rgba(0, 0, 0, 0.5); -fx-text-fill: white; -fx-border-color: transparent; @@ -22,22 +22,22 @@ Button, TextField, RadioButton, ToggleButton, ColorPicker { /*-fx-font-weight: 800;*/ } -Button:hover, TextField:hover, RadioButton:hover, ToggleButton:hover, ColorPicker:hover { +.button:hover, TextField:hover, RadioButton:hover, ToggleButton:hover, ColorPicker:hover { -fx-background-color: rgb(50, 50, 50, 0.5); } -Button:focused, TextField:focused, RadioButton:focused, ToggleButton:focused, ColorPicker:focused { +.button:focused, TextField:focused, RadioButton:focused, ToggleButton:focused, ColorPicker:focused { -fx-background-color: rgb(50, 50, 50, 0.5); -fx-border-color: rgb(255, 255, 255); } -Button:selected, TextField:selected, RadioButton:selected, ToggleButton:selected, ColorPicker:selected { +.button:selected, TextField:selected, RadioButton:selected, ToggleButton:selected, ColorPicker:selected { -fx-background-color: rgb(255, 255, 255); -fx-text-fill: rgb(0, 0, 0); } -Button:pressed, TextField:pressed, RadioButton:pressed, ToggleButton:pressed, ColorPicker:pressed { +.button:pressed, TextField:pressed, RadioButton:pressed, ToggleButton:pressed, ColorPicker:pressed { -fx-background-color: rgb(231, 231, 231); -fx-border-color: transparent; -fx-text-fill: rgb(0, 0, 0); @@ -260,3 +260,11 @@ CheckBox:selected > .box { /* -fx-border-width: 20; */ } +.red Label { + -fx-text-fill: red; +} + +.red:hover Label { + -fx-underline: true; +} + |