From c7c448452df56b46cedc5594fdbaf37686f83391 Mon Sep 17 00:00:00 2001
From: Peter <pt033@hdm-stuttgart.de>
Date: Mon, 4 Dec 2023 18:55:26 +0100
Subject: [PATCH] update(controller): change main menu scene into seperate fxml
 file

---
 .../Controller/MainMenuController.java        | 33 ++--------
 .../Controller/MenuBorderPaneController.java  | 42 +++++++++++++
 .../Controller/PlayController.java            |  2 +-
 .../hdm_stuttgart/battlearena/Main/Main.java  |  2 +-
 src/main/resources/fxml/MainMenu.fxml         | 61 +++++--------------
 src/main/resources/fxml/MenuBorderPane.fxml   | 34 +++++++++++
 6 files changed, 100 insertions(+), 74 deletions(-)
 create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java
 create mode 100644 src/main/resources/fxml/MenuBorderPane.fxml

diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
index 62f2ea8b..947eb79f 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
@@ -7,28 +7,25 @@ import javafx.scene.control.Button;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.BorderPane;
 import javafx.scene.layout.Pane;
+import javafx.scene.layout.VBox;
 import javafx.stage.Screen;
 import javafx.stage.Stage;
 
 import java.net.URL;
 import java.util.ResourceBundle;
 
-public class MainMenuController implements Initializable {
+public class MainMenuController {
     @FXML
-    public BorderPane parent;
+    public VBox parent;
     @FXML
-    public Button exitButton, btnRight;
-    @FXML
-    public ImageView imgLeft, imgRight;
+    public Button exitButton;
     public static Pane center;
-    private int counter = 0;
     private final SceneLoader sceneLoader = new SceneLoader();
 
     public void playScene() {
-//        saving Borderpane without borders as regular pane so after switching scenes back to main menu it won't load the entire Borderpane, instead only the center content. Will fix the static and public identifier in the future
-        center = (Pane) parent.getCenter();
 //        get(0) returns the first item from the getChildren() List
-        parent.setCenter(sceneLoader.loadScene("Play"));
+        parent.getChildren().clear();
+        parent.getChildren().add(sceneLoader.loadScene("Play"));
     }
 
     public void exit() {
@@ -36,24 +33,6 @@ public class MainMenuController implements Initializable {
         stage.close();
     }
 
-    @Override
-    public void initialize(URL url, ResourceBundle resourceBundle) {
-//        set size for rusty gear image depending on screen resolution
-        Rectangle2D screen = Screen.getPrimary().getVisualBounds();
-        final double imageWidth = screen.getWidth() / 6;
-        imgRight.setFitWidth(imageWidth);
-        imgRight.setPreserveRatio(true);
-        imgLeft.setFitWidth(imageWidth);
-        imgLeft.setPreserveRatio(true);
-    }
-
-    public void easterEgg() {
-        btnRight.setOnMouseClicked(mouseEvent -> counter++);
-        if (counter == 5) {
-//            TODO: inplement something stupid
-            System.out.println("monke");
-        }
-    }
 
 //    TODO: create skin selectiion scene
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java
new file mode 100644
index 00000000..d634b051
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java
@@ -0,0 +1,42 @@
+package de.hdm_stuttgart.battlearena.Controller;
+
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.geometry.Rectangle2D;
+import javafx.scene.control.Button;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.BorderPane;
+import javafx.stage.Screen;
+
+import java.net.URL;
+import java.util.ResourceBundle;
+
+public class MenuBorderPaneController implements Initializable {
+    @FXML
+    public BorderPane parent;
+    @FXML
+    public Button btnRight;
+    @FXML
+    public ImageView imgLeft, imgRight;
+    private int counter = 0;
+    private final SceneLoader sceneLoader = new SceneLoader();
+    @Override
+    public void initialize(URL url, ResourceBundle resourceBundle) {
+        parent.setCenter(sceneLoader.loadScene("MainMenu"));
+//        set size for rusty gear image depending on screen resolution
+        Rectangle2D screen = Screen.getPrimary().getVisualBounds();
+        final double imageWidth = screen.getWidth() / 6;
+        imgRight.setFitWidth(imageWidth);
+        imgRight.setPreserveRatio(true);
+        imgLeft.setFitWidth(imageWidth);
+        imgLeft.setPreserveRatio(true);
+    }
+
+    public void easterEgg() {
+        btnRight.setOnMouseClicked(mouseEvent -> counter++);
+        if (counter == 5) {
+//            TODO: implement something stupid
+            System.out.println("monke");
+        }
+    }
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayController.java
index ab164fea..0b094a0e 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayController.java
@@ -9,7 +9,7 @@ public class PlayController {
 
     public void mainMenuScene() {
         parent.getChildren().clear();
-        parent.getChildren().add(MainMenuController.center);
+        parent.getChildren().add(sceneLoader.loadScene("MainMenu"));
     }
 
     public void localScene() {
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java
index d1afd4e5..d8d3fe71 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java
@@ -26,7 +26,7 @@ public class Main extends Application {
 //        loading font in start() because CSS can't handle whitespace in folder names
         Font.loadFont(getClass().getResourceAsStream("/fonts/StarshipShadow.ttf"), 20);
 
-        Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/MainMenu.fxml")));
+        Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/MenuBorderPane.fxml")));
 
         Scene scene = new Scene(root);
 
diff --git a/src/main/resources/fxml/MainMenu.fxml b/src/main/resources/fxml/MainMenu.fxml
index fe13f06a..b6474601 100644
--- a/src/main/resources/fxml/MainMenu.fxml
+++ b/src/main/resources/fxml/MainMenu.fxml
@@ -2,52 +2,23 @@
 
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Button?>
-<?import javafx.scene.image.Image?>
-<?import javafx.scene.image.ImageView?>
-<?import javafx.scene.layout.BorderPane?>
 <?import javafx.scene.layout.Pane?>
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.text.Text?>
 
-<BorderPane 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.MainMenuController">
-   <center>
-      <VBox alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="100.0" spacing="50.0" BorderPane.alignment="CENTER">
-         <children>
-            <Pane VBox.vgrow="ALWAYS" />
-            <Text id="gameTitle" strokeType="OUTSIDE" strokeWidth="0.0" text="Battlearena" />
-            <Button mnemonicParsing="false" onAction="#playScene" text="Play" VBox.vgrow="ALWAYS">
-               <VBox.margin>
-                  <Insets top="20.0" />
-               </VBox.margin>
-            </Button>
-            <Button mnemonicParsing="false" text="Map Creator" VBox.vgrow="ALWAYS" />
-            <Button mnemonicParsing="false" text="Statistics" VBox.vgrow="ALWAYS" />
-            <Button fx:id="exitButton" alignment="CENTER" mnemonicParsing="false" onAction="#exit" text="Exit" />
-            <Pane VBox.vgrow="ALWAYS" />
-            <Pane layoutX="10.0" layoutY="395.0" VBox.vgrow="ALWAYS" />
-         </children>
-      </VBox>
-   </center>
-   <right>
-      <Button fx:id="btnRight" mnemonicParsing="false" onAction="#easterEgg" prefWidth="111.0" BorderPane.alignment="BOTTOM_CENTER">
-         <graphic>
-            <ImageView fx:id="imgRight" fitHeight="500.0" fitWidth="500.0" pickOnBounds="true" preserveRatio="true">
-               <image>
-                  <Image url="@../textures/images/gear_with_shadow.png" />
-               </image>
-            </ImageView>
-         </graphic>
-      </Button>
-   </right>
-   <left>
-      <Button mnemonicParsing="false" BorderPane.alignment="BOTTOM_CENTER">
-         <graphic>
-            <ImageView fx:id="imgLeft" fitHeight="500.0" fitWidth="500.0" pickOnBounds="true" preserveRatio="true">
-               <image>
-                  <Image url="@../textures/images/dont_delete_or_ui_will_break.png" />
-               </image>
-            </ImageView>
-         </graphic>
-      </Button>
-   </left>
-</BorderPane>
+<VBox fx:id="parent" alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" spacing="50.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MainMenuController">
+    <children>
+        <Pane VBox.vgrow="ALWAYS" />
+        <Text id="gameTitle" strokeType="OUTSIDE" strokeWidth="0.0" text="Battlearena" />
+        <Button mnemonicParsing="false" onAction="#playScene" text="Play" VBox.vgrow="ALWAYS">
+            <VBox.margin>
+                <Insets top="20.0" />
+            </VBox.margin>
+        </Button>
+        <Button mnemonicParsing="false" text="Map Creator" VBox.vgrow="ALWAYS" />
+        <Button mnemonicParsing="false" text="Statistics" VBox.vgrow="ALWAYS" />
+        <Button fx:id="exitButton" alignment="CENTER" mnemonicParsing="false" onAction="#exit" text="Exit" />
+        <Pane VBox.vgrow="ALWAYS" />
+        <Pane layoutX="10.0" layoutY="395.0" VBox.vgrow="ALWAYS" />
+    </children>
+</VBox>
diff --git a/src/main/resources/fxml/MenuBorderPane.fxml b/src/main/resources/fxml/MenuBorderPane.fxml
new file mode 100644
index 00000000..3e3e8381
--- /dev/null
+++ b/src/main/resources/fxml/MenuBorderPane.fxml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.image.Image?>
+<?import javafx.scene.image.ImageView?>
+<?import javafx.scene.layout.BorderPane?>
+
+<BorderPane 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">
+            <graphic>
+                <ImageView fx:id="imgRight" fitHeight="500.0" fitWidth="500.0" pickOnBounds="true" preserveRatio="true">
+                    <image>
+                        <Image url="@../textures/images/gear_with_shadow.png"/>
+                    </image>
+                </ImageView>
+            </graphic>
+        </Button>
+    </right>
+    <left>
+        <Button mnemonicParsing="false" BorderPane.alignment="BOTTOM_CENTER">
+            <graphic>
+                <ImageView fx:id="imgLeft" fitHeight="500.0" fitWidth="500.0" pickOnBounds="true" preserveRatio="true">
+                    <image>
+                        <Image url="@../textures/images/dont_delete_or_ui_will_break.png"/>
+                    </image>
+                </ImageView>
+            </graphic>
+        </Button>
+    </left>
+</BorderPane>
-- 
GitLab