aboutsummaryrefslogtreecommitdiff
path: root/src/devmenu
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/devmenu/DebugMenu.java7
-rw-r--r--src/devmenu/DiffEditor.java28
-rw-r--r--src/devmenu/LevelEditor.java79
-rw-r--r--src/devmenu/LevelList.java31
-rw-r--r--src/devmenu/NotesEditor.java67
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