From e4664e43ef246f1657fd706ac230d2619e28cfe3 Mon Sep 17 00:00:00 2001
From: jg175 <jg175@hdm-stuttgart.de>
Date: Thu, 18 Jan 2024 14:42:06 +0100
Subject: [PATCH] UPDATE: Code CleanUp SoundManager (Now called MusicPlayer),
 Deleted Interface

---
 .../hdm_stuttgart/battlearena/Main/Main.java  |  9 +--
 .../Model/Sound/ISoundManager.java            | 16 -----
 .../{SoundManager.java => MusicPlayer.java}   | 68 +++++++++----------
 3 files changed, 37 insertions(+), 56 deletions(-)
 delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java
 rename src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/{SoundManager.java => MusicPlayer.java} (53%)

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 dd93c237..96aa7223 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java
@@ -1,9 +1,6 @@
 package de.hdm_stuttgart.battlearena.Main;
 
 
-import de.hdm_stuttgart.battlearena.Model.Sound.MusicType;
-import de.hdm_stuttgart.battlearena.Model.Sound.SFX;
-import de.hdm_stuttgart.battlearena.Model.Sound.SoundManager;
 import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
 
 import javafx.application.Application;
@@ -60,15 +57,15 @@ public class Main extends Application {
         stage.setScene(scene);
 
 
-        SoundManager soundManager = new SoundManager();
+       // SoundManager soundManager = new SoundManager();
 
-        stage.setOnCloseRequest(event -> {
+        /*stage.setOnCloseRequest(event -> {
             if (soundManager != null) {
                 soundManager.stopMusic();
             }
         });
 
-        soundManager.playMusic(MusicType.GAME);
+        soundManager.playMusic(MusicType.GAME);*/
 
         stage.show();
         log.debug("Project started successfully!");
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java
deleted file mode 100644
index 7f31c780..00000000
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.hdm_stuttgart.battlearena.Model.Sound;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.nio.file.Path;
-import java.util.List;
-
-public interface ISoundManager {
-
-
-
-    void playSoundEffect() throws InterruptedException, MalformedURLException; //plays sound effects only
-
-    List<Path> getFilePathsFromResources(Path folderPath) throws IOException; // gets file-paths in a Folder as a list
-
-}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java
similarity index 53%
rename from src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java
rename to src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java
index 41af9877..7a8c9f1f 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java
@@ -6,74 +6,60 @@ import javafx.scene.media.MediaPlayer;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
-import javafx.scene.media.AudioClip;
-
 
 import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 import java.util.Random;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadPoolExecutor;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-public class SoundManager implements ISoundManager {
-    private static final Logger log = LogManager.getLogger(SoundManager.class);
+public class MusicPlayer {
+    private static final Logger log = LogManager.getLogger(MusicPlayer.class);
 
 
-    private final ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);
-    private final List<SFX> soundEffectsRunning = new ArrayList<>();
     private MediaPlayer mediaPlayer;
 
-    private final boolean stopLoop = false;
-    private List<Path> walkingSFXPaths;
+
 
     //Todo Make music play
-    public void playMusic(MusicType musicType) throws IOException {
+    public void playGameMusic(MusicType musicType) throws IOException {
         Path pathTypeOfMusic = Paths.get(musicType.getPath());
         List<Path> musicPaths = getFilePathsFromResources(pathTypeOfMusic);
-        Random random = new Random();
-        int min = 0;
-        int max = musicPaths.size() - 1;
-        int randomIndex = random.nextInt(max - min + 1 ) + min;
-        String randomMusic = musicPaths.get(randomIndex).toString();
-        String normalizedPath = Paths.get(randomMusic).toString().replace('\\', '/');
-        String resource = normalizedPath.substring(18);
-        log.info(resource);
+        String randomPath = getRandomFilePath(musicPaths);
+        String resource = convertPathToResourcePath(randomPath);
+        playMusicLoop(resource);
+    }
+
+    protected void playMusicLoop(String path ){
         Thread thread = new Thread(() -> {
-            Media media = new Media(getClass().getResource(resource).toExternalForm());
+            Media media = new Media(getClass().getResource(path).toExternalForm());
             mediaPlayer = new MediaPlayer(media);
             mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
             mediaPlayer.play();
             log.info("Music is playing");
-
         });
         thread.setDaemon(true);
         thread.start();
     }
 
+    public void setVolume(int volume){
+        mediaPlayer.setVolume(volume / 100);
+    }
+
+    public int getVolume(){
+        return (int) mediaPlayer.getVolume() * 100;
+    }
+
     public void stopMusic(){
         if (mediaPlayer != null) {
             mediaPlayer.dispose(); // Dispose of the MediaPlayer instance
         }
     }
 
-    @Override
-    public void playSoundEffect() throws InterruptedException, MalformedURLException {
-
-    }
-
-
-
-    public List<Path> getFilePathsFromResources(Path folderPath) throws IOException {
+    protected List<Path> getFilePathsFromResources(Path folderPath) throws IOException {
         List<Path> result;
         try (Stream<Path> walk = Files.walk(folderPath)) {
             result = walk.filter(Files::isRegularFile)
@@ -82,4 +68,18 @@ public class SoundManager implements ISoundManager {
         return result;
     }
 
+    protected String getRandomFilePath(List<Path> paths){
+        Random random = new Random();
+        int min = 0;
+        int max = paths.size() - 1;
+        int randomIndex = random.nextInt(max - min + 1 ) + min;
+        String randomPath = paths.get(randomIndex).toString();
+        return randomPath;
+    }
+    protected String convertPathToResourcePath(String randomPath){
+        String normalizedPath = Paths.get(randomPath).toString().replace('\\', '/');
+        String resource = normalizedPath.substring(18); //18 = Begins at a at resourceFolder Level
+        return resource;
+    }
+
 }
-- 
GitLab