From 764a486362d1b74968779fdb832e157f795c6a0a Mon Sep 17 00:00:00 2001
From: jg175 <jg175@hdm-stuttgart.de>
Date: Wed, 31 Jan 2024 18:22:11 +0100
Subject: [PATCH] HOTFIX: Programm was still running, after its being closed

---
 .../Controller/MainMenuController.java        |  3 +++
 .../battlearena/Main/Driver.java              |  5 ++++
 .../battlearena/Model/Sound/MusicPlayer.java  |  5 +++-
 .../battlearena/Model/Sound/MusicType.java    | 16 ------------
 src/main/resources/player/appSettings.json    |  4 +--
 src/test/java/MusicPlayerTest.java            | 26 +++++++++++++++++++
 6 files changed, 40 insertions(+), 19 deletions(-)
 delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java
 create mode 100644 src/test/java/MusicPlayerTest.java

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 3b569f81..d1efdc6a 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java
@@ -3,6 +3,7 @@ package de.hdm_stuttgart.battlearena.Controller;
 import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseException;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
+import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
 import javafx.scene.control.Button;
@@ -20,6 +21,7 @@ public class MainMenuController {
     private Button exitButton;
     private final SceneLoader sceneLoader = new SceneLoader();
     private final Persistence persistence = Persistence.getInstance();
+    private final MusicPlayer player = MusicPlayer.getInstance();
 
     private void switchScene(String name) {
         parent.getChildren().clear();
@@ -48,6 +50,7 @@ public class MainMenuController {
 
     @FXML
     private void exit() throws DatabaseException {
+        player.getScheduler().shutdown();
         persistence.savePlayerStatistics();
         persistence.saveSettings();
         Stage stage = (Stage) exitButton.getScene().getWindow();
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java
index f8431f9f..83297700 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java
@@ -6,6 +6,8 @@ import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
 
 import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer;
 import javafx.application.Application;
+import javafx.application.Platform;
+import javafx.event.EventHandler;
 import javafx.fxml.FXMLLoader;
 import javafx.geometry.Rectangle2D;
 import javafx.scene.Parent;
@@ -16,6 +18,7 @@ import javafx.stage.Screen;
 import javafx.stage.Stage;
 
 import javafx.stage.StageStyle;
+import javafx.stage.WindowEvent;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -59,6 +62,8 @@ public class Driver extends Application {
         MusicPlayer player = MusicPlayer.getInstance();
         player.startGameStateMonitoring();
 
+        stage.setOnCloseRequest(windowEvent -> MusicPlayer.getInstance().getScheduler().shutdown());
+
 
         stage.show();
         log.debug("Project started successfully!");
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java
index c48ea216..f77fa54d 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java
@@ -36,13 +36,15 @@ public class MusicPlayer{
     private GameState currentGameState;
     private SoundFileManager fileManager = new SoundFileManager();
 
+    private ScheduledExecutorService scheduler;
+
     private MusicPlayer(){}
 
 
 
 
     public void startGameStateMonitoring(){
-        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
+        scheduler = Executors.newSingleThreadScheduledExecutor();
         scheduler.scheduleAtFixedRate(()->{
            GameState newGameState = RuntimeInfo.getInstance().getGameState();
            if(currentGameState != newGameState){
@@ -105,6 +107,7 @@ public class MusicPlayer{
     public int getVolume(){
         return persistence.getSettings().getMusicVolume();
     }
+    public ScheduledExecutorService getScheduler(){return scheduler;}
 
     public static MusicPlayer getInstance(){return musicPlayerSingleton;}
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java
deleted file mode 100644
index b7d5924e..00000000
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.hdm_stuttgart.battlearena.Model.Sound;
-
-public enum MusicType {
-    MENU("src/main/resources/sound/music/menu"),
-    OPTIONS("src/main/resources/sound/music/options"),
-    GAME("src/main/resources/sound/music/game");
-
-    private String path;
-    MusicType(String path){
-        this.path = path;
-    }
-
-    public String getPath(){
-        return path;
-    }
-}
diff --git a/src/main/resources/player/appSettings.json b/src/main/resources/player/appSettings.json
index cabb64ea..29ddb093 100644
--- a/src/main/resources/player/appSettings.json
+++ b/src/main/resources/player/appSettings.json
@@ -1,4 +1,4 @@
 {
-  "sfxVolume": 0,
-  "musicVolume": 11
+  "sfxVolume": 16,
+  "musicVolume": 39
 }
\ No newline at end of file
diff --git a/src/test/java/MusicPlayerTest.java b/src/test/java/MusicPlayerTest.java
new file mode 100644
index 00000000..b56177a7
--- /dev/null
+++ b/src/test/java/MusicPlayerTest.java
@@ -0,0 +1,26 @@
+import de.hdm_stuttgart.battlearena.Controller.Enum.GameState;
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
+import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class MusicPlayerTest {
+    private static final Logger log = LogManager.getLogger(MusicPlayerTest.class);
+
+    RuntimeInfo runtimeInfo;
+    MusicPlayer musicPlayer;
+    @BeforeEach
+    void setup(){
+    musicPlayer = MusicPlayer.getInstance();
+    runtimeInfo = RuntimeInfo.getInstance();
+    }
+
+    @Test
+    void startGameStateMonitoringTest(){
+        runtimeInfo.setGameState(GameState.MENU);
+        musicPlayer.startGameStateMonitoring();
+    }
+}
-- 
GitLab