From 231c511304915d80aab89d28779d7445ad21ef70 Mon Sep 17 00:00:00 2001 From: sowgro Date: Mon, 22 Jul 2024 01:28:11 -0400 Subject: Refactor: pages now extend Page --- src/main/java/net/sowgro/npehero/Driver.java | 27 ++++++---- .../net/sowgro/npehero/devmenu/DiffEditor.java | 61 ++++++++++------------ .../java/net/sowgro/npehero/devmenu/DiffList.java | 33 ++++++------ .../net/sowgro/npehero/devmenu/ErrorDisplay.java | 56 +++++++++++--------- .../net/sowgro/npehero/devmenu/LevelEditor.java | 30 +++++------ .../java/net/sowgro/npehero/devmenu/LevelList.java | 26 +++++---- .../net/sowgro/npehero/devmenu/NotesEditor.java | 27 +++++----- .../net/sowgro/npehero/devmenu/NotesEditor2.java | 42 +++++++-------- .../net/sowgro/npehero/gameplay/SongPlayer.java | 9 ++-- .../java/net/sowgro/npehero/gui/ControlEditor.java | 52 ++++++------------ src/main/java/net/sowgro/npehero/gui/GameOver.java | 40 ++++++-------- .../net/sowgro/npehero/gui/LeaderboardView.java | 39 +++++++------- .../java/net/sowgro/npehero/gui/LevelDetails.java | 6 +-- .../java/net/sowgro/npehero/gui/LevelSelector.java | 36 +++++++------ .../java/net/sowgro/npehero/gui/LevelSurround.java | 25 +++++---- src/main/java/net/sowgro/npehero/gui/MainMenu.java | 15 +++--- .../net/sowgro/npehero/gui/SettingsEditor.java | 23 ++++---- 17 files changed, 269 insertions(+), 278 deletions(-) diff --git a/src/main/java/net/sowgro/npehero/Driver.java b/src/main/java/net/sowgro/npehero/Driver.java index fa36ee5..6544ebe 100755 --- a/src/main/java/net/sowgro/npehero/Driver.java +++ b/src/main/java/net/sowgro/npehero/Driver.java @@ -23,7 +23,7 @@ public class Driver extends Application public static final Image MENU_BACKGROUND = new Image(Driver.class.getResource("mountains.png").toExternalForm());; public static Stage primaryStage; - static ScrollPane primaryPane = new ScrollPane(); + public static ScrollPane primaryPane = new ScrollPane(); static ImageView backgroundImage = new ImageView(); static ImageView backgroundImage2 = new ImageView(); @@ -50,6 +50,8 @@ public class Driver extends Application primaryStage = newPrimaryStage; + primaryPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + StackPane root = new StackPane(backgroundImage2, backgroundImage, primaryPane); Scene primaryScene = new Scene(root, 800,600); @@ -85,7 +87,7 @@ public class Driver extends Application * Replaces/adds a new pane to the primaryPane * @param pane the new pane */ - public static void setMenu(Pane pane) + private static void setMenu(Pane pane) { primaryPane.setContent(pane); pane.prefWidthProperty().bind(primaryPane.widthProperty()); //makes pane fill the window @@ -96,8 +98,8 @@ public class Driver extends Application /** * @return the current pane in primaryPane */ - public static Pane getMenu(){ - return (Pane) primaryPane.getContent(); + public static Page getMenu(){ + return currentPage; } public static void setMenu(Page p) { @@ -120,23 +122,30 @@ public class Driver extends Application return; } backgroundImage2.setImage(image); + FadeTransition ft = new FadeTransition(Duration.seconds(0.2), backgroundImage); ft.setInterpolator(Interpolator.EASE_BOTH); ft.setFromValue(1.0); ft.setToValue(0.0); - ft.setOnFinished(_ -> { - backgroundImage.setImage(image); - }); + + ScaleTransition st2 = new ScaleTransition(Duration.seconds(0.2), backgroundImage); + st2.setInterpolator(Interpolator.LINEAR); + st2.setFromX(1); + st2.setFromY(1); + st2.setToX(1.05); + st2.setToY(1.05); ScaleTransition st = new ScaleTransition(Duration.seconds(0.2), backgroundImage2); - st.setInterpolator(Interpolator.EASE_BOTH); + st.setInterpolator(Interpolator.LINEAR); st.setFromX(1.05); st.setFromY(1.05); st.setToX(1.0); st.setToY(1.0); - ParallelTransition pt = new ParallelTransition(ft, st); + ParallelTransition pt = new ParallelTransition(ft, st, st2); + pt.setDelay(Duration.seconds(0.1)); pt.play(); + st.setOnFinished(_ -> backgroundImage.setImage(image)); } public static void setMenuBackground() diff --git a/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java b/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java index f5c29bd..11ee274 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/devmenu/DiffEditor.java @@ -14,20 +14,18 @@ import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.scene.text.Text; -import net.sowgro.npehero.main.Difficulty; -import net.sowgro.npehero.main.Note; -import net.sowgro.npehero.main.Sound; -import net.sowgro.npehero.main.ValidIndicator; +import net.sowgro.npehero.main.*; -public class DiffEditor extends Pane +public class DiffEditor extends Page { Difficulty diff; ScrollPane scroll; - public Pane prev; + HBox content = new HBox(); - public DiffEditor(Difficulty diff, Pane prev) - { + public Page prev; + + public DiffEditor(Difficulty diff, Page prev) { this.diff = diff; this.prev = prev; @@ -42,7 +40,7 @@ public class DiffEditor extends Pane TextField priority = new TextField(diff.priority+""); Button editNotes = new Button("Edit notes"); - editNotes.setOnAction(e -> { + editNotes.setOnAction(_ -> { if (diff.level.song == null) { Driver.setMenu(new ErrorDisplay("You must import a song file before editing the notes!", this)); } @@ -52,19 +50,17 @@ public class DiffEditor extends Pane }); Button oldEditNotes = new Button("Edit notes (legacy)"); - oldEditNotes.setOnAction(_ -> { - Driver.setMenu(new ErrorDisplay( - "Warning: \nThe legacy editor will overwrite all existing notes!", - this, - new NotesEditor(diff, this)) - ); - }); + oldEditNotes.setOnAction(_ -> Driver.setMenu(new ErrorDisplay( + "Warning: \nThe legacy editor will overwrite all existing notes!", + this, + new NotesEditor(diff, this)) + )); Button editScores = new Button("Clear leaderboard"); - editScores.setOnAction(e -> diff.leaderboard.entries.clear()); + editScores.setOnAction(_ -> diff.leaderboard.entries.clear()); Button playLevel = new Button("Play level"); - playLevel.setOnAction(e -> { + playLevel.setOnAction(_ -> { if (diff.isValid && diff.level.isValid) { Driver.setMenu(new LevelSurround(diff.level, diff, this)); } @@ -74,7 +70,7 @@ public class DiffEditor extends Pane }); Button save = new Button("Save"); - save.setOnAction(e -> { //assigns text fields to values + save.setOnAction(_ -> { //assigns text fields to values diff.title = title.getText(); // diff.bpm = Double.parseDouble(bpm.getText()); // diff.numBeats = Integer.parseInt(numBeats.getText()); @@ -82,8 +78,8 @@ public class DiffEditor extends Pane diff.write(); }); - HBox content = new HBox(); - ScrollPane scroll = new ScrollPane(content); + HBox scrollContent = new HBox(); + ScrollPane scroll = new ScrollPane(scrollContent); scroll.setFitToWidth(true); this.scroll = scroll; scroll.getStyleClass().remove("scroll-pane"); @@ -96,9 +92,9 @@ public class DiffEditor extends Pane lanes[i] = new Pane(); } - content.getChildren().addAll(lanes); - content.setSpacing(5); - content.setAlignment(Pos.CENTER); + scrollContent.getChildren().addAll(lanes); + scrollContent.setSpacing(5); + scrollContent.setAlignment(Pos.CENTER); diff.notes.list.forEach(n -> lanes[n.lane].getChildren().add(drawNote(n))); @@ -131,18 +127,17 @@ public class DiffEditor extends Pane }); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(main, exit); centerBox.setSpacing(10); - centerBox.getChildren().addAll(main,exit); - centerBox.setMinWidth(400); + centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } - super.getChildren().add(rootBox); + @Override + public Pane getContent() { + return content; } // Duplicates of NotesEditor2 methods, should be made generic and combined diff --git a/src/main/java/net/sowgro/npehero/devmenu/DiffList.java b/src/main/java/net/sowgro/npehero/devmenu/DiffList.java index e27e90d..63c09bb 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/DiffList.java +++ b/src/main/java/net/sowgro/npehero/devmenu/DiffList.java @@ -1,6 +1,5 @@ package net.sowgro.npehero.devmenu; -import javafx.beans.property.ReadOnlyBooleanWrapper; import javafx.beans.property.ReadOnlyStringWrapper; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -11,12 +10,14 @@ import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; import net.sowgro.npehero.main.Difficulty; import net.sowgro.npehero.main.Level; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; -public class DiffList extends Pane +public class DiffList extends Page { + private HBox content = new HBox(); - public DiffList(Level level, Pane prev) + public DiffList(Level level, Page prev) { //sets up table view: requires special getters, setters and constructors to work TableView diffs = new TableView<>(); @@ -50,9 +51,8 @@ public class DiffList extends Pane return row ; }); -// diffs.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.35)); diffs.setPrefWidth(400); - diffs.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.67)); + diffs.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.67)); Button edit = new Button("Edit"); edit.setOnAction(e -> Driver.setMenu(new DiffEditor(diffs.getSelectionModel().getSelectedItem(), this))); @@ -99,17 +99,6 @@ public class DiffList extends Pane Driver.setMenu(prev); }); - VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); - centerBox.setSpacing(10); - centerBox.getChildren().addAll(main,exit); - - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); - create.setOnAction(_ -> { if (create.isSelected()) { sidebar.getChildren().add(newLevelBox); @@ -127,7 +116,17 @@ public class DiffList extends Pane create.setSelected(false); }); - super.getChildren().add(rootBox); + VBox centerBox = new VBox(); + centerBox.getChildren().addAll(main, exit); + centerBox.setSpacing(10); + centerBox.setAlignment(Pos.CENTER); + + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); } + @Override + public Pane getContent() { + return content; + } } \ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/devmenu/ErrorDisplay.java b/src/main/java/net/sowgro/npehero/devmenu/ErrorDisplay.java index e5cd857..dc4b40c 100644 --- a/src/main/java/net/sowgro/npehero/devmenu/ErrorDisplay.java +++ b/src/main/java/net/sowgro/npehero/devmenu/ErrorDisplay.java @@ -8,10 +8,19 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; -public class ErrorDisplay extends Pane { - public ErrorDisplay(String message, Pane prev) { +public class ErrorDisplay extends Page { + + private HBox content = new HBox(); + + /** + * Error display with a message and Back button + * @param message The message to display + * @param prev The destination of the close button + */ + public ErrorDisplay(String message, Page prev) { Label main = new Label(message); main.getStyleClass().add("box"); @@ -23,35 +32,35 @@ public class ErrorDisplay extends Pane { }); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(main, exit); centerBox.setSpacing(10); - centerBox.getChildren().addAll(main,exit); - centerBox.setMinWidth(400); - - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + centerBox.setAlignment(Pos.CENTER); - super.getChildren().add(rootBox); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); } - public ErrorDisplay(String message, Pane prev, Pane next) { + /** + * Error display with a message and Cancel and Proceed buttons + * @param message The message to display + * @param prev The destination of the Cancel button + * @param next The destination of the Proceed button + */ + public ErrorDisplay(String message, Page prev, Page next) { Label main = new Label(message); main.getStyleClass().add("box"); main.setPadding(new Insets(10)); Button exit = new Button(); exit.setText("Cancel"); - exit.setOnAction(e -> { + exit.setOnAction(_ -> { Sound.playSfx(Sound.BACKWARD); Driver.setMenu(prev); }); Button nextButton = new Button(); nextButton.setText("Proceed"); - nextButton.setOnAction(e -> { + nextButton.setOnAction(_ -> { Sound.playSfx(Sound.FORWARD); Driver.setMenu(next); }); @@ -61,17 +70,16 @@ public class ErrorDisplay extends Pane { bottom.setSpacing(10); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(main, bottom); centerBox.setSpacing(10); - centerBox.getChildren().addAll(main,bottom); - centerBox.setMinWidth(400); + centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } - super.getChildren().add(rootBox); + @Override + public Pane getContent() { + return content; } } diff --git a/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java b/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java index 7efcd05..003f929 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java +++ b/src/main/java/net/sowgro/npehero/devmenu/LevelEditor.java @@ -10,18 +10,17 @@ import javafx.scene.text.Text; import javafx.stage.FileChooser; import javafx.stage.FileChooser.ExtensionFilter; 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; +import net.sowgro.npehero.main.*; + +public class LevelEditor extends Page +{ + private HBox content = new HBox(); -public class LevelEditor extends Pane -{ private File selectedSong = null; private File selectedPreview = null; private File selectedBackground = null; - public LevelEditor(Level level, Pane prev) + public LevelEditor(Level level, Page prev) { Text folderNameLabel = new Text("Folder name"); TextField folderName = new TextField(); @@ -175,17 +174,16 @@ public class LevelEditor extends Pane bottom.setSpacing(10); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(mainBox, bottom); centerBox.setSpacing(10); - centerBox.getChildren().addAll(mainBox,bottom); - centerBox.setMinWidth(400); + centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } - super.getChildren().add(rootBox); + @Override + public Pane getContent() { + return content; } } \ 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 index 6bdb893..7d899bd 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/LevelList.java +++ b/src/main/java/net/sowgro/npehero/devmenu/LevelList.java @@ -1,6 +1,5 @@ package net.sowgro.npehero.devmenu; -import javafx.beans.property.ReadOnlyBooleanWrapper; import javafx.beans.property.ReadOnlyStringWrapper; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -12,12 +11,12 @@ import javafx.scene.layout.VBox; import net.sowgro.npehero.gui.MainMenu; import net.sowgro.npehero.main.Level; import net.sowgro.npehero.main.Levels; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; -import java.time.Year; - -public class LevelList extends Pane +public class LevelList extends Page { + private HBox content = new HBox(); public LevelList() { @@ -56,7 +55,7 @@ public class LevelList extends Pane return row ; }); levels.setPrefWidth(600); - levels.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); + levels.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); Button edit = new Button("Edit"); edit.setOnAction(e -> Driver.setMenu(new LevelEditor(levels.getSelectionModel().getSelectedItem(), this))); @@ -104,16 +103,12 @@ public class LevelList extends Pane }); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(main, exit); centerBox.setSpacing(10); - centerBox.getChildren().addAll(main,exit); - centerBox.setMinWidth(400); + centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); create.setOnAction(_ -> { if (create.isSelected()) { @@ -131,7 +126,10 @@ public class LevelList extends Pane sidebar.getChildren().clear(); create.setSelected(false); }); + } - super.getChildren().add(rootBox); + @Override + public Pane getContent() { + return content; } } \ 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 index e024ca4..3754847 100755 --- a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java +++ b/src/main/java/net/sowgro/npehero/devmenu/NotesEditor.java @@ -17,9 +17,10 @@ import javafx.scene.layout.VBox; import javafx.scene.text.Text; import net.sowgro.npehero.main.Control; import net.sowgro.npehero.main.Difficulty; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; -public class NotesEditor extends Pane +public class NotesEditor extends Page { Text help; String t1 = "Press Start to begin recording. Use the same keys. Note: existing notes will be overwritten."; @@ -27,7 +28,10 @@ public class NotesEditor extends Pane Difficulty diff; Timer timer; PrintWriter writer; - public NotesEditor(Difficulty diff, Pane prev) + + private HBox content = new HBox(); + + public NotesEditor(Difficulty diff, Page prev) { this.diff = diff; @@ -53,18 +57,12 @@ public class NotesEditor extends Pane }); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(main, exit); centerBox.setSpacing(10); - centerBox.getChildren().addAll(main,exit); - centerBox.setMinWidth(400); - - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + centerBox.setAlignment(Pos.CENTER); - super.getChildren().add(rootBox); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); try { writer = new PrintWriter(diff.notes.getFile(), "UTF-8"); @@ -104,6 +102,11 @@ public class NotesEditor extends Pane Driver.primaryStage.setOnCloseRequest(e -> stop()); } + @Override + public Pane getContent() { + return content; + } + private void start() { Sound.playSong(new Media(diff.level.song.toString())); diff --git a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor2.java b/src/main/java/net/sowgro/npehero/devmenu/NotesEditor2.java index 46d0235..22c3f5e 100644 --- a/src/main/java/net/sowgro/npehero/devmenu/NotesEditor2.java +++ b/src/main/java/net/sowgro/npehero/devmenu/NotesEditor2.java @@ -38,15 +38,14 @@ public class NotesEditor2 extends Page { ListProperty noteList; DiffEditor prev; + private HBox content = new HBox(); + public NotesEditor2(Difficulty diff, DiffEditor prev) { this.diff = diff; noteList = diff.notes.deepCopyList(); m = new MediaPlayer(new Media(diff.level.song.toURI().toString())); this.prev = prev; - } - @Override - public Pane getContent() { // Buttons VBox actionBox = new VBox(); actionBox.setSpacing(10); @@ -103,11 +102,11 @@ public class NotesEditor2 extends Page { playhead.setFill(Color.WHITE); playheadLane.getChildren().add(playhead); - HBox content = new HBox(); - content.setAlignment(Pos.CENTER); - content.setSpacing(10); - content.getChildren().addAll(playheadLane, rulerLane); - content.getChildren().addAll(lanes); + HBox scrollContent = new HBox(); + scrollContent.setAlignment(Pos.CENTER); + scrollContent.setSpacing(10); + scrollContent.getChildren().addAll(playheadLane, rulerLane); + scrollContent.getChildren().addAll(lanes); Line playheadLine = new Line(); playheadLine.setStartX(0); @@ -121,7 +120,7 @@ public class NotesEditor2 extends Page { contentOverlay.setPickOnBounds(false); StackPane stackPane = new StackPane(); - stackPane.getChildren().addAll(content, contentOverlay); + stackPane.getChildren().addAll(scrollContent, contentOverlay); scroll.setContent(stackPane); // scroll.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.35)); @@ -169,8 +168,8 @@ public class NotesEditor2 extends Page { // Draw and update ruler AtomicInteger lastRuler = new AtomicInteger(-1); - content.heightProperty().addListener(_ -> { - int ruler1 = (int) screenPosToSecond(content.getHeight()); + scrollContent.heightProperty().addListener(_ -> { + int ruler1 = (int) screenPosToSecond(scrollContent.getHeight()); for (int i = lastRuler.get() + 1; i <= ruler1; i++) { Label l = new Label(toMinAndSec(i)+" -"); l.layoutYProperty().bind(secondToScreenPos(i)); @@ -181,19 +180,15 @@ public class NotesEditor2 extends Page { }); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(main, exit); centerBox.setSpacing(10); - centerBox.getChildren().addAll(main, buttons); - centerBox.setMinWidth(400); + centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); -// rootBox.prefWidthProperty().bind(super.prefWidthProperty()); -// rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); // write notes on key press - rootBox.addEventFilter(KeyEvent.KEY_PRESSED, e -> { + content.addEventFilter(KeyEvent.KEY_PRESSED, e -> { KeyCode k = e.getCode(); if (k == Control.LANE0.getKey()) { WriteNote(0); } if (k == Control.LANE1.getKey()) { WriteNote(1); } @@ -228,7 +223,7 @@ public class NotesEditor2 extends Page { scrollLock.setOnAction(_ -> { if (scrollLock.isSelected()) { // vvalue takes in a value between 0 and 1 NOT a pixel value - scroll.vvalueProperty().bind(playhead.layoutYProperty().subtract(scroll.heightProperty().divide(2)).divide(content.heightProperty().subtract(scroll.heightProperty()))); + scroll.vvalueProperty().bind(playhead.layoutYProperty().subtract(scroll.heightProperty().divide(2)).divide(scrollContent.heightProperty().subtract(scroll.heightProperty()))); } else { scroll.vvalueProperty().unbind(); @@ -289,8 +284,11 @@ public class NotesEditor2 extends Page { helpBox.getChildren().clear(); } }); + } - return rootBox; + @Override + public Pane getContent() { + return content; } @Override diff --git a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java index b025c06..b61d11c 100755 --- a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java +++ b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java @@ -14,7 +14,7 @@ import javafx.event.EventHandler; import javafx.scene.input.KeyEvent; import javafx.scene.media.Media; import net.sowgro.npehero.Driver; -import net.sowgro.npehero.main.Control; +import net.sowgro.npehero.main.*; import net.sowgro.npehero.gui.GameOver; import javafx.geometry.Pos; import javafx.scene.CacheHint; @@ -25,9 +25,6 @@ import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.animation.*; import javafx.util.*; -import net.sowgro.npehero.main.Difficulty; -import net.sowgro.npehero.main.Level; -import net.sowgro.npehero.main.Sound; //hi aidan here are some objects you can use @@ -55,7 +52,7 @@ public class SongPlayer extends Pane { private Level level; private Difficulty difficulty; - private Pane pane; + private Page pane; Timer timer; //the timer that determines when notes will fall, counted in terms of the song's bpm final int TIME = 1000; //delay for notes falling down the screen @@ -101,7 +98,7 @@ public class SongPlayer extends Pane { }); } - public SongPlayer(Level lvl, Difficulty d, Pane p, ScoreController cntrl) { + public SongPlayer(Level lvl, Difficulty d, Page p, ScoreController cntrl) { Sound.stopSong(); song = lvl.song; diff --git a/src/main/java/net/sowgro/npehero/gui/ControlEditor.java b/src/main/java/net/sowgro/npehero/gui/ControlEditor.java index b620b17..1d1a73d 100644 --- a/src/main/java/net/sowgro/npehero/gui/ControlEditor.java +++ b/src/main/java/net/sowgro/npehero/gui/ControlEditor.java @@ -9,12 +9,16 @@ import javafx.scene.input.KeyEvent; import javafx.scene.layout.*; import net.sowgro.npehero.Driver; import net.sowgro.npehero.main.Control; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; import java.util.List; import java.util.Map; -public class ControlEditor extends Pane { +public class ControlEditor extends Page { + + private final HBox content = new HBox(); + public ControlEditor() { GridPane controls = new GridPane(); @@ -26,29 +30,8 @@ public class ControlEditor extends Pane { controls.setVgap(20); controls.setHgap(40); - -// Pane dummy1 = new Pane(); -// Pane dummy2 = new Pane(); -// Pane dummy3 = new Pane(); -// controls.add(dummy1, 0, 0); -// controls.add(dummy2, 1, 0); -// controls.add(dummy3, 2, 0); -// -// Runnable r = () -> { -// var vpw = scrollPane.getViewportBounds().getWidth(); -// var itemswidth = dummy1.getWidth() + dummy2.getWidth() + dummy3.getWidth(); -// var out = ((vpw - itemswidth) / 2) -10; -// if (out < 10) { -// controls.setHgap(10); -// } -// else { -// controls.setHgap(out); -// } -// }; -// scrollPane.viewportBoundsProperty().addListener((_, _, _) -> r.run()); - scrollPane.setPrefWidth(700); - scrollPane.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); + scrollPane.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); Button exit = new Button(); exit.setText("Back"); @@ -58,16 +41,12 @@ public class ControlEditor extends Pane { }); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(scrollPane, exit); centerBox.setSpacing(10); - centerBox.getChildren().addAll(scrollPane,exit); - centerBox.setMinWidth(400); + centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); ToggleGroup tg = new ToggleGroup(); int i = 0; @@ -98,15 +77,15 @@ public class ControlEditor extends Pane { @Override public void handle(KeyEvent k) { control.keyProperty.set(k.getCode()); - rootBox.removeEventFilter(KeyEvent.KEY_PRESSED, this); + content.removeEventFilter(KeyEvent.KEY_PRESSED, this); controlButton.setSelected(false); k.consume(); } }; if (controlButton.isSelected()) { - rootBox.addEventFilter(KeyEvent.KEY_PRESSED, keyListener); + content.addEventFilter(KeyEvent.KEY_PRESSED, keyListener); } else { - rootBox.removeEventFilter(KeyEvent.KEY_PRESSED, keyListener); + content.removeEventFilter(KeyEvent.KEY_PRESSED, keyListener); } }); tg.getToggles().add(controlButton); @@ -122,8 +101,11 @@ public class ControlEditor extends Pane { } } + } - super.getChildren().add(rootBox); + @Override + public Pane getContent() { + return content; } public String keyToString(KeyCode key) { diff --git a/src/main/java/net/sowgro/npehero/gui/GameOver.java b/src/main/java/net/sowgro/npehero/gui/GameOver.java index cd277e6..dd23f5f 100755 --- a/src/main/java/net/sowgro/npehero/gui/GameOver.java +++ b/src/main/java/net/sowgro/npehero/gui/GameOver.java @@ -1,7 +1,5 @@ package net.sowgro.npehero.gui; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; @@ -14,12 +12,14 @@ import javafx.scene.text.Text; import net.sowgro.npehero.Driver; import net.sowgro.npehero.main.Difficulty; import net.sowgro.npehero.main.Level; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; -public class GameOver extends Pane +public class GameOver extends Page { + HBox content = new HBox(); - public GameOver(Level level, Difficulty diff, Pane lastMenu, int score2) + public GameOver(Level level, Difficulty diff, Page prev, int score2) { Text topText = new Text(); topText.setText("Level Complete"); @@ -59,20 +59,15 @@ public class GameOver extends Pane nameLabel.getStyleClass().add("t3"); TextField name = new TextField(); -// name.getStyleClass().remove("text-filed"); -// name.getStyleClass().add("button"); name.setText("name"); Button save = new Button(); save.setText("Add"); - save.setOnAction(new EventHandler() { //this is the same as the "e ->" thing but it allows more than one line to be added - @Override - public void handle(ActionEvent event) { - Sound.playSfx(Sound.FORWARD); - save.setDisable(true); - name.setDisable(true); - diff.leaderboard.add(name.getText(), score2); - } + save.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + save.setDisable(true); + name.setDisable(true); + diff.leaderboard.add(name.getText(), score2); }); BorderPane b = new BorderPane(); @@ -90,32 +85,31 @@ public class GameOver extends Pane exit.setText("Back"); exit.setOnAction(e -> { Sound.playSfx(Sound.BACKWARD); - Driver.setMenu(lastMenu); + Driver.setMenu(prev); }); Button replay = new Button(); replay.setText("Replay"); replay.setOnAction(e -> { Sound.playSfx(Sound.FORWARD); - Driver.setMenu(new LevelSurround(level, diff, lastMenu)); + Driver.setMenu(new LevelSurround(level, diff, prev)); }); BorderPane buttonBox = new BorderPane(); buttonBox.setLeft(exit); buttonBox.setRight(replay); - VBox centerBox = new VBox(); centerBox.getChildren().addAll(topText,levelDetailsBox,scoreBox,nameBox,buttonBox); centerBox.setSpacing(10); centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } - super.getChildren().add(rootBox); + @Override + public Pane getContent() { + return content; } } diff --git a/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java b/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java index c769264..46ce22f 100755 --- a/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java +++ b/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java @@ -10,22 +10,20 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; -import net.sowgro.npehero.main.Difficulty; -import net.sowgro.npehero.main.LeaderboardEntry; -import net.sowgro.npehero.main.Level; -import net.sowgro.npehero.main.Sound; +import net.sowgro.npehero.main.*; -public class LeaderboardView extends Pane +public class LeaderboardView extends Page { + private HBox content = new HBox(); - public LeaderboardView(Level level, Difficulty diff, Pane prev) + public LeaderboardView(Difficulty diff, Page prev) { //sets up table view: requires java bean getters, setters and constructors to work - TableView scores = new TableView(); + TableView scores = new TableView<>(); - TableColumn nameCol = new TableColumn("Name"); - TableColumn scoreCol = new TableColumn("Score"); - TableColumn dateCol = new TableColumn("Date"); + TableColumn nameCol = new TableColumn<>("Name"); + TableColumn scoreCol = new TableColumn<>("Score"); + TableColumn dateCol = new TableColumn<>("Date"); scores.getColumns().add(nameCol); scores.getColumns().add(scoreCol); @@ -39,8 +37,8 @@ public class LeaderboardView extends Pane scores.getStyleClass().add("unselectable"); - scores.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.25)); - scores.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); + scores.prefWidthProperty().bind(content.prefWidthProperty().multiply(0.25)); + scores.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); scoreCol.setSortType(SortType.DESCENDING); scores.getSortOrder().add(scoreCol); @@ -53,17 +51,16 @@ public class LeaderboardView extends Pane }); VBox centerBox = new VBox(); - centerBox.setAlignment(Pos.CENTER); + centerBox.getChildren().addAll(scores, exit); centerBox.setSpacing(10); - centerBox.getChildren().addAll(scores,exit); - centerBox.setMinWidth(400); + centerBox.setAlignment(Pos.CENTER); - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(centerBox); - rootBox.setAlignment(Pos.CENTER); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } - super.getChildren().add(rootBox); + @Override + public Pane getContent() { + return content; } } diff --git a/src/main/java/net/sowgro/npehero/gui/LevelDetails.java b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java index df5529e..afbdce4 100755 --- a/src/main/java/net/sowgro/npehero/gui/LevelDetails.java +++ b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java @@ -28,7 +28,7 @@ public class LevelDetails extends VBox * * @param level: the selected level on the right side */ - public LevelDetails(Level level) + public LevelDetails(Level level, LevelSelector ls) { VBox rightBox = new VBox(); rightBox.prefWidthProperty().bind(super.prefWidthProperty()); @@ -99,13 +99,13 @@ public class LevelDetails extends VBox play.disableProperty().bind(diffToggleGroup.selectedToggleProperty().isNull()); //disables play button when no difficulty is selected play.setOnAction(e -> { Sound.playSfx(Sound.FORWARD); - Driver.setMenu(new LevelSurround(level, (Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu())); + Driver.setMenu(new LevelSurround(level, (Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), ls)); }); leaderboard.disableProperty().bind(diffToggleGroup.selectedToggleProperty().isNull()); leaderboard.setOnAction(e -> { Sound.playSfx(Sound.FORWARD); - Driver.setMenu(new LeaderboardView(level, (Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu())); + Driver.setMenu(new LeaderboardView((Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu())); }); diff --git a/src/main/java/net/sowgro/npehero/gui/LevelSelector.java b/src/main/java/net/sowgro/npehero/gui/LevelSelector.java index eb08a99..1c840b4 100755 --- a/src/main/java/net/sowgro/npehero/gui/LevelSelector.java +++ b/src/main/java/net/sowgro/npehero/gui/LevelSelector.java @@ -11,10 +11,12 @@ import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; import net.sowgro.npehero.main.Level; import net.sowgro.npehero.main.Levels; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; -public class LevelSelector extends Pane -{ +public class LevelSelector extends Page +{ + private final HBox content = new HBox(); public LevelSelector() { @@ -32,8 +34,8 @@ public class LevelSelector extends Pane levels.setItems(Levels.validList); - levels.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.25)); - levels.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); + levels.prefWidthProperty().bind(content.prefWidthProperty().multiply(0.25)); + levels.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); levels.setMinWidth(300); @@ -52,18 +54,18 @@ public class LevelSelector extends Pane Pane rightBox = new Pane(); addDetails(rightBox, levels); - - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().addAll(leftBox, rightBox); - rootBox.setAlignment(Pos.CENTER); - rootBox.setSpacing(10); + content.getChildren().addAll(leftBox, rightBox); + content.setSpacing(10); + content.setAlignment(Pos.CENTER); levels.getStyleClass().remove("list-view"); //listens for change in selected item of the list levels.getSelectionModel().selectedItemProperty().addListener(_ -> addDetails(rightBox, levels)); - super.getChildren().add(rootBox); + } + + @Override + public Pane getContent() { + return content; } /** @@ -73,16 +75,16 @@ public class LevelSelector extends Pane */ private void addDetails(Pane rightBox, TableView levels) { - VBox details = new LevelDetails(levels.getSelectionModel().getSelectedItem()); + VBox details = new LevelDetails(levels.getSelectionModel().getSelectedItem(), this); if (! rightBox.getChildren().isEmpty()) { rightBox.getChildren().remove(0); } rightBox.getChildren().add(details); - details.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.37)); - details.prefHeightProperty().bind(super.prefHeightProperty()); - details.maxWidthProperty().bind(super.prefWidthProperty().multiply(0.37)); - details.maxHeightProperty().bind(super.prefHeightProperty()); + details.prefWidthProperty().bind(content.prefWidthProperty().multiply(0.37)); + details.prefHeightProperty().bind(content.prefHeightProperty()); + details.maxWidthProperty().bind(content.prefWidthProperty().multiply(0.37)); + details.maxHeightProperty().bind(content.prefHeightProperty()); } } diff --git a/src/main/java/net/sowgro/npehero/gui/LevelSurround.java b/src/main/java/net/sowgro/npehero/gui/LevelSurround.java index 2a0a51a..05614ff 100755 --- a/src/main/java/net/sowgro/npehero/gui/LevelSurround.java +++ b/src/main/java/net/sowgro/npehero/gui/LevelSurround.java @@ -14,12 +14,14 @@ import javafx.scene.text.Text; import net.sowgro.npehero.main.Difficulty; import net.sowgro.npehero.main.Level; import net.sowgro.npehero.gameplay.ScoreController; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; -public class LevelSurround extends Pane -{ +public class LevelSurround extends Page +{ + private final HBox content = new HBox(); - public LevelSurround(Level level, Difficulty difficulty, Pane prev) + public LevelSurround(Level level, Difficulty difficulty, Page prev) { ScoreController sc = new ScoreController(); SongPlayer game = new SongPlayer(level, difficulty, prev, sc); @@ -102,13 +104,13 @@ public class LevelSurround extends Pane comboBox.setBottomAnchor(comboTextBox, 0.0); comboBox.setPadding(new Insets(10)); - game.minWidthProperty().bind(super.prefHeightProperty().multiply(0.66)); - game.minHeightProperty().bind(super.prefHeightProperty()); + game.minWidthProperty().bind(content.heightProperty().multiply(0.66)); + game.minHeightProperty().bind(content.heightProperty()); game.getStyleClass().add("box"); - comboBox.minWidthProperty().bind(super.prefWidthProperty().subtract(game.minWidthProperty()).divide(2)); - scoreBox.minWidthProperty().bind(super.prefWidthProperty().subtract(game.minWidthProperty()).divide(2)); + comboBox.minWidthProperty().bind(Driver.primaryPane.widthProperty().subtract(game.minWidthProperty()).divide(2)); + scoreBox.minWidthProperty().bind(Driver.primaryPane.widthProperty().subtract(game.minWidthProperty()).divide(2)); HBox centerBox = new HBox(); centerBox.getChildren().addAll(comboBox, game, scoreBox); @@ -117,10 +119,13 @@ public class LevelSurround extends Pane StackPane root = new StackPane(); root.getChildren().addAll(centerBox, topBar); - super.getChildren().add(root); - root.prefWidthProperty().bind(super.prefWidthProperty()); - root.prefHeightProperty().bind(super.prefHeightProperty()); + content.getChildren().add(root); game.start(); } + + @Override + public Pane getContent() { + return content; + } } \ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/gui/MainMenu.java b/src/main/java/net/sowgro/npehero/gui/MainMenu.java index 6511f22..f13deac 100755 --- a/src/main/java/net/sowgro/npehero/gui/MainMenu.java +++ b/src/main/java/net/sowgro/npehero/gui/MainMenu.java @@ -4,6 +4,7 @@ import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.effect.BlurType; import javafx.scene.effect.DropShadow; +import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; @@ -16,9 +17,9 @@ import net.sowgro.npehero.main.Sound; public class MainMenu extends Page { - @Override - public Pane getContent() { + private final HBox content = new HBox(); + public MainMenu() { DropShadow dropShadow = new DropShadow(); dropShadow.setRadius(50.0); dropShadow.setColor(Color.WHITE); @@ -68,10 +69,12 @@ public class MainMenu extends Page { centerBox.getChildren().addAll(title, buttonBox); centerBox.setSpacing(10); - VBox rootBox = new VBox(); - rootBox.setAlignment(Pos.CENTER); - rootBox.getChildren().add(centerBox); + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } - return rootBox; + @Override + public Pane getContent() { + return content; } } diff --git a/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java b/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java index b00420a..d9bad03 100755 --- a/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java +++ b/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java @@ -11,11 +11,13 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import net.sowgro.npehero.Driver; +import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Settings; import net.sowgro.npehero.main.Sound; -public class SettingsEditor extends Pane +public class SettingsEditor extends Page { + private final HBox content = new HBox(); public SettingsEditor() { @@ -99,16 +101,17 @@ public class SettingsEditor extends Pane options.setSpacing(10); options.setAlignment(Pos.CENTER); options.getChildren().addAll(musicBox,SFXBox,fullBox,controlsBox,buttonBox); - options.maxWidthProperty().bind(super.prefWidthProperty().multiply(0.25)); + options.maxWidthProperty().bind(content.prefWidthProperty().multiply(0.25)); options.setMinWidth(400); - options.prefHeightProperty().bind(super.prefHeightProperty()); - - HBox rootBox = new HBox(); - rootBox.prefWidthProperty().bind(super.prefWidthProperty()); - rootBox.prefHeightProperty().bind(super.prefHeightProperty()); - rootBox.getChildren().add(options); - rootBox.setAlignment(Pos.CENTER); - super.getChildren().add(rootBox); + options.prefHeightProperty().bind(content.prefHeightProperty()); + + content.getChildren().add(options); + content.setAlignment(Pos.CENTER); + } + + @Override + public Pane getContent() { + return content; } } -- cgit v1.2.3