aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sowgro/npehero/editor/LevelEditor.java')
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelEditor.java298
1 files changed, 122 insertions, 176 deletions
diff --git a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
index 0578d31..1f30006 100755
--- a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
+++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
@@ -2,14 +2,14 @@ package net.sowgro.npehero.editor;
import java.io.IOException;
-import javafx.beans.property.ReadOnlyStringWrapper;
+import javafx.geometry.Insets;
import javafx.geometry.Pos;
+import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.layout.*;
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.*;
@@ -22,31 +22,32 @@ public class LevelEditor extends Page
private final TextField artistEntry;
private final TextField descEntry;
private final ColorPicker[] colorsPickers;
- private final TableView<Difficulty> diffList;
- Level level;
+ private final Level level;
- private HBox content = new HBox();
+ private final HBox content = new HBox();
- public LevelEditor(Level level, Page prev)
- {
+ record OptionEntry(String label, Node action, ValidIndicator vi) {
+ OptionEntry(String label, Node action) {
+ this(label, action, null);
+ }
+ }
+
+
+ public LevelEditor(Level level, Page prev) {
this.level = level;
- Label folderNameLabel = new Label("Folder name");
+
TextField folderName = new TextField();
if (level.dir != null) {
folderName.setText(level.dir.getName());
folderName.setDisable(true);
}
- Label titleLabel = new Label("Title");
titleEntry = new TextField(level.title);
- Label artistLabel = new Label("Artist");
artistEntry = new TextField(level.artist);
- Label descLabel = new Label("Description");
descEntry = new TextField(level.desc);
- Label colorsLabel = new Label("Colors");
colorsPickers = new ColorPicker[] {
new ColorPicker(level.colors[0]),
new ColorPicker(level.colors[1]),
@@ -64,121 +65,26 @@ public class LevelEditor extends Page
colorPickerBox.getChildren().addAll(colorsPickers);
colorPickerBox.setSpacing(10);
- Label backgroundLabel = new Label("Background Image");
- FileChooser backgroundChooser = new FileChooser();
- backgroundChooser.getExtensionFilters().add(new ExtensionFilter("Image Files (*.png, *.jpg, *.gif)", "*.png", "*.jpg", "*.gif"));
- Button backgroundImport = new Button("Import");
- Button backgroundRemove = new Button("Remove");
- backgroundImport.setOnAction(_ -> {
- Sound.playSfx(Sound.FORWARD);
- var f = backgroundChooser.showOpenDialog(Driver.primaryStage);
- if (f == null) {
- return;
- }
- try {
- level.addFile(f, Level.BACKGROUND_FILE);
- } catch (IOException e) {
- // TODO
- e.printStackTrace();
- }
- backgroundRemove.setDisable(level.background == null);
- });
- backgroundRemove.setOnAction(_ -> {
- Sound.playSfx(Sound.FORWARD);
- try {
- level.removeFile(Level.BACKGROUND_FILE);
- } catch (IOException e) {
- // TODO
- e.printStackTrace();
- }
- backgroundRemove.setDisable(level.background == null);
- });
- backgroundRemove.setDisable(level.background == null);
-
- Label previewLabel = new Label("Preview Image");
- FileChooser previewChooser = new FileChooser();
- previewChooser.getExtensionFilters().add(new ExtensionFilter("Image Files (*.png, *.jpg, *.gif)", "*.png", "*.jpg", "*.gif"));
- Button previewImport = new Button("Import");
- Button previewRemove = new Button("Remove");
- previewImport.setOnAction(_ -> {
- Sound.playSfx(Sound.FORWARD);
- var f = previewChooser.showOpenDialog(Driver.primaryStage);
- if (f == null) {
- return;
- }
- try {
- level.addFile(f, Level.PREVIEW_FILE);
- } catch (IOException e) {
- e.printStackTrace(); // TODO
- }
- previewRemove.setDisable(level.preview == null);
- });
- previewRemove.setOnAction(_ -> {
- Sound.playSfx(Sound.FORWARD);
- try {
- level.removeFile(Level.PREVIEW_FILE);
- } catch (IOException e) {
- e.printStackTrace(); // TODO
- }
- previewRemove.setDisable(level.preview == null);
- });
- previewRemove.setDisable(level.preview == null);
-
- HBox songLabel = new HBox(new Label("Song File"), songValid);
- FileChooser songChooser = new FileChooser();
- songChooser.getExtensionFilters().add(new ExtensionFilter("Audio Files (*.wav, *.mp3, *.aac)", "*.wav", "*.mp3", "*.aac"));
- Button songImport = new Button("Import");
- Button songRemove = new Button("Remove");
- songImport.setOnAction(_ -> {
- Sound.playSfx(Sound.FORWARD);
- var f = songChooser.showOpenDialog(Driver.primaryStage);
- try {
- level.addFile(f, Level.SONG_FILE);
- } catch (IOException e) {
- e.printStackTrace(); // TODO
- }
- songRemove.setDisable(level.song == null);
- });
- songRemove.setOnAction(_ -> {
- Sound.playSfx(Sound.FORWARD);
- try {
- level.removeFile(Level.SONG_FILE);
- } catch (IOException e) {
- e.printStackTrace(); // TODO
- }
- songRemove.setDisable(level.song == null);
- });
- songRemove.setDisable(level.song == null);
-
- HBox diffLabel = new HBox(new Label("Difficulties"), diffsInvalid);
- diffLabel.setSpacing(5);
-
-
- diffList = new TableView<>();
-
- TableColumn<Difficulty,String> diffCol = new TableColumn<>("Difficulty");
- TableColumn<Difficulty,String> validCol = new TableColumn<>("Valid?");
-
- diffCol.prefWidthProperty().bind(diffList.widthProperty().multiply(0.45));
- validCol.prefWidthProperty().bind(diffList.widthProperty().multiply(0.45));
-
- diffList.getColumns().add(diffCol);
- diffList.getColumns().add(validCol);
-
- diffCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().title));
- validCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().isValid() ? "Yes" : "No"));
- diffList.setItems(level.difficulties.list);
-
- diffList.setRowFactory(_ -> {
- TableRow<Difficulty> row = new TableRow<>();
- row.setOnMouseClicked(event -> {
- if (event.getClickCount() == 2 && (! row.isEmpty()) ) {
- Difficulty rowData = row.getItem();
- Driver.setMenu(new DiffEditor(rowData, this));
- }
- });
- return row ;
- });
+ Node songFile = createFileImportBox(
+ Level.SONG_FILE,
+ level.song,
+ "Audio Files (*.wav, *.mp3, *.aac)",
+ new String[]{"*.wav", "*.mp3", "*.aac"}
+ );
+
+ Node previewImage = createFileImportBox(
+ Level.PREVIEW_FILE,
+ level.preview,
+ "Image Files (*.png, *.jpg, *.gif)",
+ new String[]{"*.png", "*.jpg", "*.gif"}
+ );
+
+ Node backgroundImage = createFileImportBox(
+ Level.BACKGROUND_FILE,
+ level.background,
+ "Image Files (*.png, *.jpg, *.gif)",
+ new String[]{"*.png", "*.jpg", "*.gif"}
+ );
Button newDiffs = new Button("Edit difficulties");
newDiffs.setOnAction(_ -> {
@@ -186,49 +92,57 @@ public class LevelEditor extends Page
Driver.setMenu(new DiffList(level, this));
});
- diffList.setSelectionModel(null);
-
-
- var b1 = new HBox(songImport, songRemove);
- b1.setSpacing(10);
- var b2 = new HBox(previewImport, previewRemove);
- b2.setSpacing(10);
- var b3 = new HBox(backgroundImport, backgroundRemove);
- b3.setSpacing(10);
- VBox optionsBox = new VBox(folderNameLabel, folderName, titleLabel, titleEntry, artistLabel, artistEntry, descLabel, descEntry,
- songLabel, b1, previewLabel, b2, backgroundLabel, b3, colorsLabel, colorPickerBox/*, new Separator(Orientation.HORIZONTAL), save*/);
- optionsBox.setSpacing(10);
-// left.setPrefWidth(300);
-// optionsBox.setPadding(new Insets(5));
-
- ScrollPane leftScroll = new ScrollPane(optionsBox);
- leftScroll.getStyleClass().remove("scroll-pane");
-// leftScroll.getStyleClass().add("box");
-// leftScroll.setPadding(new Insets(5));
- leftScroll.setFitToWidth(true);
- leftScroll.setPrefWidth(400);
-
-// VBox center = new VBox();
-// center.setSpacing(10);
-// center.setPrefWidth(300);
-
- VBox right = new VBox(diffLabel, diffList,newDiffs);
- right.setSpacing(10);
-// right.setPrefWidth(325);
+ OptionEntry[][] optionEntries = {
+ {
+ new OptionEntry("Folder", folderName),
+ new OptionEntry("Title", titleEntry),
+ new OptionEntry("Artist", artistEntry),
+ new OptionEntry("Description", descEntry),
+ new OptionEntry("Difficulties", newDiffs, diffsInvalid)
+ },
+ {
+ new OptionEntry("Song File", songFile, songValid),
+ new OptionEntry("Preview Image", previewImage),
+ new OptionEntry("Background Image", backgroundImage),
+ new OptionEntry("Block Colors", colorPickerBox),
+ }
+ };
+ HBox options = new HBox();
+ for (OptionEntry[] col : optionEntries) {
+ VBox colBox = new VBox();
+ colBox.setSpacing(10);
+ colBox.setPrefWidth(400);
+ for (OptionEntry option : col) {
+ Label label = new Label(option.label);
+ HBox labelBox = new HBox(label);
+ labelBox.setSpacing(5);
+ if (option.vi != null) {
+ labelBox.getChildren().add(option.vi);
+ }
+ VBox optionBox = new VBox(labelBox, option.action);
+ optionBox.setPadding(new Insets(10));
+ optionBox.setSpacing(5);
+ optionBox.getStyleClass().add("box");
+ colBox.getChildren().add(optionBox);
+ }
+ options.getChildren().add(colBox);
+ }
+ options.setSpacing(10);
- Label optionsLable = new Label("Options");
- VBox left = new VBox(/*optionsLable, */leftScroll);
- left.setSpacing(10);
+ ScrollPane optionsScroll = new ScrollPane(options);
+ optionsScroll.getStyleClass().remove("scroll-pane");
+ optionsScroll.setFitToWidth(true);
+// optionsScroll.setPrefWidth(1100);
HBox mainBox = new HBox();
- mainBox.getChildren().addAll(left, right);
+ mainBox.getChildren().addAll(optionsScroll);
mainBox.setSpacing(10);
- mainBox.prefHeightProperty().bind(content.heightProperty().multiply(0.75));
+ mainBox.maxHeightProperty().bind(content.heightProperty().multiply(0.75));
mainBox.maxWidthProperty().bind(content.widthProperty().multiply(0.95));
Button exit = new Button();
exit.setText("Back");
- exit.setOnAction(e -> {
+ exit.setOnAction(_ -> {
Sound.playSfx(Sound.BACKWARD);
Driver.setMenu(prev);
});
@@ -253,8 +167,18 @@ public class LevelEditor extends Page
@Override
public void onView() {
- diffList.refresh();
- validate();
+ // 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!");
+ } else {
+ songValid.setValid();
+ }
}
@Override
@@ -269,20 +193,42 @@ public class LevelEditor extends Page
level.colors[4] = colorsPickers[4].getValue();
try {
level.writeMetadata();
- } catch (IOException ex) {
- // TODO
+ } catch (IOException e) {
+ e.printStackTrace(); // TODO
}
- 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!");
- }
+ private Node createFileImportBox(String filename, Object dest, String extDesc, String[] extensions) {
+ FileChooser fileChooser = new FileChooser();
+ fileChooser.getExtensionFilters().add(new ExtensionFilter(extDesc, extensions));
+ Button importButton = new Button("Import");
+ Button removeButton = new Button("Remove");
+ importButton.setOnAction(_ -> {
+ Sound.playSfx(Sound.FORWARD);
+ var f = fileChooser.showOpenDialog(Driver.primaryStage);
+ if (f == null) {
+ return;
+ }
+ try {
+ level.addFile(f, filename);
+ } catch (IOException e) {
+ e.printStackTrace(); // TODO
+ }
+ removeButton.setDisable(dest == null);
+ });
+ removeButton.setOnAction(_ -> {
+ Sound.playSfx(Sound.FORWARD);
+ try {
+ level.removeFile(filename);
+ } catch (IOException e) {
+ e.printStackTrace(); // TODO
+ }
+ removeButton.setDisable(dest == null);
+ });
+ removeButton.setDisable(dest == null);
+
+ var b1 = new HBox(importButton, removeButton);
+ b1.setSpacing(10);
+ return b1;
}
} \ No newline at end of file