aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sowgro')
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/Driver.java3
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/DiffList.java47
-rw-r--r--src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java62
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelList.java48
-rw-r--r--src/main/java/net/sowgro/npehero/levelapi/Difficulties.java3
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/levelapi/Difficulty.java11
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/levelapi/Levels.java5
7 files changed, 106 insertions, 73 deletions
diff --git a/src/main/java/net/sowgro/npehero/Driver.java b/src/main/java/net/sowgro/npehero/Driver.java
index bddc3eb..5a2aa73 100755
--- a/src/main/java/net/sowgro/npehero/Driver.java
+++ b/src/main/java/net/sowgro/npehero/Driver.java
@@ -113,6 +113,9 @@ public class Driver extends Application
}
public static void setMenu(Page p) {
+ if (currentPage != null) {
+ currentPage.onLeave();
+ }
currentPage = p;
Pane pane = currentPage.getContent();
pane.setOpacity(0.0);
diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java
index b77af55..e435b22 100755
--- a/src/main/java/net/sowgro/npehero/editor/DiffList.java
+++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java
@@ -148,20 +148,8 @@ public class DiffList extends Page
buttons.getChildren().addAll(create, edit, remove, moveUp, moveDown, refresh);
buttons.setSpacing(10);
- TextField newLevelEntry = new TextField();
- Button newLevelButton = new Button("add");
-
- HBox newLevel = new HBox(newLevelEntry,newLevelButton);
- Label newLevelLabel = new Label("Name of new difficulty");
- VBox newLevelBox = new VBox(newLevelLabel, newLevel);
- newLevelBox.setSpacing(10);
- newLevelBox.getStyleClass().add("box");
- newLevelBox.setPadding(new Insets(10));
-
- Pane sidebar = new Pane();
-
HBox main = new HBox();
- main.getChildren().addAll(new VBox(diffs, errorBox),buttons, sidebar);
+ main.getChildren().addAll(new VBox(diffs, errorBox),buttons);
main.setSpacing(10);
Button exit = new Button();
@@ -173,28 +161,17 @@ public class DiffList extends Page
create.setOnAction(_ -> {
Sound.playSfx(Sound.FORWARD);
- if (create.isSelected()) {
- sidebar.getChildren().add(newLevelBox);
- }
- else {
- sidebar.getChildren().remove(newLevelBox);
- }
- });
-
- newLevelButton.setOnAction(_ -> {
- Sound.playSfx(Sound.FORWARD);
- 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();
- sidebar.getChildren().clear();
- create.setSelected(false);
+ FolderNameEntry.StringToVoidLambda next = (String name) -> {
+ try {
+ Difficulty d = level.difficulties.add(name);
+ Driver.setMenu(new DiffEditor(d, new DiffList(level, prev)));
+ } catch (FileAlreadyExistsException e) {
+ Driver.setMenu(new ErrorDisplay("Failed to add difficulty\nA difficulty already exists with the folder name " + e.getFile(), this));
+ } catch (IOException e) {
+ Driver.setMenu(new ErrorDisplay("Failed to add difficulty\n" + e, this));
+ }
+ };
+ Driver.setMenu(new FolderNameEntry("difficulty", this, next));
});
VBox centerBox = new VBox();
diff --git a/src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java b/src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java
new file mode 100644
index 0000000..f2245a8
--- /dev/null
+++ b/src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java
@@ -0,0 +1,62 @@
+package net.sowgro.npehero.editor;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import net.sowgro.npehero.Driver;
+import net.sowgro.npehero.main.Page;
+
+public class FolderNameEntry extends Page {
+ private final HBox content = new HBox();
+
+ public interface StringToVoidLambda {
+ void run(String name);
+ }
+
+ public FolderNameEntry(String itemType, Page prev, StringToVoidLambda next) {
+
+ Label newLevelLabel = new Label("Name of new "+itemType);
+ TextField newLevelEntry = new TextField();
+
+ Label folderName = new Label("Folder name");
+ TextField folderNameEntry = new TextField();
+ folderNameEntry.setEditable(false);
+ folderNameEntry.setDisable(true);
+
+ newLevelEntry.setOnKeyTyped(_ -> {
+ folderNameEntry.setText(newLevelEntry.getText().toLowerCase().replaceAll("\\W+", "-"));
+ });
+
+ VBox newLevelBox = new VBox(newLevelLabel, newLevelEntry, folderName, folderNameEntry);
+ newLevelBox.setSpacing(10);
+ newLevelBox.getStyleClass().add("box");
+ newLevelBox.setPadding(new Insets(10));
+ newLevelBox.setPrefWidth(400);
+
+ Button newLevelButton = new Button("Create");
+ newLevelButton.setOnAction(_ -> next.run(newLevelEntry.getText()));
+
+ Button cancel = new Button("Cancel");
+ cancel.setOnAction(_ -> Driver.setMenu(prev));
+
+ HBox buttonBox = new HBox(cancel, newLevelButton);
+ buttonBox.setSpacing(10);
+
+ VBox centerBox = new VBox();
+ centerBox.getChildren().addAll(newLevelBox, buttonBox);
+ centerBox.setSpacing(10);
+ centerBox.setAlignment(Pos.CENTER);
+
+ content.getChildren().add(centerBox);
+ content.setAlignment(Pos.CENTER);
+ }
+
+ @Override
+ public HBox 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 7c499b7..e9d69af 100755
--- a/src/main/java/net/sowgro/npehero/editor/LevelList.java
+++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java
@@ -111,7 +111,7 @@ public class LevelList extends Page
levels.setItems(Levels.list);
});
- ToggleButton create = new ToggleButton("Create");
+ Button create = new Button("Create");
Button viewFolder = new Button("Open Folder");
viewFolder.setOnAction(_ -> new Thread(() -> {
@@ -126,20 +126,10 @@ public class LevelList extends Page
buttons.getChildren().addAll(create, edit, remove, refresh, viewFolder);
buttons.setSpacing(10);
- TextField newLevelEntry = new TextField();
- Button newLevelButton = new Button("add");
- HBox newLevel = new HBox(newLevelEntry,newLevelButton);
- Label newLevelLabel = new Label("Name of new level");
- VBox newLevelBox = new VBox(newLevelLabel, newLevel);
- newLevelBox.setSpacing(10);
- newLevelBox.getStyleClass().add("box");
- newLevelBox.setPadding(new Insets(10));
-
- Pane sidebar = new Pane();
HBox main = new HBox();
- main.getChildren().addAll(new VBox(levels, errorBox),buttons,sidebar);
+ main.getChildren().addAll(new VBox(levels, errorBox),buttons);
main.setSpacing(10);
Button exit = new Button();
@@ -159,28 +149,18 @@ public class LevelList extends Page
content.setAlignment(Pos.CENTER);
create.setOnAction(_ -> {
- if (create.isSelected()) {
- sidebar.getChildren().add(newLevelBox);
- }
- else {
- sidebar.getChildren().remove(newLevelBox);
- }
- });
-
- 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();
- sidebar.getChildren().clear();
- create.setSelected(false);
+ Sound.playSfx(Sound.FORWARD);
+ FolderNameEntry.StringToVoidLambda next = (String name) -> {
+ try {
+ Level l = Levels.add(name);
+ Driver.setMenu(new LevelEditor(l, new LevelList()));
+ } catch (FileAlreadyExistsException e) {
+ Driver.setMenu(new ErrorDisplay("Failed to add level\nA level already exists with the folder name '" + e.getFile() + "'", this));
+ } catch (IOException e) {
+ Driver.setMenu(new ErrorDisplay("Failed to create level\n"+e, this));
+ }
+ };
+ Driver.setMenu(new FolderNameEntry("level", this, next));
});
}
diff --git a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java
index ea17e21..cfb3673 100644
--- a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java
+++ b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java
@@ -82,7 +82,7 @@ public class Difficulties {
* @param text The name of the directory
* @throws IOException If there is a problem adding the level
*/
- public void add(String text) throws IOException {
+ public Difficulty add(String text) throws IOException {
File diffDir = new File(level.dir, text.toLowerCase().replaceAll("\\W+", "-"));
if (diffDir.exists()) {
throw new FileAlreadyExistsException(diffDir.getName());
@@ -92,6 +92,7 @@ public class Difficulties {
temp.title = text;
list.add(temp);
list.sort(Comparator.naturalOrder());
+ return temp;
}
else {
throw new IOException();
diff --git a/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java b/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java
index 2e99a7a..99fa285 100755
--- a/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java
+++ b/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java
@@ -5,6 +5,7 @@ import com.google.gson.GsonBuilder;
import com.google.gson.ToNumberPolicy;
import java.io.*;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -50,6 +51,9 @@ public class Difficulty implements Comparable<Difficulty>
return;
}
Map<String, Object> data = jsonParser.fromJson(new FileReader(jsonFile), Map.class);
+ if (data == null) {
+ data = new HashMap<>();
+ }
title = (String) data.getOrDefault("title", title);
bpm = (Double) data.getOrDefault("bpm", bpm);
@@ -78,8 +82,13 @@ public class Difficulty implements Comparable<Difficulty>
* @throws IOException If there is a problem writing to the file
*/
public void writeMetadata() throws IOException {
- jsonFile.createNewFile();
+ if (!jsonFile.createNewFile()) {
+ throw new IOException("Could not create file " + jsonFile.getAbsolutePath());
+ }
Map<String, Object> data = jsonParser.fromJson(new FileReader(jsonFile), Map.class); // start with previous values
+ if (data == null) {
+ data = new HashMap<>();
+ }
data.put("title", title);
data.put("endTime", endTime);
data.put("priority", order);
diff --git a/src/main/java/net/sowgro/npehero/levelapi/Levels.java b/src/main/java/net/sowgro/npehero/levelapi/Levels.java
index c82c2fa..37878d8 100755
--- a/src/main/java/net/sowgro/npehero/levelapi/Levels.java
+++ b/src/main/java/net/sowgro/npehero/levelapi/Levels.java
@@ -39,7 +39,7 @@ public class Levels {
try {
Level level = new Level(file);
list.add(level);
- } catch (IOException e) {
+ } catch (Exception e) {
problems.put(file.getName(), e);
e.printStackTrace();
}
@@ -52,7 +52,7 @@ public class Levels {
* @param text: the name of the directory and default title
* @throws IOException if there was an error adding the level
*/
- public static void add(String text) throws IOException {
+ public static Level add(String text) throws IOException {
File levelDir = new File(dir, text.toLowerCase().replaceAll("\\W+", "-"));
if (levelDir.exists()) {
throw new FileAlreadyExistsException(levelDir.getName());
@@ -61,6 +61,7 @@ public class Levels {
Level temp = new Level(levelDir);
temp.title = text;
list.add(temp);
+ return temp;
}
else {
throw new IOException();