aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xREADME.md3
-rw-r--r--controls.json17
-rwxr-xr-xsettings.json6
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/DiffEditor.java11
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/DiffList.java43
-rw-r--r--src/main/java/net/sowgro/npehero/editor/ErrorList.java70
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelList.java28
-rw-r--r--src/main/java/net/sowgro/npehero/editor/NotesEditor2.java15
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gui/LevelDetails.java2
-rw-r--r--src/main/java/net/sowgro/npehero/levelapi/Difficulties.java2
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/levelapi/Levels.java2
-rwxr-xr-xsrc/main/resources/net/sowgro/npehero/style.css18
12 files changed, 201 insertions, 16 deletions
diff --git a/README.md b/README.md
index 250700b..0ccd3b6 100755
--- a/README.md
+++ b/README.md
@@ -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;
+}
+