aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-07-20 02:12:42 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-07-20 02:12:42 -0400
commita2b9e7822ccb32061a97de0bcbf400ea28e94d45 (patch)
treec66b692d2ad4deabd7aa469adf46f67387817659 /src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java
parentaa261bf9490582033bef55afec92673ea36d87cd (diff)
downloadNPEhero-a2b9e7822ccb32061a97de0bcbf400ea28e94d45.tar.gz
NPEhero-a2b9e7822ccb32061a97de0bcbf400ea28e94d45.tar.bz2
NPEhero-a2b9e7822ccb32061a97de0bcbf400ea28e94d45.zip
Begin level validation and more refactoring
Diffstat (limited to 'src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java')
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/devmenu/LevelEditor.java68
1 files changed, 43 insertions, 25 deletions
diff --git a/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java b/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java
index 3a7561e..eef42f5 100755
--- a/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java
+++ b/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java
@@ -2,13 +2,10 @@ package net.sowgro.npehero.devmenu;
import java.io.File;
-import javafx.beans.property.ReadOnlyBooleanWrapper;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.geometry.Pos;
import javafx.scene.control.*;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.VBox;
+import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
@@ -16,6 +13,7 @@ import net.sowgro.npehero.Driver;
import net.sowgro.npehero.main.Difficulty;
import net.sowgro.npehero.main.Level;
import net.sowgro.npehero.main.Sound;
+import net.sowgro.npehero.main.ValidIndicator;
public class LevelEditor extends Pane
{
@@ -23,11 +21,6 @@ public class LevelEditor extends Pane
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, Pane prev)
{
Text folderNameLabel = new Text("Folder name");
@@ -63,35 +56,53 @@ public class LevelEditor extends Pane
HBox colorPickerBox = new HBox();
colorPickerBox.getChildren().addAll(colorsPickers);
- Text filesLabel = new Text("Files");
+ ValidIndicator songValid = new ValidIndicator();
+ if (level.song == null) {
+ songValid.setInvalid("Missing file song.wav!");
+ }
+ HBox filesLabel = new HBox(new Text("Files"), songValid);
FileChooser backgroundChooser = new FileChooser();
backgroundChooser.getExtensionFilters().add(new ExtensionFilter("PNG", "*.png"));
- Button backgroundButton = new Button("Import background PNG");
+ Button backgroundButton = new Button("Background Image");
backgroundButton.setOnAction(e -> {selectedBackground = backgroundChooser.showOpenDialog(Driver.primaryStage);});
FileChooser previewChooser = new FileChooser();
previewChooser.getExtensionFilters().add(new ExtensionFilter("PNG", "*.png"));
- Button previewButton = new Button("Import preview PNG");
+ Button previewButton = new Button("Preview Image");
previewButton.setOnAction(e -> {selectedPreview = previewChooser.showOpenDialog(Driver.primaryStage);});
FileChooser songChooser = new FileChooser();
songChooser.getExtensionFilters().add(new ExtensionFilter("WAV", "*.wav"));
- Button songButton = new Button("Import song WAV");
+ Button songButton = new Button("Song file");
songButton.setOnAction(e -> selectedSong = songChooser.showOpenDialog(Driver.primaryStage));
- Text diffLabel = new Text("Difficulties");
+
+ ValidIndicator diffsInvalid = new ValidIndicator();
+ if (level.difficulties.validList.isEmpty()) {
+ diffsInvalid.setInvalid("This level contains no valid difficulties!");
+ }
+ HBox diffLabel = new HBox(new Text("Difficulties"), diffsInvalid);
+ diffLabel.setSpacing(5);
+
TableView<Difficulty> diffList = new TableView<>();
TableColumn<Difficulty,String> diffCol = new TableColumn<>("Difficulty");
- TableColumn<Difficulty,Boolean> validCol = new TableColumn<>("Valid?");
+ TableColumn<Difficulty,String> validCol = new TableColumn<>("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));
+ validCol.setCellValueFactory(data -> {
+ if (data.getValue().isValid) {
+ return new ReadOnlyStringWrapper("Yes");
+ }
+ else {
+ return new ReadOnlyStringWrapper("No");
+ }
+ });
diffList.setItems(level.difficulties.list);
@@ -136,17 +147,20 @@ public class LevelEditor extends Pane
level.writeMetadata();
});
- VBox options = new VBox();
- options.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,artistLabel,artist,descLabel,desc,colorsLabel,
- colorPickerBox,filesLabel,previewButton,backgroundButton,songButton,save);
- options.setSpacing(10);
+ VBox left = new VBox(filesLabel, songButton, previewButton, backgroundButton, colorsLabel, colorPickerBox);
+ left.setSpacing(10);
+ left.setPrefWidth(300);
- VBox diffBox = new VBox();
- diffBox.getChildren().addAll(diffLabel,diffList,/*buttons,newDiffBox,*/ newDiffs);
- diffBox.setSpacing(10);
+ VBox center = new VBox(folderNameLabel,folderName,titleLabel,title,artistLabel,artist,descLabel,desc);
+ center.setSpacing(10);
+ center.setPrefWidth(300);
+
+ VBox right = new VBox(diffLabel,diffList,newDiffs);
+ right.setSpacing(10);
+ center.setPrefWidth(300);
HBox mainBox = new HBox();
- mainBox.getChildren().addAll(options,diffBox);
+ mainBox.getChildren().addAll(left, center, right);
mainBox.setSpacing(30);
Button exit = new Button();
@@ -156,10 +170,14 @@ public class LevelEditor extends Pane
Driver.setMenu(prev);
});
+ HBox bottom = new HBox(save, exit);
+ bottom.setAlignment(Pos.CENTER);
+ bottom.setSpacing(10);
+
VBox centerBox = new VBox();
centerBox.setAlignment(Pos.CENTER);
centerBox.setSpacing(10);
- centerBox.getChildren().addAll(mainBox,exit);
+ centerBox.getChildren().addAll(mainBox,bottom);
centerBox.setMinWidth(400);
HBox rootBox = new HBox();