diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2023-05-23 00:39:57 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2023-05-23 00:39:57 -0400 |
commit | 005c645b3cd991079dfd9bac2f207cdd2068d161 (patch) | |
tree | ed82f11d248a1a0e08ea0ed82380913250a0f278 /src/gui | |
parent | f941b529f1cb12312041516e6799ece0f6df2cac (diff) | |
download | NPEhero-005c645b3cd991079dfd9bac2f207cdd2068d161.tar.gz NPEhero-005c645b3cd991079dfd9bac2f207cdd2068d161.tar.bz2 NPEhero-005c645b3cd991079dfd9bac2f207cdd2068d161.zip |
finish gui, add new leaderboard system, redesign settings, switch lists to tables
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/DebugMenu.java | 15 | ||||
-rw-r--r-- | src/gui/Driver.java | 5 | ||||
-rw-r--r-- | src/gui/GameOver.java | 7 | ||||
-rw-r--r-- | src/gui/Leaderboard.java | 31 | ||||
-rw-r--r-- | src/gui/LevelDetails.java | 31 | ||||
-rw-r--r-- | src/gui/LevelSelector.java | 26 | ||||
-rw-r--r-- | src/gui/LevelSurround.java | 13 | ||||
-rw-r--r-- | src/gui/MainMenu.java | 7 | ||||
-rw-r--r-- | src/gui/Settings.java | 60 | ||||
-rw-r--r-- | src/gui/style.css | 69 |
10 files changed, 198 insertions, 66 deletions
diff --git a/src/gui/DebugMenu.java b/src/gui/DebugMenu.java index 79545e9..83857b8 100644 --- a/src/gui/DebugMenu.java +++ b/src/gui/DebugMenu.java @@ -4,6 +4,7 @@ import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.stage.Stage; +import main.Difficulty; import main.Level; public class DebugMenu @@ -33,12 +34,16 @@ public class DebugMenu Button testfinish = new Button(); testfinish.setText("launch game end"); //create a sample level for testing - Level temp = new Level(); - temp.title = "Title"; - temp.aritst = "artist"; - testfinish.setOnAction(e -> Driver.setMenu(new GameOver(temp, "Easy", new Settings(), 300))); + Level temp = new Level("Title", "artist"); + Difficulty temp2 = new Difficulty(); + temp2.title = "Easy"; + testfinish.setOnAction(e -> Driver.setMenu(new GameOver(temp, temp2, new Settings(), 300))); - primaryPane.getChildren().addAll(wallpaperTest,wallpaperTest2,wallpaperTest3,testfinish); + Button testVol = new Button(); + testVol.setText("print volumes"); + testVol.setOnAction(e -> System.out.println("sfx:"+Driver.settingsController.effectsVol+" msc:"+Driver.settingsController.musicVol)); + + primaryPane.getChildren().addAll(wallpaperTest,wallpaperTest2,wallpaperTest3,testfinish,testVol); Scene primaryScene = new Scene(primaryPane); primaryStage.setScene(primaryScene); diff --git a/src/gui/Driver.java b/src/gui/Driver.java index 2258a74..d6dc742 100644 --- a/src/gui/Driver.java +++ b/src/gui/Driver.java @@ -22,12 +22,16 @@ import javafx.scene.layout.BackgroundSize; import javafx.scene.layout.Pane; import javafx.stage.Stage; import main.LevelController; +import main.SettingsController; public class Driver extends Application { static Stage primaryStage; static Pane primaryPane = new Pane(); + + public static SettingsController settingsController = new SettingsController(); + public static LevelController levelController = new LevelController(); public static DebugMenu debug = new DebugMenu(); /* @@ -45,7 +49,6 @@ public class Driver extends Application @Override public void start(Stage newPrimaryStage) { - new LevelController(); primaryStage = newPrimaryStage; Scene primaryScene = new Scene(primaryPane, 800, 600); diff --git a/src/gui/GameOver.java b/src/gui/GameOver.java index 655ac3f..9630eb2 100644 --- a/src/gui/GameOver.java +++ b/src/gui/GameOver.java @@ -11,6 +11,7 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; +import main.Difficulty; import main.Level; public class GameOver extends Pane @@ -20,18 +21,18 @@ public class GameOver extends Pane * 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 GameOver(Level level, String diff, Pane lastMenu, int score2) + public GameOver(Level level, Difficulty diff, Pane lastMenu, int score2) { Text topText = new Text(); topText.setText("Level Complete"); topText.getStyleClass().add("t1"); Text levelName = new Text(); - levelName.setText(level.title); + levelName.setText(level.getTitle()); levelName.getStyleClass().add("t2"); Text levelArtist = new Text(); - levelArtist.setText(level.aritst+" - "+diff); + levelArtist.setText(level.getArtist()+" - "+diff); levelArtist.getStyleClass().add("t3"); VBox levelDetailsBox = new VBox(); diff --git a/src/gui/Leaderboard.java b/src/gui/Leaderboard.java index 36cbd90..5b7c4c8 100644 --- a/src/gui/Leaderboard.java +++ b/src/gui/Leaderboard.java @@ -6,9 +6,15 @@ import javafx.collections.ObservableList; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.ListView; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; +import main.Difficulty; +import main.LeaderboardEntry; +import main.Level; public class Leaderboard extends Pane { @@ -17,19 +23,32 @@ public class Leaderboard extends Pane * 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 Leaderboard() + public Leaderboard(Level level, Difficulty diff, Pane prev) { - ListView<String> scores = new ListView<String>(); - ObservableList<String> scoreList= FXCollections.observableArrayList ("Test Score 1", "Test Score 2", "Test Score 3", "Test Score 4"); - scores.getStyleClass().remove("list-view"); + //sets up table view: requires special getters, setters and constructors to work + TableView<LeaderboardEntry> scores = new TableView<LeaderboardEntry>(); + + TableColumn<LeaderboardEntry, String> nameCol = new TableColumn<LeaderboardEntry, String>("Name"); + TableColumn<LeaderboardEntry, String> scoreCol = new TableColumn<LeaderboardEntry, String>("Score"); + //scoreCol.minWidthProperty().bind(scores.widthProperty().subtract(nameCol.widthProperty())); + + scores.getColumns().add(nameCol); + scores.getColumns().add(scoreCol); + + nameCol.setCellValueFactory(new PropertyValueFactory<LeaderboardEntry, String>("name")); + scoreCol.setCellValueFactory(new PropertyValueFactory<LeaderboardEntry, String>("score")); + + scores.setItems(diff.leaderboard); + scores.getStyleClass().add("unselectable"); - scores.setItems(scoreList); + scores.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.25)); scores.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); + Button exit = new Button(); exit.setText("Back"); - exit.setOnAction(e -> Driver.setMenu(new MainMenu())); + exit.setOnAction(e -> Driver.setMenu(prev)); VBox centerBox = new VBox(); centerBox.setAlignment(Pos.CENTER); diff --git a/src/gui/LevelDetails.java b/src/gui/LevelDetails.java index 77b9f27..c9ab72b 100644 --- a/src/gui/LevelDetails.java +++ b/src/gui/LevelDetails.java @@ -14,8 +14,8 @@ import javafx.scene.layout.VBox; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; import javafx.scene.text.TextFlow; +import main.Difficulty; import main.Level; -import main.ScoreController; public class LevelDetails extends VBox { @@ -31,13 +31,17 @@ public class LevelDetails extends VBox VBox rightBox = new VBox(); rightBox.prefWidthProperty().bind(super.prefWidthProperty()); rightBox.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); - rightBox.setMinWidth(275); + rightBox.setMinWidth(350); rightBox.getStyleClass().add("box"); Button play = new Button(); play.setDisable(true); play.setText("Play"); + Button leaderboard = new Button(); + leaderboard.setDisable(true); + leaderboard.setText("Leaderboard"); + if (level == null) //if no level is selected from the list on the left { Text desc = new Text(); @@ -60,11 +64,11 @@ public class LevelDetails extends VBox detailsScroll.getStyleClass().remove("scroll-pane"); Text title = new Text(); - title.setText(level.title); + title.setText(level.getTitle()); title.getStyleClass().add("t1"); Text artist = new Text(); - artist.setText(level.aritst); + artist.setText(level.getArtist()); artist.getStyleClass().add("t2"); Text desc = new Text(); @@ -80,18 +84,23 @@ public class LevelDetails extends VBox FlowPane diffSelector = new FlowPane(); diffSelector.setAlignment(Pos.CENTER); ToggleGroup diffToggleGroup = new ToggleGroup(); //allows only one to be selected at a time - for (String diff : level.diffList) //adds a button for each diff + for (Difficulty diff : level.diffList) //adds a button for each diff { RadioButton temp = new RadioButton(); temp.getStyleClass().remove("radio-button"); //makes the buttons not look like a radio button and instead a normal button temp.getStyleClass().add("button"); - temp.setText(diff); + temp.setText(diff.title); temp.setUserData(diff); //allows the data and text to be seperate diffToggleGroup.getToggles().add(temp); diffSelector.getChildren().add(temp); } play.disableProperty().bind(diffToggleGroup.selectedToggleProperty().isNull()); //disables play button when no difficulty is selected - play.setOnAction(e -> Driver.setMenu(new LevelSurround(level, (String)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu()))); + play.setOnAction(e -> Driver.setMenu(new LevelSurround(level, (Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu()))); + + leaderboard.disableProperty().bind(diffToggleGroup.selectedToggleProperty().isNull()); + leaderboard.setOnAction(e -> Driver.setMenu(new Leaderboard(level, (Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu()))); + + HBox diffBox = new HBox(); diffSelector.prefWidthProperty().bind(diffBox.widthProperty()); diffBox.getChildren().add(diffSelector); @@ -107,7 +116,13 @@ public class LevelDetails extends VBox VBox rightSide = new VBox(); rightSide.setAlignment(Pos.CENTER_RIGHT); rightSide.setSpacing(10); - rightSide.getChildren().addAll(rightBox,play); + + HBox buttonBox = new HBox(); + buttonBox.getChildren().addAll(leaderboard,play); + buttonBox.setSpacing(5); + buttonBox.setAlignment(Pos.CENTER_RIGHT); + + rightSide.getChildren().addAll(rightBox,buttonBox); super.setAlignment(Pos.CENTER_RIGHT); super.getChildren().add(rightSide); diff --git a/src/gui/LevelSelector.java b/src/gui/LevelSelector.java index 5ac4cb5..4c91325 100644 --- a/src/gui/LevelSelector.java +++ b/src/gui/LevelSelector.java @@ -5,10 +5,15 @@ import javafx.beans.value.ObservableValue; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.ListView; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; +import main.Difficulty; import main.Level; +import main.LevelController; public class LevelSelector extends Pane { @@ -19,11 +24,24 @@ public class LevelSelector extends Pane */ public LevelSelector() { - ListView<Level> levels = new ListView<Level>(); - levels.setItems(main.LevelController.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"); + + levels.getColumns().add(titleCol); + levels.getColumns().add(artistCol); + + titleCol.setCellValueFactory(new PropertyValueFactory<Level, String>("title")); + artistCol.setCellValueFactory(new PropertyValueFactory<Level, String>("artist")); + + levels.setItems(Driver.levelController.levelList); + levels.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.25)); levels.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); - levels.setMinWidth(275); + levels.setMinWidth(300); + Button exit = new Button(); exit.setText("Back"); @@ -61,7 +79,7 @@ public class LevelSelector extends Pane * @param rightBox * @param levels */ - private void addDetails(Pane rightBox, ListView<Level> levels) + private void addDetails(Pane rightBox, TableView<Level> levels) { VBox details = new LevelDetails(levels.getSelectionModel().getSelectedItem()); if (! rightBox.getChildren().isEmpty()) diff --git a/src/gui/LevelSurround.java b/src/gui/LevelSurround.java index a728536..7cd4b71 100644 --- a/src/gui/LevelSurround.java +++ b/src/gui/LevelSurround.java @@ -9,6 +9,7 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; +import main.Difficulty; import main.Level; import main.ScoreController; @@ -19,7 +20,7 @@ public class LevelSurround extends Pane * 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 LevelSurround(Level level, String difficulty, Pane prev) + public LevelSurround(Level level, Difficulty difficulty, Pane prev) { ScoreController sc = new ScoreController(); @@ -36,11 +37,11 @@ public class LevelSurround extends Pane buttonBox.setSpacing(10); Text title = new Text(); - title.setText(level.title); + title.setText(level.getTitle()); title.getStyleClass().add("t2"); Text artist = new Text(); - artist.setText(level.aritst+" - "+difficulty); + artist.setText(level.getArtist()+" - "+difficulty); artist.getStyleClass().add("t3"); VBox titleTextBox = new VBox(); @@ -102,17 +103,17 @@ public class LevelSurround extends Pane //for debug menu Button addScore = new Button(); - addScore.setText(level.title + " addscore"); + addScore.setText(level.getTitle() + " addscore"); addScore.setOnAction(e -> sc.setScore(sc.getScore()+1)); Driver.debug.addButton(addScore); Button addCombo = new Button(); - addCombo.setText(level.title + " addcombo"); + addCombo.setText(level.getTitle() + " addcombo"); addCombo.setOnAction(e -> sc.setCombo(sc.getCombo()+1)); Driver.debug.addButton(addCombo); Button printD = new Button(); - printD.setText(level.title + " print debug"); + printD.setText(level.getTitle() + " print debug"); printD.setOnAction(e -> sc.print()); Driver.debug.addButton(printD); } diff --git a/src/gui/MainMenu.java b/src/gui/MainMenu.java index 03e1b95..fe26054 100644 --- a/src/gui/MainMenu.java +++ b/src/gui/MainMenu.java @@ -37,16 +37,12 @@ public class MainMenu extends Pane settings.setText("Settings"); settings.setOnAction(e -> Driver.setMenu(new Settings())); - Button leaderboard = new Button(); - leaderboard.setText("Leaderboard"); - leaderboard.setOnAction(e -> Driver.setMenu(new Leaderboard())); - Button exit = new Button(); exit.setText("Quit"); exit.setOnAction(e -> Driver.quit()); VBox buttonBox = new VBox(); - buttonBox.getChildren().addAll(play, settings, leaderboard, exit); + buttonBox.getChildren().addAll(play, settings, exit); buttonBox.setAlignment(Pos.CENTER); buttonBox.setSpacing(10); @@ -62,6 +58,5 @@ public class MainMenu extends Pane rootBox.getChildren().add(centerBox); super.getChildren().add(rootBox); - } } diff --git a/src/gui/Settings.java b/src/gui/Settings.java index 631048d..f16eb71 100644 --- a/src/gui/Settings.java +++ b/src/gui/Settings.java @@ -1,15 +1,18 @@ package gui; +import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Slider; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleButton; +import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Text; +import main.SettingsController; public class Settings extends Pane { @@ -20,28 +23,52 @@ public class Settings extends Pane */ public Settings() { - Text t1 = new Text(); - t1.setText("Music Volume"); - t1.getStyleClass().add("t3"); + Text musicText = new Text(); + musicText.setText("Music Volume"); + musicText.getStyleClass().add("t3"); - Slider musicVol = new Slider(); - musicVol.setMax(100); - musicVol.setMin(0); + Slider musicSlider = new Slider(); + musicSlider.setMax(100); + musicSlider.setMin(0); + musicSlider.valueProperty().bindBidirectional(Driver.settingsController.musicVol); - Text t2 = new Text(); - t2.setText("Sound Effects Volume"); - t2.getStyleClass().add("t3"); + VBox musicBox = new VBox(); + musicBox.getChildren().addAll(musicText, musicSlider); + musicBox.getStyleClass().add("box"); + musicBox.setPadding(new Insets(10)); - Slider sfxVol = new Slider(); - sfxVol.setMax(100); - sfxVol.setMin(0); + + Text SFXText = new Text(); + SFXText.setText("Sound Effects Volume"); + SFXText.getStyleClass().add("t3"); + + Slider SFXSlider = new Slider(); + SFXSlider.setMax(100); + SFXSlider.setMin(0); + SFXSlider.valueProperty().bindBidirectional(Driver.settingsController.effectsVol); + + VBox SFXBox = new VBox(); + SFXBox.getChildren().addAll(SFXText, SFXSlider); + SFXBox.getStyleClass().add("box"); + SFXBox.setPadding(new Insets(10)); + + + Text fullText = new Text(); + fullText.setText("Fullscreen mode"); + fullText.getStyleClass().add("t3"); Button fullscreen = new Button(); - fullscreen.setText("Toggle Fullscreen (F11)"); + fullscreen.setText("Toggle (F11)"); fullscreen.getStyleClass().remove("toggle-button"); fullscreen.getStyleClass().add("button"); fullscreen.setOnAction(e -> Driver.primaryStage.setFullScreen(!Driver.primaryStage.isFullScreen())); + VBox fullBox = new VBox(); + fullBox.getChildren().addAll(fullText,fullscreen); + fullBox.getStyleClass().add("box"); + fullBox.setPadding(new Insets(10)); + + Button devMenu = new Button(); devMenu.setText("Debug Menu"); devMenu.setOnAction(e -> Driver.debug.show()); @@ -50,10 +77,15 @@ public class Settings extends Pane exit.setText("Back"); exit.setOnAction(e -> Driver.setMenu(new MainMenu())); + BorderPane buttonBox = new BorderPane(); + buttonBox.setLeft(exit); + buttonBox.setRight(devMenu); + + VBox options = new VBox(); options.setSpacing(10); options.setAlignment(Pos.CENTER); - options.getChildren().addAll(t1,musicVol,t2,sfxVol,fullscreen,devMenu,exit); + options.getChildren().addAll(musicBox,SFXBox,fullBox,buttonBox); options.maxWidthProperty().bind(super.prefWidthProperty().multiply(0.25)); options.setMinWidth(400); options.prefHeightProperty().bind(super.prefHeightProperty()); diff --git a/src/gui/style.css b/src/gui/style.css index 5be0dfa..04d7031 100644 --- a/src/gui/style.css +++ b/src/gui/style.css @@ -39,56 +39,99 @@ -fx-text-fill: rgb(0, 0, 0); } -/* list */ -ListView { + + + + + +/* table */ + +TableView { -fx-background-color: rgba(0, 0, 0, 0.5); -fx-background-radius: 5; -fx-padding: 5; } -.list-cell { +.table-view .column-header-background .filler { + -fx-background-color: transparent; +} + +.table-view .table-cell{ + -fx-border-color: transparent; + /* -fx-padding: 2 0 2 10px; */ +} + +.table-view .column-header-background{ + -fx-background-color: transparent; + /* -fx-background-radius: 7px 7px 0px 0px; + -fx-background-insets: 0 11px 0 0; + -fx-padding: 0 0 5px 0; */ +} + +.table-cell { -fx-padding: .5em; +} + +.table-view .column-header { + -fx-text-background-color: rgb(168, 168, 168); + -fx-background-color: transparent; + /* -fx-background-radius: 5; + -fx-background-color: rgba(0, 0, 0, 0.5); */ +} + +.table-row-cell { + /* -fx-padding: .5em; */ -fx-background-color: transparent; -fx-background-radius: 3; - -fx-text-fill: rgb(255, 255, 255); + -fx-text-background-color: rgb(255, 255, 255); -fx-border-width: 3; -fx-border-radius: 5; -fx-border-color: transparent; } -.list-cell:hover { +.table-row-cell:hover { -fx-background-color: rgba(100, 100, 100, 0.5); } -ListView:focused .list-cell:focused { +TableView:focused { + -fx-effect: null; +} + +TableView:focused .list-cell:focused { -fx-background-color: rgb(50, 50, 50, 0.5); -fx-border-color: rgb(255, 255, 255); } -.list-cell:selected { +.table-row-cell:selected { -fx-background-color: rgb(255, 255, 255); - -fx-text-fill: rgb(0, 0, 0); + -fx-text-background-color: rgb(0, 0, 0); } -.list-cell:pressed { +.table-row-cell:pressed { -fx-background-color: rgb(231, 231, 231); -fx-border-color: transparent; } -.list-cell:empty { +.table-row-cell:empty { -fx-background-color: transparent; -fx-border-color: transparent; - -fx-text-fill: white; + -fx-text-background-color: white; } -.unselectable .list-cell{ +.unselectable .table-row-cell{ -fx-background-color: transparent; -fx-border-color: transparent; - -fx-text-fill: white; + -fx-text-background-color: white; } + + + + + + /* slider */ Slider { |