From c3e1fb8a13630a38d9ce922ccc272f9fbf45599e Mon Sep 17 00:00:00 2001
From: Peter <pt033@hdm-stuttgart.de>
Date: Sun, 26 Nov 2023 00:22:33 +0100
Subject: [PATCH] feat(ui): add scene swtich to all scenes, still has
 duplicated code

---
 .../Controller/LocalCreateController.java     | 12 +++++++++-
 .../Controller/MainMenuController.java        | 21 +++++++++++++++++-
 .../Controller/MultiplayerController.java     | 22 ++++++++++++++++++-
 .../MultiplayerCreateController.java          | 12 +++++++++-
 .../Controller/MultiplayerJoinController.java | 12 +++++++++-
 .../Controller/PlayController.java            | 22 ++++++++++++++++++-
 .../hdm_stuttgart/battlearena/Main/Main.java  |  3 +++
 src/main/resources/fxml/LocalCreate.fxml      |  4 ++--
 src/main/resources/fxml/MainMenu.fxml         |  6 ++---
 src/main/resources/fxml/Multiplayer.fxml      |  8 +++----
 .../resources/fxml/MultiplayerCreate.fxml     | 15 +++++++------
 src/main/resources/fxml/MultiplayerJoin.fxml  |  4 ++--
 src/main/resources/fxml/Play.fxml             |  8 +++----
 13 files changed, 121 insertions(+), 28 deletions(-)

diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java
index 8f070dfa..c3abb106 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java
@@ -1,4 +1,14 @@
 package de.hdm_stuttgart.battlearena.Controller;
 
-public class LocalCreateController {
+import javafx.fxml.FXML;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Pane;
+
+public class LocalCreateController extends SceneLoader {
+    @FXML public BorderPane parent;
+
+    public void playScene() {
+        Pane pane = new Pane(loadScene("Play"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
 }
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 4fa73f1d..db1ccca5 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
@@ -1,4 +1,23 @@
 package de.hdm_stuttgart.battlearena.Controller;
 
-public class MainMenuController {
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Pane;
+import javafx.stage.Stage;
+
+public class MainMenuController extends SceneLoader {
+    @FXML public BorderPane parent;
+    @FXML public Button exitButton;
+
+    public void playScene() {
+        Pane pane = new Pane(loadScene("Play"));
+//        get(0) returns the first item from the getChildren() List
+        parent.setCenter(pane.getChildren().get(0));
+    }
+
+    public void exit() {
+        Stage stage = (Stage) exitButton.getScene().getWindow();
+        stage.close();
+    }
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerController.java
index e860d29a..35ce9c8b 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerController.java
@@ -1,4 +1,24 @@
 package de.hdm_stuttgart.battlearena.Controller;
 
-public class MultiplayerController {
+import javafx.fxml.FXML;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Pane;
+
+public class MultiplayerController extends SceneLoader {
+    @FXML public BorderPane parent;
+
+    public void multiplayerCreateScene() {
+        Pane pane = new Pane(loadScene("MultiplayerCreate"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
+
+    public void multiplayerJoinScene() {
+        Pane pane = new Pane(loadScene("MultiplayerJoin"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
+
+    public void playScene() {
+        Pane pane = new Pane(loadScene("Play"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerCreateController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerCreateController.java
index 860a75eb..aa497cc6 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerCreateController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerCreateController.java
@@ -1,4 +1,14 @@
 package de.hdm_stuttgart.battlearena.Controller;
 
-public class MultiplayerCreateController {
+import javafx.fxml.FXML;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Pane;
+
+public class MultiplayerCreateController extends SceneLoader {
+    @FXML public BorderPane parent;
+
+    public void multiplayerScene() {
+        Pane pane = new Pane(loadScene("Multiplayer"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerJoinController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerJoinController.java
index 718bedee..436363c2 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerJoinController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MultiplayerJoinController.java
@@ -1,4 +1,14 @@
 package de.hdm_stuttgart.battlearena.Controller;
 
-public class MultiplayerJoinController {
+import javafx.fxml.FXML;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Pane;
+
+public class MultiplayerJoinController extends SceneLoader{
+    @FXML public BorderPane parent;
+
+    public void multiplayerScene() {
+        Pane pane = new Pane(loadScene("Multiplayer"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
 }
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 3b30742b..821792e8 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/PlayController.java
@@ -1,4 +1,24 @@
 package de.hdm_stuttgart.battlearena.Controller;
 
-public class PlayController {
+import javafx.fxml.FXML;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Pane;
+
+public class PlayController extends SceneLoader {
+    @FXML public BorderPane parent;
+
+    public void mainMenuScene() {
+        Pane pane = new Pane(loadScene("MainMenu"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
+
+    public void localScene() {
+        Pane pane = new Pane(loadScene("LocalCreate"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
+
+    public void multiplayerScene() {
+        Pane pane = new Pane(loadScene("Multiplayer"));
+        parent.setCenter(pane.getChildren().get(0));
+    }
 }
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 f2952c69..31ddc730 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java
@@ -27,6 +27,9 @@ public class Main extends Application {
 
         stage.setTitle("BattleArena");
         stage.setScene(scene);
+        stage.minHeightProperty().setValue(400);
+        stage.minWidthProperty().setValue(600);
+        stage.setMaximized(true);
 
         stage.show();
         log.debug("Project started successfully!");
diff --git a/src/main/resources/fxml/LocalCreate.fxml b/src/main/resources/fxml/LocalCreate.fxml
index 962dfe3d..c52d798e 100644
--- a/src/main/resources/fxml/LocalCreate.fxml
+++ b/src/main/resources/fxml/LocalCreate.fxml
@@ -11,7 +11,7 @@
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.text.Text?>
 
-<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" 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.LocalCreateController">
+<BorderPane fx:id="parent" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" 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.LocalCreateController">
    <center>
       <VBox alignment="TOP_CENTER" spacing="10.0" BorderPane.alignment="TOP_CENTER">
          <children>
@@ -76,7 +76,7 @@
                </children>
             </HBox>
             <Button mnemonicParsing="false" text="Start" />
-            <Button mnemonicParsing="false" text="Back">
+            <Button mnemonicParsing="false" onAction="#playScene" text="Back">
                <VBox.margin>
                   <Insets bottom="50.0" />
                </VBox.margin>
diff --git a/src/main/resources/fxml/MainMenu.fxml b/src/main/resources/fxml/MainMenu.fxml
index 1fcdec85..58e9be7c 100644
--- a/src/main/resources/fxml/MainMenu.fxml
+++ b/src/main/resources/fxml/MainMenu.fxml
@@ -6,19 +6,19 @@
 <?import javafx.scene.layout.Pane?>
 <?import javafx.scene.layout.VBox?>
 
-<BorderPane 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">
+<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" />
-            <Button mnemonicParsing="false" text="Play" VBox.vgrow="ALWAYS">
+            <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 alignment="CENTER" mnemonicParsing="false" text="Exit" />
+            <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>
diff --git a/src/main/resources/fxml/Multiplayer.fxml b/src/main/resources/fxml/Multiplayer.fxml
index d3708a3c..f23ded2b 100644
--- a/src/main/resources/fxml/Multiplayer.fxml
+++ b/src/main/resources/fxml/Multiplayer.fxml
@@ -6,21 +6,21 @@
 <?import javafx.scene.layout.Pane?>
 <?import javafx.scene.layout.VBox?>
 
-<BorderPane 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.PlayController">
+<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.MultiplayerController">
    <center>
       <VBox alignment="TOP_CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="100.0" spacing="50.0" BorderPane.alignment="CENTER">
          <children>
             <Pane maxHeight="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
-            <Button mnemonicParsing="false" text="Create" VBox.vgrow="ALWAYS">
+            <Button mnemonicParsing="false" onAction="#multiplayerCreateScene" text="Create" VBox.vgrow="ALWAYS">
                <VBox.margin>
                   <Insets top="20.0" />
                </VBox.margin>
             </Button>
-            <Button mnemonicParsing="false" text="Join" VBox.vgrow="ALWAYS">
+            <Button mnemonicParsing="false" onAction="#multiplayerJoinScene" text="Join" VBox.vgrow="ALWAYS">
                <VBox.margin>
                   <Insets bottom="50.0" />
                </VBox.margin></Button>
-            <Button alignment="CENTER" mnemonicParsing="false" text="Back">
+            <Button alignment="CENTER" mnemonicParsing="false" onAction="#playScene" text="Back">
                <VBox.margin>
                   <Insets />
                </VBox.margin></Button>
diff --git a/src/main/resources/fxml/MultiplayerCreate.fxml b/src/main/resources/fxml/MultiplayerCreate.fxml
index 734dd97f..d9bc89d6 100644
--- a/src/main/resources/fxml/MultiplayerCreate.fxml
+++ b/src/main/resources/fxml/MultiplayerCreate.fxml
@@ -11,10 +11,11 @@
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.text.Text?>
 
-<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" 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.MultiplayerCreateController">
+<BorderPane fx:id="parent" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" 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.MultiplayerCreateController">
    <center>
-      <VBox alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER">
+      <VBox alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0" spacing="20.0" BorderPane.alignment="CENTER">
          <children>
+            <Pane VBox.vgrow="ALWAYS" />
             <HBox alignment="TOP_CENTER" spacing="20.0">
                <children>
                   <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Text:" />
@@ -24,14 +25,12 @@
                   <Insets top="50.0" />
                </VBox.margin>
             </HBox>
-            <Pane prefHeight="200.0" prefWidth="600.0" />
             <HBox alignment="TOP_CENTER" layoutX="10.0" layoutY="10.0" maxWidth="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="213.0" spacing="20.0">
                <children>
                   <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Text:" />
                   <TextField />
                </children>
             </HBox>
-            <Pane prefHeight="200.0" prefWidth="200.0" />
             <HBox alignment="TOP_CENTER" layoutX="10.0" layoutY="110.0" spacing="10.0">
                <children>
                   <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Text:" />
@@ -39,7 +38,7 @@
                   <RadioButton mnemonicParsing="false" text="No" />
                </children>
             </HBox>
-            <AnchorPane prefHeight="200.0" prefWidth="200.0">
+            <AnchorPane minHeight="-Infinity" prefHeight="39.0" prefWidth="600.0">
                <children>
                   <VBox alignment="TOP_CENTER" layoutX="250.0" prefHeight="200.0" prefWidth="100.0" AnchorPane.leftAnchor="250.0" AnchorPane.rightAnchor="250.0">
                      <children>
@@ -51,8 +50,10 @@
                   <Insets top="20.0" />
                </VBox.margin>
             </AnchorPane>
-            <Button mnemonicParsing="false" text="Button" />
-            <Button mnemonicParsing="false" text="Button" />
+            <Button mnemonicParsing="false" text="Start" />
+            <Button mnemonicParsing="false" onAction="#multiplayerScene" text="Back" />
+            <Pane layoutX="10.0" layoutY="398.0" VBox.vgrow="ALWAYS" />
+            <Pane layoutX="10.0" layoutY="393.0" VBox.vgrow="ALWAYS" />
          </children>
       </VBox>
    </center>
diff --git a/src/main/resources/fxml/MultiplayerJoin.fxml b/src/main/resources/fxml/MultiplayerJoin.fxml
index 413935d5..9126182f 100644
--- a/src/main/resources/fxml/MultiplayerJoin.fxml
+++ b/src/main/resources/fxml/MultiplayerJoin.fxml
@@ -7,7 +7,7 @@
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.text.Text?>
 
-<BorderPane 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.PlayController">
+<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.MultiplayerJoinController">
    <center>
       <VBox alignment="TOP_CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="100.0" spacing="50.0" BorderPane.alignment="CENTER">
          <children>
@@ -17,7 +17,7 @@
             <Button mnemonicParsing="false" text="Connect" VBox.vgrow="ALWAYS" />
             <Text strokeType="OUTSIDE" strokeWidth="0.0" text="[Error Message]" />
             <Pane maxHeight="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
-            <Button alignment="CENTER" mnemonicParsing="false" text="Back" />
+            <Button alignment="CENTER" mnemonicParsing="false" onAction="#multiplayerScene" text="Back" />
             <Pane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="20.0" VBox.vgrow="ALWAYS" />
          </children>
       </VBox>
diff --git a/src/main/resources/fxml/Play.fxml b/src/main/resources/fxml/Play.fxml
index ffd2f0dd..ccd2f64c 100644
--- a/src/main/resources/fxml/Play.fxml
+++ b/src/main/resources/fxml/Play.fxml
@@ -6,18 +6,18 @@
 <?import javafx.scene.layout.Pane?>
 <?import javafx.scene.layout.VBox?>
 
-<BorderPane 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.PlayController">
+<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.PlayController">
    <center>
       <VBox alignment="TOP_CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="100.0" spacing="50.0" BorderPane.alignment="CENTER">
          <children>
             <Pane VBox.vgrow="ALWAYS" />
-            <Button mnemonicParsing="false" text="Local" VBox.vgrow="ALWAYS">
+            <Button mnemonicParsing="false" onAction="#localScene" text="Local" VBox.vgrow="ALWAYS">
                <VBox.margin>
                   <Insets top="20.0" />
                </VBox.margin>
             </Button>
-            <Button mnemonicParsing="false" text="Multiplayer" VBox.vgrow="ALWAYS" />
-            <Button alignment="CENTER" mnemonicParsing="false" text="Back">
+            <Button mnemonicParsing="false" onAction="#multiplayerScene" text="Multiplayer" VBox.vgrow="ALWAYS" />
+            <Button alignment="CENTER" mnemonicParsing="false" onAction="#mainMenuScene" text="Back">
                <VBox.margin>
                   <Insets top="50.0" />
                </VBox.margin></Button>
-- 
GitLab