aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--.vscode/launch.json8
-rw-r--r--src/assets/levels/test level/easy/leaderboard.txt (renamed from src/assets/levels/test level/notes_easy.txt)0
-rw-r--r--src/assets/levels/test level/easy/notes.txt (renamed from src/assets/levels/test level/notes_hard.txt)0
-rw-r--r--src/assets/levels/test level/hard/leaderboard.txt (renamed from src/assets/levels/test level/notes_medium.txt)0
-rw-r--r--src/assets/levels/test level/hard/notes.txt0
-rw-r--r--src/assets/levels/test level/medium/leaderboard.txt0
-rw-r--r--src/assets/levels/test level/medium/notes.txt0
-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
-rw-r--r--src/main/Difficulty.java19
-rw-r--r--src/main/LeaderboardController.java5
-rw-r--r--src/main/LeaderboardEntry.java33
-rw-r--r--src/main/Level.java37
-rw-r--r--src/main/LevelController.java42
-rw-r--r--src/main/SettingsController.java10
-rw-r--r--src/test/Table.java112
24 files changed, 431 insertions, 99 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 5cb41aa..b76670f 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -6,6 +6,14 @@
"configurations": [
{
"type": "java",
+ "name": "Table",
+ "request": "launch",
+ "mainClass": "test.Table",
+ "projectName": "GuitarHero",
+ "vmArgs": "--module-path lib/linux --add-modules javafx.base,javafx.media,javafx.graphics,javafx.controls,javafx.fxml"
+ },
+ {
+ "type": "java",
"name": "GUIDriver",
"request": "launch",
"mainClass": "gui.GUIDriver",
diff --git a/src/assets/levels/test level/notes_easy.txt b/src/assets/levels/test level/easy/leaderboard.txt
index e69de29..e69de29 100644
--- a/src/assets/levels/test level/notes_easy.txt
+++ b/src/assets/levels/test level/easy/leaderboard.txt
diff --git a/src/assets/levels/test level/notes_hard.txt b/src/assets/levels/test level/easy/notes.txt
index e69de29..e69de29 100644
--- a/src/assets/levels/test level/notes_hard.txt
+++ b/src/assets/levels/test level/easy/notes.txt
diff --git a/src/assets/levels/test level/notes_medium.txt b/src/assets/levels/test level/hard/leaderboard.txt
index e69de29..e69de29 100644
--- a/src/assets/levels/test level/notes_medium.txt
+++ b/src/assets/levels/test level/hard/leaderboard.txt
diff --git a/src/assets/levels/test level/hard/notes.txt b/src/assets/levels/test level/hard/notes.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/assets/levels/test level/hard/notes.txt
diff --git a/src/assets/levels/test level/medium/leaderboard.txt b/src/assets/levels/test level/medium/leaderboard.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/assets/levels/test level/medium/leaderboard.txt
diff --git a/src/assets/levels/test level/medium/notes.txt b/src/assets/levels/test level/medium/notes.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/assets/levels/test level/medium/notes.txt
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 {
diff --git a/src/main/Difficulty.java b/src/main/Difficulty.java
new file mode 100644
index 0000000..2d2b5c3
--- /dev/null
+++ b/src/main/Difficulty.java
@@ -0,0 +1,19 @@
+package main;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+public class Difficulty
+{
+ public String title;
+ public ObservableList<LeaderboardEntry> leaderboard = FXCollections.observableArrayList();
+ public File notes;
+
+ public String toString()
+ {
+ return title;
+ }
+}
diff --git a/src/main/LeaderboardController.java b/src/main/LeaderboardController.java
deleted file mode 100644
index b48f103..0000000
--- a/src/main/LeaderboardController.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package main;
-
-public class LeaderboardController {
-
-}
diff --git a/src/main/LeaderboardEntry.java b/src/main/LeaderboardEntry.java
new file mode 100644
index 0000000..61a0449
--- /dev/null
+++ b/src/main/LeaderboardEntry.java
@@ -0,0 +1,33 @@
+package main;
+
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.SimpleStringProperty;
+
+public class LeaderboardEntry
+{
+ private SimpleIntegerProperty score;
+ private SimpleStringProperty name;
+
+ //all below is required for table view
+ public LeaderboardEntry(String name, int score)
+ {
+ this.name = new SimpleStringProperty(name);
+ this.score = new SimpleIntegerProperty(score);
+ }
+
+ public int getScore() {
+ return score.get();
+ }
+
+ public void setScore(int score) {
+ this.score.set(score);
+ }
+
+ public String getName() {
+ return name.get();
+ }
+
+ public void setName(String name) {
+ this.name.set(name);
+ }
+}
diff --git a/src/main/Level.java b/src/main/Level.java
index 71560d2..d492c88 100644
--- a/src/main/Level.java
+++ b/src/main/Level.java
@@ -3,27 +3,46 @@ package main;
import java.io.File;
import java.util.ArrayList;
+import javafx.beans.property.SimpleStringProperty;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
public class Level
{
- public Image preview;
- public String title;
- public String aritst;
+ public Image preview; //optional
+ private SimpleStringProperty title;
+ private SimpleStringProperty artist;
public String desc;
- public ArrayList<String> diffList = new ArrayList<String>();
+ public ArrayList<Difficulty> diffList = new ArrayList<Difficulty>();
- public Image background;
- public Color[] colors;
+ public Image background; //optional
+ public Color[] colors; //optional, have default colors
- public void setColors(Color... newColors)
+ public void setColors(Color... newColors)
{
colors = newColors;
}
- public String toString()
+ //all below is required for table view
+ public Level(String title, String artist)
{
- return title+" - "+aritst;
+ this.title = new SimpleStringProperty(title);
+ this.artist = new SimpleStringProperty(artist);
+ }
+
+ public String getTitle() {
+ return title.get();
+ }
+
+ public String getArtist() {
+ return artist.get();
+ }
+
+ public void setTitle(String title) {
+ this.title.set(title);
+ }
+
+ public void setArtist(String artist) {
+ this.artist.set(artist);
}
}
diff --git a/src/main/LevelController.java b/src/main/LevelController.java
index 6d2f5dc..f2199cf 100644
--- a/src/main/LevelController.java
+++ b/src/main/LevelController.java
@@ -1,7 +1,5 @@
package main;
-import java.util.ArrayList;
-
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.image.Image;
@@ -13,25 +11,39 @@ public class LevelController
public LevelController()
{
- Level testLevel = new Level();
- testLevel.title = "test level class";
+ Difficulty d1 = new Difficulty();
+ d1.title = "Easy";
+ LeaderboardEntry lb = new LeaderboardEntry("t-bone", 1000);
+ //lb.setName("t-bone");
+ //lb.setScore(1000);
+ d1.leaderboard.add(lb);
+
+ Difficulty d2 = new Difficulty();
+ d2.title = "Medium";
+ Difficulty d3 = new Difficulty();
+ d3.title = "Hard";
+ Difficulty d4 = new Difficulty();
+ d4.title = "Expert";
+ Difficulty d5 = new Difficulty();
+ d5.title = "Impossible";
+
+ Level testLevel = new Level("test level class","testArtist");
+ //testLevel.setTitle("test level class");
testLevel.desc = "this level is being used to test the LevelController class";
- testLevel.aritst = "testArtist";
+ //testLevel.setAritst("testArtist");
testLevel.setColors(Color.RED, Color.BLUE, Color.GREEN, Color.ORANGE, Color.PURPLE);
- testLevel.diffList.add("Hello");
- testLevel.diffList.add("Easy");
- testLevel.diffList.add("Med");
+ testLevel.diffList.add(d1);
+ testLevel.diffList.add(d2);
levelList.add(testLevel);
- Level testLevel2 = new Level();
- testLevel2.title = "another one";
+ Level testLevel2 = new Level("another one", "testArtist2");
+ //testLevel2.setTitle("another one");
testLevel2.desc = "it can say something else too";
- testLevel2.aritst = "testArtist2";
+ //testLevel2.setAritst("testArtist2");
testLevel2.setColors(Color.RED, Color.BLUE, Color.GREEN, Color.ORANGE, Color.PURPLE);
- testLevel2.diffList.add("Hard");
- testLevel2.diffList.add("Easy");
- testLevel2.diffList.add("Med");
- testLevel2.diffList.add("insane+++");
+ testLevel2.diffList.add(d2);
+ testLevel2.diffList.add(d3);
+ testLevel2.diffList.add(d4);
testLevel2.preview = new Image("assets/pico.png");
levelList.add(testLevel2);
diff --git a/src/main/SettingsController.java b/src/main/SettingsController.java
index f767570..2e2d988 100644
--- a/src/main/SettingsController.java
+++ b/src/main/SettingsController.java
@@ -12,10 +12,12 @@ import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
+import javafx.beans.property.SimpleIntegerProperty;
+
public class SettingsController
{
- private int effectsVol;
- private int musicVol;
+ public SimpleIntegerProperty effectsVol = new SimpleIntegerProperty(0);
+ public SimpleIntegerProperty musicVol = new SimpleIntegerProperty(0);
private boolean fullscreen;
private JSONObject settings;
@@ -34,8 +36,8 @@ public class SettingsController
settings = (JSONObject)(obj); //converts read object to a JSONObject
- effectsVol = (int) settings.get("effectsVol");
- musicVol = (int) settings.get("musicVol");
+ effectsVol.set((int) settings.get("effectsVol"));
+ musicVol.set((int) settings.get("musicVol"));
fullscreen = (boolean) settings.get("fullscreen");
}
catch (FileNotFoundException e)
diff --git a/src/test/Table.java b/src/test/Table.java
new file mode 100644
index 0000000..5571ebd
--- /dev/null
+++ b/src/test/Table.java
@@ -0,0 +1,112 @@
+package test;
+
+import javafx.application.Application;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.geometry.Insets;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.control.Label;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.layout.VBox;
+import javafx.scene.text.Font;
+import javafx.stage.Stage;
+
+public class Table extends Application {
+
+ private TableView<Person> table = new TableView<Person>();
+ private final ObservableList<Person> data =
+ FXCollections.observableArrayList(
+ new Person("Jacob", "Smith", "jacob.smith@example.com"),
+ new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
+ new Person("Ethan", "Williams", "ethan.williams@example.com"),
+ new Person("Emma", "Jones", "emma.jones@example.com"),
+ new Person("Michael", "Brown", "michael.brown@example.com")
+ );
+
+ public static void main(String[] args) {
+ launch(args);
+ }
+
+ @Override
+ public void start(Stage stage) {
+ Scene scene = new Scene(new Group());
+ stage.setTitle("Table View Sample");
+ stage.setWidth(450);
+ stage.setHeight(500);
+
+ final Label label = new Label("Address Book");
+ label.setFont(new Font("Arial", 20));
+
+ table.setEditable(true);
+
+ TableColumn firstNameCol = new TableColumn("First Name");
+ firstNameCol.setMinWidth(100);
+ firstNameCol.setCellValueFactory(
+ new PropertyValueFactory<Person, String>("firstName"));
+
+ TableColumn lastNameCol = new TableColumn("Last Name");
+ lastNameCol.setMinWidth(100);
+ lastNameCol.setCellValueFactory(
+ new PropertyValueFactory<Person, String>("lastName"));
+
+ TableColumn emailCol = new TableColumn("Email");
+ emailCol.setMinWidth(200);
+ emailCol.setCellValueFactory(
+ new PropertyValueFactory<Person, String>("email"));
+
+ table.setItems(data);
+ table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
+
+ final VBox vbox = new VBox();
+ vbox.setSpacing(5);
+ vbox.setPadding(new Insets(10, 0, 0, 10));
+ vbox.getChildren().addAll(label, table);
+
+ ((Group) scene.getRoot()).getChildren().addAll(vbox);
+
+ stage.setScene(scene);
+ stage.show();
+ }
+
+ public static class Person {
+
+ private final SimpleStringProperty firstName;
+ private final SimpleStringProperty lastName;
+ private final SimpleStringProperty email;
+
+ private Person(String fName, String lName, String email) {
+ this.firstName = new SimpleStringProperty(fName);
+ this.lastName = new SimpleStringProperty(lName);
+ this.email = new SimpleStringProperty(email);
+ }
+
+ public String getFirstName() {
+ return firstName.get();
+ }
+
+ public void setFirstName(String fName) {
+ firstName.set(fName);
+ }
+
+ public String getLastName() {
+ return lastName.get();
+ }
+
+ public void setLastName(String fName) {
+ lastName.set(fName);
+ }
+
+ public String getEmail() {
+ return email.get();
+ }
+
+ public void setEmail(String fName) {
+ email.set(fName);
+ }
+ }
+} \ No newline at end of file