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