From 9b66ba2be25a3731038bbd3cd8d188f88502d421 Mon Sep 17 00:00:00 2001
From: Peter <pt033@hdm-stuttgart.de>
Date: Fri, 8 Dec 2023 17:26:29 +0100
Subject: [PATCH] add(ui): add options scene #14

---
 .../Controller/IntroController.java           |  1 -
 .../Controller/MainMenuController.java        |  4 ++
 .../Controller/OptionsController.java         | 44 +++++++++++++++++++
 src/main/resources/fxml/MainMenu.fxml         |  1 +
 src/main/resources/fxml/Options.fxml          | 25 +++++++++++
 src/main/resources/styles/style.css           | 11 +++++
 6 files changed, 85 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Controller/OptionsController.java
 create mode 100644 src/main/resources/fxml/Options.fxml

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 524d9482..cc1eebcb 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/IntroController.java
@@ -82,7 +82,6 @@ public class IntroController implements Initializable {
     }
 
     private void nextVideo() {
-//        TODO: look into not disposing mediaPlayer
         mediaPlayer.dispose();
         file = new File(fileName + videos[counter + 1]);
         counter++;
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 4b101878..d742f931 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
@@ -26,6 +26,10 @@ public class MainMenuController {
         switchScene("Statistics");
     }
 
+    public void optionsScene() {
+        switchScene("Options");
+    }
+
     public void exit() {
         Stage stage = (Stage) exitButton.getScene().getWindow();
         stage.close();
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/OptionsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/OptionsController.java
new file mode 100644
index 00000000..413e4ee7
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/OptionsController.java
@@ -0,0 +1,44 @@
+package de.hdm_stuttgart.battlearena.Controller;
+
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.Slider;
+import javafx.scene.layout.VBox;
+
+import java.net.URL;
+import java.util.ResourceBundle;
+
+public class OptionsController implements Initializable {
+    @FXML public VBox parent;
+    @FXML public Slider volumeSlider;
+    SceneLoader sceneLoader = new SceneLoader();
+    public int volume;
+    private boolean setVolume = false;
+    private void switchScene(String name) {
+        parent.getChildren().clear();
+        parent.getChildren().add(sceneLoader.loadScene(name));
+    }
+
+    public void creditScene() {
+        switchScene("Credits");
+    }
+
+    public void mainMenuScene() {
+        switchScene("MainMenu");
+    }
+
+    @Override
+    public void initialize(URL url, ResourceBundle resourceBundle) {
+//        variables keep getting re-initialized after switching scenes. For now not working!!!!!
+        if (setVolume) {
+            volumeSlider.setValue(volume);
+        }
+
+//        TODO: use Runtime Database to save volume
+        volumeSlider.setOnMouseReleased(mouseEvent -> {
+            setVolume = true;
+            volume = (int) volumeSlider.getValue();
+            System.out.println("Volume: " + volume);
+        });
+    }
+}
diff --git a/src/main/resources/fxml/MainMenu.fxml b/src/main/resources/fxml/MainMenu.fxml
index f7ecaa7b..385eeb92 100644
--- a/src/main/resources/fxml/MainMenu.fxml
+++ b/src/main/resources/fxml/MainMenu.fxml
@@ -17,6 +17,7 @@
         </Button>
         <Button mnemonicParsing="false" text="Map Creator" VBox.vgrow="ALWAYS" />
         <Button mnemonicParsing="false" onAction="#statisticsScene" text="Statistics" VBox.vgrow="ALWAYS" />
+      <Button mnemonicParsing="false" onAction="#optionsScene" text="Options" />
         <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" />
diff --git a/src/main/resources/fxml/Options.fxml b/src/main/resources/fxml/Options.fxml
new file mode 100644
index 00000000..79f14cd6
--- /dev/null
+++ b/src/main/resources/fxml/Options.fxml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Slider?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.text.Text?>
+
+
+<VBox fx:id="parent" alignment="CENTER" prefHeight="400.0" prefWidth="600.0" spacing="20.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.OptionsController">
+   <children>
+      <HBox alignment="CENTER">
+         <children>
+            <VBox alignment="TOP_CENTER" spacing="10.0">
+               <children>
+                  <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Volume:" />
+                  <Slider fx:id="volumeSlider" blockIncrement="25.0" majorTickUnit="100.0" minorTickCount="1" prefHeight="14.0" prefWidth="480.0" showTickLabels="true" value="75.0" VBox.vgrow="NEVER" />
+               </children>
+            </VBox>
+         </children>
+      </HBox>
+      <Button mnemonicParsing="false" onAction="#creditScene" text="Credits" />
+      <Button mnemonicParsing="false" onAction="#mainMenuScene" text="Back" />
+   </children>
+</VBox>
diff --git a/src/main/resources/styles/style.css b/src/main/resources/styles/style.css
index 6b84fc00..4841857b 100644
--- a/src/main/resources/styles/style.css
+++ b/src/main/resources/styles/style.css
@@ -47,3 +47,14 @@
     -fx-background-color: -fx-dark-brown;
     -fx-background-insets: 0;
 }
+
+.slider .track {
+     -fx-background-color: rgba(0, 0, 0, 0.5);
+    -fx-pref-height: 0.2em;
+ }
+
+.slider .thumb {
+    -fx-pref-height: 0.6em;
+    -fx-pref-width: 0.4em;
+    -fx-background-color: -fx-brown;
+}
-- 
GitLab