diff options
Diffstat (limited to 'src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java')
-rwxr-xr-x | src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java | 150 |
1 files changed, 150 insertions, 0 deletions
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 |