diff options
author | Zach Jordan <zxjordan5@gmail.com> | 2023-06-02 08:14:35 -0400 |
---|---|---|
committer | Zach Jordan <zxjordan5@gmail.com> | 2023-06-02 08:14:35 -0400 |
commit | 408c42dc788a7d9c218071dea34843b4196fa7c8 (patch) | |
tree | 6a24298db96c1bec42d9720cc52b85451f896aab /src/devmenu | |
parent | b3306178c75bec60e0842285d20a816b318dba66 (diff) | |
parent | a0739dc019417f17e77f6c959ebc0989c873514c (diff) | |
download | NPEhero-408c42dc788a7d9c218071dea34843b4196fa7c8.tar.gz NPEhero-408c42dc788a7d9c218071dea34843b4196fa7c8.tar.bz2 NPEhero-408c42dc788a7d9c218071dea34843b4196fa7c8.zip |
Merge branch 'main' of https://gitlab.sowgro.net/guitarheros/guitarhero
Diffstat (limited to 'src/devmenu')
-rw-r--r-- | src/devmenu/DebugMenu.java | 7 | ||||
-rw-r--r-- | src/devmenu/DiffEditor.java | 28 | ||||
-rw-r--r-- | src/devmenu/LevelEditor.java | 79 | ||||
-rw-r--r-- | src/devmenu/LevelList.java | 31 | ||||
-rw-r--r-- | src/devmenu/NotesEditor.java | 67 |
5 files changed, 169 insertions, 43 deletions
diff --git a/src/devmenu/DebugMenu.java b/src/devmenu/DebugMenu.java index 9b68423..19fc8e1 100644 --- a/src/devmenu/DebugMenu.java +++ b/src/devmenu/DebugMenu.java @@ -3,7 +3,6 @@ package devmenu; import gui.Driver; import javafx.scene.Scene; import javafx.scene.control.Button; -import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; @@ -19,10 +18,6 @@ public class DebugMenu VBox primaryPane = new VBox(); public DebugMenu() { - Button levelCreator = new Button(); - levelCreator.setText("LEVEL CREATOR"); - levelCreator.setOnAction(e -> new LevelList()); - Button wallpaperTest = new Button(); wallpaperTest.setText("wallpaper trees"); wallpaperTest.setOnAction(e -> Driver.setBackground("assets/trees.png")); @@ -39,7 +34,7 @@ public class DebugMenu testVol.setText("print volumes"); testVol.setOnAction(e -> System.out.println("sfx:"+Driver.settingsController.effectsVol+" msc:"+Driver.settingsController.musicVol)); - primaryPane.getChildren().addAll(levelCreator,wallpaperTest,wallpaperTest2,wallpaperTest3,testVol); + primaryPane.getChildren().addAll(wallpaperTest,wallpaperTest2,wallpaperTest3,testVol); Scene primaryScene = new Scene(primaryPane); primaryStage.setScene(primaryScene); diff --git a/src/devmenu/DiffEditor.java b/src/devmenu/DiffEditor.java index 278e3de..e2ce5d8 100644 --- a/src/devmenu/DiffEditor.java +++ b/src/devmenu/DiffEditor.java @@ -1,5 +1,8 @@ package devmenu; +import java.io.FileNotFoundException; +import java.io.UnsupportedEncodingException; + import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; @@ -10,10 +13,18 @@ import 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); @@ -25,26 +36,27 @@ public class DiffEditor TextField numBeats = new TextField(diff.numBeats+""); Button editNotes = new Button("Edit notes"); - editNotes.setOnAction(e -> new NotesEditor(diff)); + editNotes.setOnAction(e -> { + try { + new NotesEditor(diff); + } catch (FileNotFoundException | UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + }); Button editScores = new Button("Edit leaderboard"); Button save = new Button("Save"); - save.setOnAction(e -> { + save.setOnAction(e -> { //assigns text feilds to values diff.title = title.getText(); - diff.bpm = Integer.parseInt(bpm.getText()); + diff.bpm = Double.parseDouble(bpm.getText()); diff.numBeats = Integer.parseInt(numBeats.getText()); - if(! diff.thisDir.getName().equals(folderName.getText())); - { - //will rename - } diff.writeMetadata(); }); VBox main = new VBox(); main.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,bpmLabel,bpm,numBeatsLabel,numBeats,editNotes,editScores,save); Scene scene = new Scene(main); - Stage primaryStage = new Stage(); primaryStage.setScene(scene); primaryStage.show(); } diff --git a/src/devmenu/LevelEditor.java b/src/devmenu/LevelEditor.java index 00a21a3..94509ac 100644 --- a/src/devmenu/LevelEditor.java +++ b/src/devmenu/LevelEditor.java @@ -1,7 +1,6 @@ package devmenu; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; +import java.io.File; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; @@ -12,16 +11,30 @@ 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 main.Difficulty; import 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()); @@ -39,13 +52,45 @@ public class LevelEditor ColorPicker c4 = new ColorPicker(level.colors[3]); ColorPicker c5 = new ColorPicker(level.colors[4]); - ObservableList diffList2 = FXCollections.observableArrayList(); + 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"); + + ObservableList<Difficulty> diffList2 = FXCollections.observableArrayList(); diffList2.addAll(level.getDiffList()); - ListView<Difficulty> diffList = new ListView(); + ListView<Difficulty> diffList = new ListView<Difficulty>(); diffList.setItems(diffList2); - diffList.setOnMouseClicked(e -> new DiffEditor(diffList.getSelectionModel().getSelectedItem())); - Text diffLabel = new Text("Difficulties"); + 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 -> { + diffList2.clear(); + diffList2.addAll(level.getDiffList()); + diffList.setItems(diffList2); + }); + + HBox buttons = new HBox(); + buttons.getChildren().addAll(edit,remove,refresh); TextField newDiff = new TextField("new"); Button newDiffButton = new Button("add"); @@ -54,7 +99,7 @@ public class LevelEditor newDiffBox.getChildren().addAll(newDiff,newDiffButton); Button save = new Button("Save"); - save.setOnAction(e -> { + save.setOnAction(e -> { //asigns feilds to values level.setTitle(title.getText()); level.setArtist(artist.getText()); level.desc = desc.getText(); @@ -63,13 +108,25 @@ public class LevelEditor 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 main = new VBox(); - main.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,artistLabel,artist,descLabel,desc,colorsLabel,c1,c2,c3,c4,c5,diffLabel,diffList,newDiffBox,save); - - Stage primaryStage = new Stage(); + main.getChildren().addAll(folderNameLabel,folderName,titleLabel,title,artistLabel,artist,descLabel,desc,colorsLabel, + c1,c2,c3,c4,c5,filesLabel,previewButton,backgroundButton,songButton,diffLabel,diffList,buttons,newDiffBox,save); + Scene scene = new Scene(main); primaryStage.setScene(scene); primaryStage.show(); diff --git a/src/devmenu/LevelList.java b/src/devmenu/LevelList.java index e3dec7f..7eaca84 100644 --- a/src/devmenu/LevelList.java +++ b/src/devmenu/LevelList.java @@ -1,13 +1,6 @@ package devmenu; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; - import gui.Driver; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; @@ -18,10 +11,17 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import main.Level; +import main.LevelController; public class LevelList { 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. + */ public LevelList() { //sets up table view: requires special getters, setters and constructors to work @@ -36,8 +36,19 @@ public class LevelList titleCol.setCellValueFactory(new PropertyValueFactory<Level, String>("title")); artistCol.setCellValueFactory(new PropertyValueFactory<Level, String>("artist")); - levels.setItems(Driver.levelController.levelList); - levels.setOnMouseClicked(e -> new LevelEditor(levels.getSelectionModel().getSelectedItem())); + levels.setItems(LevelController.levelList); + + Button edit = new Button("Edit"); + edit.setOnAction(e -> new LevelEditor(levels.getSelectionModel().getSelectedItem())); + + Button remove = new Button("Delete"); + remove.setOnAction(e -> gui.Driver.levelController.removeLevel(levels.getSelectionModel().getSelectedItem())); + + Button refresh = new Button("Refresh"); + refresh.setOnAction(e -> levels.setItems(LevelController.levelList)); + + HBox buttons = new HBox(); + buttons.getChildren().addAll(edit,remove,refresh); TextField newLevel = new TextField("new"); Button newLevelButton = new Button("add"); @@ -46,7 +57,7 @@ public class LevelList newLevelBox.getChildren().addAll(newLevel,newLevelButton); VBox main = new VBox(); - main.getChildren().addAll(levels,newLevelBox); + main.getChildren().addAll(levels,buttons,newLevelBox); Scene scene = new Scene(main); primaryStage.setScene(scene); primaryStage.show(); diff --git a/src/devmenu/NotesEditor.java b/src/devmenu/NotesEditor.java index 5f26890..e94ff2e 100644 --- a/src/devmenu/NotesEditor.java +++ b/src/devmenu/NotesEditor.java @@ -1,11 +1,22 @@ package devmenu; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; import gameplay.Timer; import javafx.scene.Scene; import javafx.scene.control.Button; +import javafx.scene.input.KeyCode; import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.media.Media; +import javafx.scene.media.MediaPlayer; +import javafx.scene.media.MediaView; import javafx.scene.text.Text; import javafx.stage.Stage; import main.Difficulty; @@ -13,38 +24,78 @@ import sound.AudioFilePlayer; public class NotesEditor { + Text help; + String t1 = "Press Start to begin recording. Use the same keys."; + String t2 = "Now recording. Press Stop or ESC to finish"; + MediaPlayer mediaPlayer; Difficulty diff; AudioFilePlayer music; Timer timer; - public NotesEditor(Difficulty diff) + PrintWriter writer; + public NotesEditor(Difficulty diff) throws FileNotFoundException, UnsupportedEncodingException { this.diff = diff; - - Text timerDisplay = new Text("TIMER"); + + help = new Text(t1); Button start = new Button("Start"); start.setOnAction(e -> start()); - Button stop = new Button("Stop"); + Button stop = new Button("Pause"); stop.setOnAction(e -> stop()); - HBox main = new HBox(); - main.getChildren().addAll(timerDisplay,start,stop); + Media song = new Media(diff.level.song.toURI().toString()); + mediaPlayer = new MediaPlayer(song); + new MediaView(mediaPlayer); + + VBox main = new VBox(); + main.getChildren().addAll(help,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); + } + if (e.getCode() == KeyCode.F) { + writer.println("f"+timer); + } + if (e.getCode() == KeyCode.SPACE) { + writer.println("s"+timer); + } + if (e.getCode() == KeyCode.J) { + writer.println("j"+timer); + } + if (e.getCode() == KeyCode.K) { + writer.println("k"+timer); + } + if (e.getCode() == KeyCode.ESCAPE) + { + stop(); + } + }); + + primaryStage.setOnCloseRequest(e -> stop()); } private void start() { - music = new AudioFilePlayer(new File(diff.thisDir, "song.wav").toPath().toString()); + mediaPlayer.play(); timer = new Timer(diff.bpm); + help.setText(t2); } private void stop() { - + mediaPlayer.stop(); + diff.numBeats = (int)timer.time(); + timer = null; + writer.close(); + help.setText(t1); } }
\ No newline at end of file |