From 89ccb222556b7460789a5051570150b80a1eacc2 Mon Sep 17 00:00:00 2001
From: jg175 <jg175@hdm-stuttgart.de>
Date: Sat, 27 Jan 2024 15:19:38 +0100
Subject: [PATCH] FIX: out of bounds exception

---
 .../Controller/GameSceneController.java       |  4 +--
 .../battlearena/Model/Sound/MusicPlayer.java  | 28 ++++++-------------
 .../battlearena/Model/Sound/SoundEffects.java | 24 ++++++++--------
 3 files changed, 21 insertions(+), 35 deletions(-)

diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
index e0deff2b..4f25db76 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
@@ -192,14 +192,14 @@ public class GameSceneController implements Initializable {
                 verticalTileCount, runtimeInfo.getMapDataGame(), biom);
 
 
-        SoundEffects soundEffects = new SoundEffects();
+       /* SoundEffects soundEffects = new SoundEffects();
         try {
             soundEffects.playSoundEffect(this, inputHandler);
         } catch (IOException e) {
             throw new RuntimeException(e);
         } catch (InterruptedException e) {
             throw new RuntimeException(e);
-        }
+        }*/
 
 
         runtimeInfo.setGameState(GameState.PLAYING);
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 d0e80a6a..a90491b3 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
@@ -15,19 +15,15 @@ import org.apache.logging.log4j.LogManager;
 
 import java.io.IOException;
 import java.net.URL;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
-import java.util.Random;
 import java.util.ResourceBundle;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
-public class MusicPlayer implements Initializable{
+public class MusicPlayer{
 
 
 
@@ -43,25 +39,19 @@ public class MusicPlayer implements Initializable{
     public MusicPlayer(){}
 
 
-    @Override
-    public void initialize(URL url, ResourceBundle resourceBundle) {
-        currentGameState = GameState.NONE;
-        startGameStateMonitoring();
-    }
 
 
-    private void startGameStateMonitoring(){
+    public void startGameStateMonitoring(){
         ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
         scheduler.scheduleAtFixedRate(()->{
            GameState newGameState = RuntimeInfo.getInstance().getGameState();
            if(currentGameState != newGameState){
                currentGameState = newGameState;
-               Platform.runLater(()-> updateMusic());
+               Platform.runLater(this::updateMusic);
            }
         },0,1, TimeUnit.SECONDS);
-    }
-
 
+    }
 
     private void updateMusic(){
         stopMusic();
@@ -99,7 +89,7 @@ public class MusicPlayer implements Initializable{
 
     public void stopMusic(){
         if (mediaPlayer != null) {
-            mediaPlayer.dispose(); // Dispose of the MediaPlayer instance
+            mediaPlayer.dispose(); // Dispose of the MediaPlayer instance to ensure stoping
         }
     }
 
@@ -108,16 +98,14 @@ public class MusicPlayer implements Initializable{
     }
 
     public void setVolume(int volume){
-        Persistence.getInstance().getSettings().setMusicVolume(volume);
-        mediaPlayer.setVolume(volume / 100);
+        settings.setMusicVolume(volume);
+        mediaPlayer.setVolume((double) volume / 100);
     }
 
     public int getVolume(){
-        return Persistence.getInstance().getSettings().getMusicVolume();
+        return settings.getMusicVolume();
     }
 
-
     public MusicPlayer getInstance(){return musicPlayerSingleton;}
 
-
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundEffects.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundEffects.java
index 379e46d7..cd16b2fa 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundEffects.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundEffects.java
@@ -1,38 +1,36 @@
 package de.hdm_stuttgart.battlearena.Model.Sound;
 
 import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.AppSettings;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
-import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
 import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
 import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
 import de.hdm_stuttgart.battlearena.Model.Map.ITile;
 import de.hdm_stuttgart.battlearena.Model.Map.TileManager;
-import javafx.fxml.Initializable;
+
 import javafx.scene.media.AudioClip;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
 import java.io.IOException;
-import java.net.URL;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
-import java.util.ResourceBundle;
+
 
 public class SoundEffects {
     private static final Logger log = LogManager.getLogger(SoundEffects.class);
-    private int sfxVolume;
+    private static final SoundEffects sfx = new SoundEffects();
 
-    private RuntimeInfo runtimeInfo;
-    SoundFileManager fileManager = new SoundFileManager();
-    GameSceneController gameSceneController;
+    public SoundEffects(){};
 
+    SoundFileManager fileManager = new SoundFileManager();
+    private AppSettings settings = Persistence.getInstance().getSettings();
 
 
     public void playSoundEffect(GameSceneController gameSceneController, InputHandler inputHandler) throws IOException, InterruptedException {
-        MusicPlayer musicPlayer = new MusicPlayer();
         log.info(inputHandler);
-        TileManager tileManager = gameSceneController.getTileManager();// TODO Find out why tileManager is null
+        TileManager tileManager = gameSceneController.getTileManager();
         log.info(tileManager);
         IEntity player = gameSceneController.getPlayer();
         ITile[] tileSet = tileManager.getTileSet();
@@ -46,7 +44,7 @@ public class SoundEffects {
         while(inputHandler.isMoveDown() || inputHandler.isMoveUp() || inputHandler.isMoveLeft() || inputHandler.isMoveRight()){
             playerPosX = player.getMapPosX();
             playerPosY = player.getMapPosY();
-            mapTile = map[playerPosX][playerPosY];
+            mapTile = map[playerPosY/48][playerPosX/48]; //TODO FIND ANOTHER WAY to get to the map tile
             System.out.println(mapTile);
             SFXLoop sfx = tileSet[mapTile].getSoundeffect();
             System.out.println(playerPosX);
@@ -56,9 +54,8 @@ public class SoundEffects {
                 String randomPath = fileManager.getRandomFilePath(sfxPaths);
                 String resource = fileManager.convertPathToResourcePath(randomPath);
                 Thread sfxLoop = new Thread(() -> {
-                    AudioClip effect = new AudioClip(resource);
+                    AudioClip effect = new AudioClip(getClass().getResource(resource).toString());
                     effect.setVolume((double) Persistence.getInstance().getSettings().getSfxVolume() /100);
-                    effect.setVolume(0.5); //TODO Replace with own Method
                     effect.play();
                 });
                 sfxLoop.setDaemon(true);
@@ -99,5 +96,6 @@ public class SoundEffects {
         return Persistence.getInstance().getSettings().getMusicVolume();
     }
 
+    public SoundEffects getInstance(){return sfx;}
 
 }
-- 
GitLab