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