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 | 
