diff options
Diffstat (limited to 'src/main/java/net/sowgro/npehero/gui/LevelDetails.java')
-rwxr-xr-x | src/main/java/net/sowgro/npehero/gui/LevelDetails.java | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/main/java/net/sowgro/npehero/gui/LevelDetails.java b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java new file mode 100755 index 0000000..25d96c8 --- /dev/null +++ b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java @@ -0,0 +1,137 @@ +package net.sowgro.npehero.gui; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.RadioButton; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.ToggleGroup; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.text.Text; +import javafx.scene.text.TextAlignment; +import javafx.scene.text.TextFlow; +import net.sowgro.npehero.Driver; +import net.sowgro.npehero.main.Difficulty; +import net.sowgro.npehero.main.Level; + +public class LevelDetails extends VBox +{ + /** + * this class is a layout class, most of its purpose is to place UI elements like Buttons within Panes like VBoxes. + * 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. + * + * @param level: the selected level on the right side + */ + public LevelDetails(Level level) + { + VBox rightBox = new VBox(); + rightBox.prefWidthProperty().bind(super.prefWidthProperty()); + rightBox.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); + 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(); + desc.setText("Select a level from the left pane"); + desc.getStyleClass().add("t3"); + desc.wrappingWidthProperty().bind(super.prefWidthProperty().subtract(10)); + desc.setTextAlignment(TextAlignment.CENTER); + + rightBox.setAlignment(Pos.CENTER); + rightBox.getChildren().addAll(desc); + } + + else + { + VBox details = new VBox(); + + ScrollPane detailsScroll = new ScrollPane(details); + detailsScroll.prefHeightProperty().bind(rightBox.prefHeightProperty()); + detailsScroll.prefWidthProperty().bind(rightBox.prefWidthProperty()); + detailsScroll.getStyleClass().remove("scroll-pane"); + + Text title = new Text(); + title.setText(level.getTitle()); + title.getStyleClass().add("t1"); + + Text artist = new Text(); + artist.setText(level.getArtist()); + artist.getStyleClass().add("t2"); + + Text desc = new Text(); + desc.setText(level.desc); + desc.getStyleClass().add("t3"); + + ImageView previewView = new ImageView(); + Image preview = level.preview; + previewView.setImage(preview); + previewView.fitWidthProperty().bind(super.prefWidthProperty().multiply(0.5)); + previewView.setPreserveRatio(true); + + FlowPane diffSelector = new FlowPane(); + diffSelector.setAlignment(Pos.CENTER); + ToggleGroup diffToggleGroup = new ToggleGroup(); //allows only one to be selected at a time + for (Difficulty diff : level.getValidDiffList()) //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.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.soundController.playSfx("forward"); + Driver.setMenu(new LevelSurround(level, (Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu())); + }); + + leaderboard.disableProperty().bind(diffToggleGroup.selectedToggleProperty().isNull()); + leaderboard.setOnAction(e -> { + Driver.soundController.playSfx("forward"); + Driver.setMenu(new Leaderboard(level, (Difficulty)diffToggleGroup.getSelectedToggle().getUserData(), Driver.getMenu())); + }); + + + HBox diffBox = new HBox(); + diffSelector.prefWidthProperty().bind(diffBox.widthProperty()); + diffBox.getChildren().add(diffSelector); + + details.setSpacing(10); + details.getChildren().addAll(new TextFlow(title), new TextFlow(artist), new TextFlow(desc), previewView, diffBox); + detailsScroll.setFitToWidth(true); + + rightBox.getChildren().add(detailsScroll); + rightBox.setPadding(new Insets(5)); + } + + VBox rightSide = new VBox(); + rightSide.setAlignment(Pos.CENTER_RIGHT); + rightSide.setSpacing(10); + + 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); + } +} |