diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-08 02:41:31 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-08 02:41:31 -0400 | 
| commit | ee2229339429d50afa33e2f8b9c0ee0939766290 (patch) | |
| tree | a5ee54bd23c24950e9b10815f3e87605906992d8 /src/main/java/net/sowgro/npehero/devmenu | |
| parent | 9e1371424bdf4c31d756d686313730d4c61f7ac5 (diff) | |
| download | NPEhero-ee2229339429d50afa33e2f8b9c0ee0939766290.tar.gz NPEhero-ee2229339429d50afa33e2f8b9c0ee0939766290.tar.bz2 NPEhero-ee2229339429d50afa33e2f8b9c0ee0939766290.zip  | |
Change project structure, embed resources into jar and remove libraries from source control
Diffstat (limited to 'src/main/java/net/sowgro/npehero/devmenu')
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  | 
