From c4e48f712da1f559e57a81cf867fa135ecd075ee Mon Sep 17 00:00:00 2001
From: jg175 <jg175@hdm-stuttgart.de>
Date: Thu, 22 Feb 2024 20:58:34 +0100
Subject: [PATCH] Fix: cancellation of Bomb Sound

---
 .../Model/Entity/GameplayObjects/Bomb.java    |  8 +++++-
 .../battlearena/Model/Sound/SFX.java          |  2 +-
 .../battlearena/Model/Sound/SoundEffects.java | 22 ++++++++-------
 .../battlearena/Model/Sound/TestThread.java   | 28 +++++++++++++++++++
 src/main/resources/player/appSettings.json    |  4 +--
 5 files changed, 50 insertions(+), 14 deletions(-)
 create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/TestThread.java

diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java
index 1296989d..4923e368 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/GameplayObjects/Bomb.java
@@ -5,6 +5,7 @@ import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection;
 import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
 import de.hdm_stuttgart.battlearena.Model.Sound.SFX;
 import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects;
+import de.hdm_stuttgart.battlearena.Model.Sound.TestThread;
 import javafx.geometry.BoundingBox;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.image.Image;
@@ -79,17 +80,22 @@ public class Bomb implements IEntity {
     }
 
     public void renderEntity(GraphicsContext graphicsContext) {
+
         graphicsContext.drawImage(frames[frameIndex], posX, posY, 48, 48);
         updateAnimation();
     }
 
     private void updateAnimation() {        //Easily add more frames
-        sfx.playSoundEffectOnce(SFX.BOMB);
+
+
         frameCounter++;
 
         if (frameCounter > 17) {
 
             if (frameIndex == 0) {
+                //sfx.playSoundEffectOnce(SFX.BOMB);
+               TestThread t = new TestThread();
+               t.startSound(SFX.BOMB);
                 frameIndex = 1;
                 //PLayer.spawnExplosion();
             } else if (frameIndex == 1) {
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SFX.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SFX.java
index e4c38057..48159e63 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SFX.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SFX.java
@@ -6,7 +6,7 @@ public enum SFX {
     COIN_COLLECTED("src/main/resources/sound/sfx/otSFX/powerups/drop-coins.mp3"),
 
     //Bomb
-    BOMB("src/main/resources/sound/sfx/otSFX/bomb/BombSound.wav"),
+    BOMB("src/main/resources/sound/sfx/otSFX/bomb/Bomb2.wav"),
 
 
     //Attack Sounds
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 d01d6bc6..05fa151b 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
@@ -6,6 +6,8 @@ import de.hdm_stuttgart.battlearena.Model.Entity.IEntity;
 import de.hdm_stuttgart.battlearena.Model.Map.ITile;
 import de.hdm_stuttgart.battlearena.Model.Map.TileManager;
 import javafx.scene.media.AudioClip;
+import javafx.scene.media.Media;
+import javafx.scene.media.MediaPlayer;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -41,14 +43,13 @@ public class SoundEffects {
                 List<Path> sfxPaths = fileManager.getFilePathsFromResources(path);
                 String randomPath = fileManager.getRandomFilePath(sfxPaths);
                 String resource = fileManager.convertPathToResourcePath(randomPath);
-                ///Thread sfxLoop = new Thread
-               service.execute(() -> {
+                Thread sfxLoop = new Thread(() -> {
                     AudioClip effect = new AudioClip(getClass().getResource(resource).toString());
                     effect.setVolume((double) persistence.getSettings().getSfxVolume() /100);
                     effect.play();
                 });
-                //sfxLoop.setDaemon(true);
-                //sfxLoop.start();
+                sfxLoop.setDaemon(true);
+                sfxLoop.start();
                 sfxPaths.clear();
             }
     }
@@ -58,13 +59,14 @@ public class SoundEffects {
         String path = soundEffect.getPath();
         log.info(path);
         String resource = path.substring(18); // Begins at Ressource Folder
-        service.execute(()->{
-            AudioClip audioClip = new AudioClip(getClass().getResource(resource).toExternalForm());
-            audioClip.setVolume((double) persistence.getSettings().getSfxVolume()/100);
-            audioClip.play();
+        Thread sfx = new Thread(()->{
+            Media media = new Media(getClass().getResource(resource).toExternalForm());
+            MediaPlayer mediaPlayer = new MediaPlayer(media);
+            mediaPlayer.setVolume(persistence.getSettings().getSfxVolume());
+            mediaPlayer.play();
         });
-        //sfx.setDaemon(true);
-        //sfx.start();
+        sfx.setDaemon(true);
+        sfx.start();
         soundEffectPlayedTest = true;
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/TestThread.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/TestThread.java
new file mode 100644
index 00000000..1cdbe841
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/TestThread.java
@@ -0,0 +1,28 @@
+package de.hdm_stuttgart.battlearena.Model.Sound;
+
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
+import javafx.scene.media.AudioClip;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+
+public class TestThread extends Thread {
+    private static final Logger log = LogManager.getLogger(TestThread.class);
+    private SFX sfx;
+    private Persistence persistence = Persistence.getInstance();
+
+    @Override
+    public void run() {
+        String path = sfx.getPath();
+        log.info(path);
+        String resource = path.substring(18); // Begins at Ressource Folder
+        AudioClip audioClip = new AudioClip(getClass().getResource(resource).toExternalForm());
+        audioClip.setVolume((double) persistence.getSettings().getSfxVolume() / 100);
+        audioClip.play();
+        log.info("bla");
+    }
+
+    public void startSound(SFX sfx) {
+        this.sfx = sfx;
+        start();
+    }
+}
diff --git a/src/main/resources/player/appSettings.json b/src/main/resources/player/appSettings.json
index c253782d..9aaeff02 100644
--- a/src/main/resources/player/appSettings.json
+++ b/src/main/resources/player/appSettings.json
@@ -1,4 +1,4 @@
 {
-  "sfxVolume": 16,
-  "musicVolume": 16
+  "sfxVolume": 29,
+  "musicVolume": 0
 }
\ No newline at end of file
-- 
GitLab