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 | |
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
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 |