aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/devmenu
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sowgro/npehero/devmenu')
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/devmenu/DebugMenu.java41
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/devmenu/DiffEditor.java79
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/devmenu/LevelEditor.java150
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/devmenu/LevelList.java72
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/devmenu/NotesEditor.java101
5 files changed, 443 insertions, 0 deletions
diff --git a/src/main/java/net/sowgro/npehero/devmenu/DebugMenu.java b/src/main/java/net/sowgro/npehero/devmenu/DebugMenu.java
new file mode 100755
index 0000000..aecd438
--- /dev/null
+++ b/src/main/java/net/sowgro/npehero/devmenu/DebugMenu.java
@@ -0,0 +1,41 @@
+package net.sowgro.npehero.devmenu;
+
+import net.sowgro.npehero.Driver;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+public class DebugMenu
+{
+ public Stage primaryStage = new Stage();
+
+ /*
+ * this class is a layout class, most of its purpose is to place UI elements like Buttons within Panes like VBoxes.
+ * the creation of these UI elements are mostly not commented due to their repetitive and self explanatory nature.
+ * style classes are defined in the style.css file.
+ */
+ VBox primaryPane = new VBox();
+ public DebugMenu()
+ {
+ Button testVol = new Button();
+ testVol.setText("print volumes");
+ testVol.setOnAction(e -> System.out.println("setc:"+Driver.settingsController.effectsVol+" sndc:"+Driver.soundController.songMediaPlayer.getVolume()));
+
+ primaryPane.getChildren().addAll(testVol);
+
+ Scene primaryScene = new Scene(primaryPane);
+ primaryStage.setScene(primaryScene);
+ primaryStage.setTitle("debug");
+ }
+
+ public void show()
+ {
+ primaryStage.show();
+ }
+
+ public void addButton(Button b)
+ {
+ primaryPane.getChildren().add(b);
+ }
+}
diff --git a/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java b/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java
new file mode 100755
index 0000000..d4ebb02
--- /dev/null
+++ b/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java
@@ -0,0 +1,79 @@
+package net.sowgro.npehero.devmenu;
+
+import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
+
+import net.sowgro.npehero.Driver;
+import net.sowgro.npehero.gui.LevelSurround;
+import net.sowgro.npehero.gui.MainMenu;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+import net.sowgro.npehero.main.Difficulty;
+
+public class DiffEditor
+{
+ /*
+ * this class is a layout class, most of its purpose is to place UI elements like Buttons within Panes like VBoxes.
+ * the creation of these UI elements are mostly not commented due to their repetitive and self explanatory nature.
+ * style classes are defined in the style.css file.
+ */
+ public DiffEditor(Difficulty diff)
+ {
+ Stage primaryStage = new Stage();
+
+ Text folderNameLabel = new Text("Folder name (ordered alphabetically)");
+ TextField folderName = new TextField(diff.thisDir.getName());
+ folderName.setDisable(true);
+
+ Text titleLabel = new Text("Title");
+ TextField title = new TextField(diff.title);
+
+ Text bpmLabel = new Text("BPM");
+ TextField bpm = new TextField(diff.bpm+"");
+
+ Text numBeatsLabel = new Text("Number of beats (set by notes editor)");
+ TextField numBeats = new TextField(diff.numBeats+"");
+
+ Text priorityLabel = new Text("priority (lower first)");
+ TextField priority = new TextField(diff.priority+"");
+
+ Button editNotes = new Button("Edit notes");
+ editNotes.setOnAction(e -> {
+ try {
+ new NotesEditor(diff);
+ } catch (FileNotFoundException | UnsupportedEncodingException e1) {
+ e1.printStackTrace();
+ }
+ });
+
+ Button editScores = new Button("Clear leaderboard");
+ editScores.setOnAction(e -> diff.getLeaderboard().clear());
+
+ Button playLevel = new Button("Launch level");
+ playLevel.setOnAction(e -> Driver.setMenu(new LevelSurround(diff.level, diff, new MainMenu())));
+
+ Button refresh = new Button("Refresh");
+ refresh.setOnAction( e -> {
+ numBeats.setText(diff.numBeats+"");
+ });
+
+ Button save = new Button("Save");
+ save.setOnAction(e -> { //assigns text feilds to values
+ diff.title = title.getText();
+ diff.bpm = Double.parseDouble(bpm.getText());
+ diff.numBeats = Integer.parseInt(numBeats.getText());
+ diff.priority = Integer.parseInt(priority.getText());
+ diff.writeMetadata();
+ });
+
+ VBox main = new VBox();
+ main.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,bpmLabel,bpm,numBeatsLabel,numBeats,refresh,priorityLabel,priority,editNotes,editScores,playLevel,save);
+ Scene scene = new Scene(main);
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java b/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java
new file mode 100755
index 0000000..94fcc16
--- /dev/null
+++ b/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java
@@ -0,0 +1,150 @@
+package net.sowgro.npehero.devmenu;
+
+import java.io.File;
+
+import javafx.beans.property.ReadOnlyBooleanWrapper;
+import javafx.beans.property.ReadOnlyStringWrapper;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.ColorPicker;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
+import javafx.stage.FileChooser;
+import javafx.stage.Stage;
+import javafx.stage.FileChooser.ExtensionFilter;
+import net.sowgro.npehero.main.Difficulty;
+import net.sowgro.npehero.main.Level;
+
+public class LevelEditor
+{
+ private File selectedSong = null;
+ private File selectedPreview = null;
+ private File selectedBackground = null;
+
+ /*
+ * this class is a layout class, most of its purpose is to place UI elements like Buttons within Panes like VBoxes.
+ * the creation of these UI elements are mostly not commented due to their repetitive and self explanatory nature.
+ * style classes are defined in the style.css file.
+ */
+ public LevelEditor(Level level)
+ {
+ Stage primaryStage = new Stage();
+
+ Text folderNameLabel = new Text("Folder name");
+ TextField folderName = new TextField(level.thisDir.getName());
+ folderName.setDisable(true);
+
+ Text titleLabel = new Text("Title");
+ TextField title = new TextField(level.getTitle());
+
+ Text artistLabel = new Text("Artist");
+ TextField artist = new TextField(level.getArtist());
+
+ Text descLabel = new Text("Description");
+ TextField desc = new TextField(level.desc);
+
+ Text colorsLabel = new Text("Colors (Left to right)");
+ ColorPicker c1 = new ColorPicker(level.colors[0]);
+ ColorPicker c2 = new ColorPicker(level.colors[1]);
+ ColorPicker c3 = new ColorPicker(level.colors[2]);
+ ColorPicker c4 = new ColorPicker(level.colors[3]);
+ ColorPicker c5 = new ColorPicker(level.colors[4]);
+
+ Text filesLabel = new Text("Files");
+
+ FileChooser backgroundChooser = new FileChooser();
+ backgroundChooser.getExtensionFilters().add(new ExtensionFilter("PNG", "*.png"));
+ Button backgroundButton = new Button("Import background PNG");
+ backgroundButton.setOnAction(e -> {selectedBackground = backgroundChooser.showOpenDialog(primaryStage);});
+
+ FileChooser previewChooser = new FileChooser();
+ previewChooser.getExtensionFilters().add(new ExtensionFilter("PNG", "*.png"));
+ Button previewButton = new Button("Import preview PNG");
+ previewButton.setOnAction(e -> {selectedPreview = previewChooser.showOpenDialog(primaryStage);});
+
+ FileChooser songChooser = new FileChooser();
+ songChooser.getExtensionFilters().add(new ExtensionFilter("WAV", "*.wav"));
+ Button songButton = new Button("Import song WAV");
+ songButton.setOnAction(e -> selectedSong = songChooser.showOpenDialog(primaryStage));
+
+ Text diffLabel = new Text("Difficulties");
+
+ TableView<Difficulty> diffList = new TableView<Difficulty>();
+
+ TableColumn<Difficulty,String> diffCol = new TableColumn<Difficulty,String>("Difficulty");
+ TableColumn<Difficulty,Boolean> validCol = new TableColumn<Difficulty,Boolean>("Valid?");
+
+ diffList.getColumns().add(diffCol);
+ diffList.getColumns().add(validCol);
+
+ diffCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().title));
+ validCol.setCellValueFactory(data -> new ReadOnlyBooleanWrapper(data.getValue().isValid));
+
+ diffList.setItems(level.getDiffList());
+
+
+ Button edit = new Button("Edit");
+ edit.setOnAction(e -> new DiffEditor(diffList.getSelectionModel().getSelectedItem()));
+
+ Button remove = new Button("Delete");
+ remove.setOnAction(e -> level.removeDiff(diffList.getSelectionModel().getSelectedItem()));
+
+ Button refresh = new Button("Refresh");
+ refresh.setOnAction(e -> {
+ level.readData();
+ diffList.setItems(level.getDiffList());
+ });
+
+ HBox buttons = new HBox();
+ buttons.getChildren().addAll(edit,remove,refresh);
+
+ TextField newDiff = new TextField("new");
+ Button newDiffButton = new Button("add");
+ newDiffButton.setOnAction(e -> level.addDiff(newDiff.getText()));
+ HBox newDiffBox = new HBox();
+ newDiffBox.getChildren().addAll(newDiff,newDiffButton);
+
+ Button save = new Button("Save");
+ save.setOnAction(e -> { //asigns feilds to values
+ level.setTitle(title.getText());
+ level.setArtist(artist.getText());
+ level.desc = desc.getText();
+ level.colors[0] = c1.getValue();
+ level.colors[1] = c2.getValue();
+ level.colors[2] = c3.getValue();
+ level.colors[3] = c4.getValue();
+ level.colors[4] = c5.getValue();
+ if (selectedBackground != null && selectedBackground.exists())
+ {
+ level.addFile(selectedBackground,"background.png");
+ }
+ if (selectedPreview != null && selectedPreview.exists())
+ {
+ level.addFile(selectedPreview,"preview.png");
+ }
+ if (selectedSong != null)
+ {
+ level.addFile(selectedSong,"song.wav");
+ }
+ level.writeMetadata();
+ });
+
+ VBox options = new VBox();
+ options.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,artistLabel,artist,descLabel,desc,colorsLabel,
+ c1,c2,c3,c4,c5,filesLabel,previewButton,backgroundButton,songButton,save);
+
+ VBox diffBox = new VBox();
+ diffBox.getChildren().addAll(diffLabel,diffList,buttons,newDiffBox);
+
+ HBox mainBox = new HBox();
+ mainBox.getChildren().addAll(options,diffBox);
+
+ Scene scene = new Scene(mainBox);
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/net/sowgro/npehero/devmenu/LevelList.java b/src/main/java/net/sowgro/npehero/devmenu/LevelList.java
new file mode 100755
index 0000000..8d5e0cb
--- /dev/null
+++ b/src/main/java/net/sowgro/npehero/devmenu/LevelList.java
@@ -0,0 +1,72 @@
+package net.sowgro.npehero.devmenu;
+
+import javafx.beans.property.ReadOnlyBooleanWrapper;
+import javafx.beans.property.ReadOnlyStringWrapper;
+import net.sowgro.npehero.Driver;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+import net.sowgro.npehero.main.Level;
+import net.sowgro.npehero.main.LevelController;
+
+public class LevelList
+{
+ /*
+ * this class is a layout class, most of its purpose is to place UI elements like Buttons within Panes like VBoxes.
+ * the creation of these UI elements are mostly not commented due to their repetitive and self explanatory nature.
+ * style classes are defined in the style.css file.
+ */
+ public LevelList()
+ {
+ //sets up table view: requires special getters, setters and constructors to work
+ TableView<Level> levels = new TableView<Level>();
+
+ TableColumn<Level,String> titleCol = new TableColumn<Level,String>("Title");
+ TableColumn<Level,String> artistCol = new TableColumn<Level,String>("Artist");
+ TableColumn<Level,Boolean> validCol = new TableColumn<>("Valid?");
+
+ levels.getColumns().add(titleCol);
+ levels.getColumns().add(artistCol);
+ levels.getColumns().add(validCol);
+
+ titleCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getTitle()));
+ artistCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getArtist()));
+ validCol.setCellValueFactory(data -> new ReadOnlyBooleanWrapper(data.getValue().isValid()));
+
+ levels.setItems(LevelController.getLevelList());
+
+
+ Button edit = new Button("Edit");
+ edit.setOnAction(e -> new LevelEditor(levels.getSelectionModel().getSelectedItem()));
+
+ Button remove = new Button("Delete");
+ remove.setOnAction(e -> Driver.levelController.removeLevel(levels.getSelectionModel().getSelectedItem()));
+
+ Button refresh = new Button("Refresh");
+ refresh.setOnAction(e -> {
+ Driver.levelController.readData();
+ levels.setItems(LevelController.getLevelList());
+ });
+
+ HBox buttons = new HBox();
+ buttons.getChildren().addAll(edit,remove,refresh);
+
+ TextField newLevel = new TextField("new");
+ Button newLevelButton = new Button("add");
+ newLevelButton.setOnAction(e -> Driver.levelController.addLevel(newLevel.getText()));
+ HBox newLevelBox = new HBox();
+ newLevelBox.getChildren().addAll(newLevel,newLevelButton);
+
+ VBox main = new VBox();
+ main.getChildren().addAll(levels,buttons,newLevelBox);
+ Scene scene = new Scene(main, 400, 400);
+ Stage primaryStage = new Stage();
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java b/src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java
new file mode 100755
index 0000000..25b21f1
--- /dev/null
+++ b/src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java
@@ -0,0 +1,101 @@
+package net.sowgro.npehero.devmenu;
+
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import net.sowgro.npehero.gameplay.Timer;
+import net.sowgro.npehero.Driver;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.input.KeyCode;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+import net.sowgro.npehero.main.Difficulty;
+
+public class NotesEditor
+{
+ Text help;
+ String t1 = "Press Start to begin recording. Use the same keys. Note: existing notes will be overwitten.";
+ String t2 = "Now recording. Press Stop or ESC to finish";
+ Difficulty diff;
+ Timer timer;
+ PrintWriter writer;
+ public NotesEditor(Difficulty diff) throws FileNotFoundException, UnsupportedEncodingException
+ {
+ this.diff = diff;
+
+ help = new Text(t1);
+ Text cur = new Text("-----");
+
+ Button start = new Button("Start");
+ start.setOnAction(e -> start());
+ start.setFocusTraversable(false);
+
+ Button stop = new Button("Stop");
+ stop.setOnAction(e -> stop());
+ stop.setFocusTraversable(false);
+
+ VBox main = new VBox();
+ main.getChildren().addAll(help,cur,start,stop);
+
+ Scene scene = new Scene(main);
+ Stage primaryStage = new Stage();
+ primaryStage.setScene(scene);
+ primaryStage.show();
+
+ writer = new PrintWriter(diff.notes, "UTF-8");
+
+ scene.setOnKeyPressed(e -> {
+ if (e.getCode() == KeyCode.D) {
+ writer.println("d"+timer);
+ cur.setText("d"+timer);
+ }
+ if (e.getCode() == KeyCode.F) {
+ writer.println("f"+timer);
+ cur.setText("f"+timer);
+ }
+ if (e.getCode() == KeyCode.SPACE) {
+ writer.println("s"+timer);
+ cur.setText("s"+timer);
+ }
+ if (e.getCode() == KeyCode.J) {
+ writer.println("j"+timer);
+ cur.setText("j"+timer);
+ }
+ if (e.getCode() == KeyCode.K) {
+ writer.println("k"+timer);
+ cur.setText("k"+timer);
+ }
+ if (e.getCode() == KeyCode.ESCAPE)
+ {
+ stop();
+ }
+ });
+
+ primaryStage.setOnCloseRequest(e -> stop());
+ }
+
+ private void start()
+ {
+ Driver.soundController.playSong(diff.level.song);
+ timer = new Timer(diff.bpm);
+ help.setText(t2);
+ }
+
+ private void stop()
+ {
+ try
+ {
+ Driver.soundController.endSong();
+ diff.numBeats = (int)Double.parseDouble(timer.toString());
+ timer = null;
+ writer.close();
+ help.setText(t1);
+ }
+ catch (Exception e)
+ {
+ //System.err.println("tried to stop but already stopped");
+ }
+ }
+} \ No newline at end of file