aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2023-05-23 00:39:57 -0400
committersowgro <tpoke.ferrari@gmail.com>2023-05-23 00:39:57 -0400
commit005c645b3cd991079dfd9bac2f207cdd2068d161 (patch)
treeed82f11d248a1a0e08ea0ed82380913250a0f278 /src/gui
parentf941b529f1cb12312041516e6799ece0f6df2cac (diff)
downloadNPEhero-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.java15
-rw-r--r--src/gui/Driver.java5
-rw-r--r--src/gui/GameOver.java7
-rw-r--r--src/gui/Leaderboard.java31
-rw-r--r--src/gui/LevelDetails.java31
-rw-r--r--src/gui/LevelSelector.java26
-rw-r--r--src/gui/LevelSurround.java13
-rw-r--r--src/gui/MainMenu.java7
-rw-r--r--src/gui/Settings.java60
-rw-r--r--src/gui/style.css69
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 {