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