From fb7ef6aa58b672c3b9d9b693208003de18645041 Mon Sep 17 00:00:00 2001 From: Peter <pt033@hdm-stuttgart.de> Date: Wed, 13 Dec 2023 23:27:51 +0100 Subject: [PATCH] feat(easter egg): add more easter egg #20 --- .../Controller/CreateMediaPlayer.java | 12 ++-- .../Controller/CreditsController.java | 2 +- .../Controller/IntroController.java | 2 +- .../Controller/MenuBorderPaneController.java | 65 +++++++++++++------ .../Controller/SkinSelectionController.java | 2 +- src/main/resources/fxml/MenuBorderPane.fxml | 2 +- 6 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateMediaPlayer.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateMediaPlayer.java index 03fbd835..f924d633 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateMediaPlayer.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreateMediaPlayer.java @@ -8,15 +8,17 @@ import javafx.scene.media.MediaView; import java.io.File; public class CreateMediaPlayer { - public MediaPlayer getMediaPlayer(MediaView mediaView, File file, BorderPane parent) { + public MediaPlayer getMediaPlayer(MediaView mediaView, File file, boolean isFullscreen, BorderPane... parent) { Media media = new Media(file.toURI().toString()); MediaPlayer mediaPlayer = new MediaPlayer(media); // resizing once the scenes has been loaded to get width and height property - mediaPlayer.setOnReady(() -> { - mediaView.fitWidthProperty().bind(parent.getScene().widthProperty()); - mediaView.fitHeightProperty().bind(parent.getScene().heightProperty()); - }); + if (isFullscreen) { + mediaPlayer.setOnReady(() -> { + mediaView.fitWidthProperty().bind(parent[0].getScene().widthProperty()); + mediaView.fitHeightProperty().bind(parent[0].getScene().heightProperty()); + }); + } mediaPlayer.setAutoPlay(true); return mediaPlayer; } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java index c6305002..2e6f99aa 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/CreditsController.java @@ -31,7 +31,7 @@ public class CreditsController implements Initializable { } private void createMediaPlayer() { - mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, file, parent); + mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, file, true, parent); mediaView.setMediaPlayer(mediaPlayer); mediaPlayer.setOnEndOfMedia(this::videoEnd); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java index 7b54d0d4..9fa403dd 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java @@ -36,7 +36,7 @@ public class IntroController implements Initializable { private void createMediaPlayer() { // initializing this.mediaPlayer - mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, file, introParent); + mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, file, true, introParent); mediaView.setMediaPlayer(mediaPlayer); mediaPlayer.setOnEndOfMedia(() -> { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java index 48ecfb26..0601c5d8 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java @@ -8,6 +8,7 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; +import javafx.scene.media.MediaView; import javafx.stage.Screen; import java.io.File; @@ -15,16 +16,17 @@ import java.net.URL; import java.util.ResourceBundle; public class MenuBorderPaneController implements Initializable { - // TODO: change FXML variables to private. Don't know why it's not working when they're private @FXML private BorderPane parent; @FXML private Button btnRight, btnLeft; @FXML private ImageView imgLeft, imgRight; - private int counter = 1; + private int musicCounter = 1, videoCounter = 0; private final SceneLoader sceneLoader = new SceneLoader(); - MediaPlayer musicPlayer; + private MediaPlayer musicPlayer, mediaPlayer; + private MediaView mediaView; + private final String[] videoFiles = {"allMyFellas.mp4", "bobama.mp4", "lifeCouldBeMonke.mp4", "russianKid.mp4"}; @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -37,24 +39,49 @@ public class MenuBorderPaneController implements Initializable { imgLeft.setFitWidth(imageWidth); imgLeft.setPreserveRatio(true); backgroundMusic("cocBackgroundMusicTest.mp3"); + easterEgg(); } - public void easterEgg() { - btnRight.setOnMouseClicked(mouseEvent -> counter++); - switch (counter) { - case 5: - musicPlayer.dispose(); - backgroundMusic("spongeBob.mp3"); - break; - case 12: - musicPlayer.dispose(); - backgroundMusic("stadiumRave.mp3"); - break; - case 20: - musicPlayer.dispose(); - backgroundMusic("wii.mp3"); - break; - } + private void easterEgg() { + btnRight.setOnMouseClicked(mouseEvent -> { + musicCounter++; + switch (musicCounter) { + case 5: + musicPlayer.dispose(); + backgroundMusic("spongeBob.mp3"); + break; + case 12: + musicPlayer.dispose(); + backgroundMusic("stadiumRave.mp3"); + break; + case 20: + musicPlayer.dispose(); + backgroundMusic("wii.mp3"); + break; + } + }); + + btnLeft.setOnMouseClicked(mouseEvent -> { + if (!musicPlayer.isAutoPlay()) { + musicPlayer.play(); + } + + if (mediaPlayer != null) { + mediaPlayer.dispose(); + } + + if (videoCounter <= 3) { + musicPlayer.stop(); + mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, new File("src/main/resources/videos/" + videoFiles[videoCounter]), false); + mediaView = new MediaView(mediaPlayer); + parent.getChildren().add(mediaView); + mediaPlayer.setOnEndOfMedia(() -> { + parent.getChildren().remove(mediaView); + musicPlayer.play(); + }); + } + videoCounter++; + }); } private void backgroundMusic(String file) { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java index 65f7da43..89a93971 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java @@ -35,7 +35,7 @@ public class SkinSelectionController implements Initializable { setImageWidth(selection1, selection2, selection3); } - private void setImageWidth(ImageView... imageViews) { // the ... allows for zero or more arguments seperated by a comma + private void setImageWidth(ImageView... imageViews) { // the ... allows for zero or more arguments seperated by a comma, will pass argument as an array Rectangle2D screen = Screen.getPrimary().getVisualBounds(); final double imageWidth = screen.getWidth() * 0.2; for (ImageView image : imageViews) { diff --git a/src/main/resources/fxml/MenuBorderPane.fxml b/src/main/resources/fxml/MenuBorderPane.fxml index cc6e6e72..a2127bbb 100644 --- a/src/main/resources/fxml/MenuBorderPane.fxml +++ b/src/main/resources/fxml/MenuBorderPane.fxml @@ -7,7 +7,7 @@ <BorderPane id="mainMenu" fx:id="parent" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MenuBorderPaneController"> <right> - <Button fx:id="btnRight" mnemonicParsing="false" onAction="#easterEgg" prefWidth="111.0" BorderPane.alignment="BOTTOM_CENTER"> + <Button fx:id="btnRight" mnemonicParsing="false" prefWidth="111.0" BorderPane.alignment="BOTTOM_CENTER"> <graphic> <ImageView fx:id="imgRight" fitHeight="845.0" fitWidth="799.0" pickOnBounds="true" preserveRatio="true"> <image> -- GitLab