diff --git a/pom.xml b/pom.xml index a1fe802d25b92f3c95961e9719ba2f9c6b28a779..fd49aa2d5cd023c2a8e021a3cfa1610101746843 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,18 @@ <version>19.0.2.1</version> </dependency> + <dependency> + <groupId>com.jtransc</groupId> + <artifactId>jtransc-rt</artifactId> + <version>0.5.0-ALPHA4</version> + </dependency> + + <!--<dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>4.3.24.RELEASE</version> + </dependency>--> + <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc11</artifactId> 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 10af93889fd2c6b2df87fd78b8ddcacf2adacdaf..62bcd34e24b51c14f1bfa0faf447b3fadf6c1eb6 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java @@ -1,6 +1,11 @@ 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; import javafx.fxml.FXMLLoader; import javafx.geometry.Rectangle2D; @@ -30,6 +35,7 @@ public class Main extends Application { @Override public void start(Stage stage) throws Exception { + // loading font in start() because CSS can't handle whitespace in folder names Font.loadFont(getClass().getResourceAsStream("/fonts/StarshipShadow.ttf"), 50); Font.loadFont(getClass().getResourceAsStream("/fonts/AmaticSC-Bold.ttf"), 50); @@ -53,6 +59,17 @@ public class Main extends Application { scene.getStylesheets().add(Objects.requireNonNull(this.getClass().getResource("/styles/style.css")).toExternalForm()); stage.setScene(scene); + + SoundManager soundManager = new SoundManager(); + + stage.setOnCloseRequest(event -> { + if (soundManager != null) { + soundManager.stopMusic(); + } + }); + + 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 new file mode 100644 index 0000000000000000000000000000000000000000..7f31c780e19380b4f58e02ab5a854d8b25ea2019 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java @@ -0,0 +1,16 @@ +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/MusicType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java new file mode 100644 index 0000000000000000000000000000000000000000..b7d5924e85a9559d88db4bf4a295fd235fc2aa5b --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java @@ -0,0 +1,16 @@ +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/java/de/hdm_stuttgart/battlearena/Model/Sound/SFX.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SFX.java new file mode 100644 index 0000000000000000000000000000000000000000..4c4dae812049378d829bd1a0c1d6d3504e350530 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SFX.java @@ -0,0 +1,17 @@ +package de.hdm_stuttgart.battlearena.Model.Sound; + +public enum SFX { + GRASS("/sound/sfx/steps/grass"), + STONE("/sound/sfx/steps/stone"), + COLLISION("/sound/sfx/collision"), + ATTACK("/sound/sfx/attack"); + + private String path; + SFX(String path){ + this.path = path; + } + + public String getPath(){ + return path; + } +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java new file mode 100644 index 0000000000000000000000000000000000000000..41af98775814a73c36d2b5273f29540449d2bbbb --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java @@ -0,0 +1,85 @@ +package de.hdm_stuttgart.battlearena.Model.Sound; + + +import javafx.scene.media.Media; +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); + + + 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 { + 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); + Thread thread = new Thread(() -> { + Media media = new Media(getClass().getResource(resource).toExternalForm()); + mediaPlayer = new MediaPlayer(media); + mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE); + mediaPlayer.play(); + log.info("Music is playing"); + + }); + thread.setDaemon(true); + thread.start(); + } + + 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 { + List<Path> result; + try (Stream<Path> walk = Files.walk(folderPath)) { + result = walk.filter(Files::isRegularFile) + .collect(Collectors.toList()); + } + return result; + } + +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 13a2d3efa1b86db67773ffe8dc9a1017321bae3b..7170d5f5377d9044dc83b6f3705c684f0db71786 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -3,22 +3,24 @@ module gui { requires javafx.fxml; requires javafx.media; requires org.apache.logging.log4j; + requires java.desktop; requires java.sql; requires com.google.gson; requires com.oracle.database.jdbc; requires java.naming; - - opens de.hdm_stuttgart.battlearena to javafx.fxml; opens de.hdm_stuttgart.battlearena.Controller to javafx.fxml; opens de.hdm_stuttgart.battlearena.Model.DataStorage.Classes to com.google.gson; opens de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions to com.google.gson; opens de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities to com.google.gson; + opens de.hdm_stuttgart.battlearena to javafx.fxml; + opens de.hdm_stuttgart.battlearena.Model.Sound to javafx.media; + opens de.hdm_stuttgart.battlearena.Controller.Utilities to javafx.fxml; + exports de.hdm_stuttgart.battlearena.Main; exports de.hdm_stuttgart.battlearena.Controller; exports de.hdm_stuttgart.battlearena.Model.Entity; exports de.hdm_stuttgart.battlearena.Model.Inputs; exports de.hdm_stuttgart.battlearena.Model.Map; exports de.hdm_stuttgart.battlearena.Controller.Utilities; - opens de.hdm_stuttgart.battlearena.Controller.Utilities to javafx.fxml; } \ No newline at end of file diff --git a/src/main/resources/sound/sfx/Footsteps, Human, Dirty Ground, Walk SND62078.wav b/src/main/resources/Footsteps, Human, Dirty Ground, Walk SND62078.wav similarity index 100% rename from src/main/resources/sound/sfx/Footsteps, Human, Dirty Ground, Walk SND62078.wav rename to src/main/resources/Footsteps, Human, Dirty Ground, Walk SND62078.wav diff --git a/src/main/resources/sound/music/musicPlaceholder.mp3 b/src/main/resources/sound/music/game/musicPlaceholder.mp3 similarity index 100% rename from src/main/resources/sound/music/musicPlaceholder.mp3 rename to src/main/resources/sound/music/game/musicPlaceholder.mp3 diff --git a/src/main/resources/sound/music/menu/musicPlaceholder.wav b/src/main/resources/sound/music/menu/musicPlaceholder.wav new file mode 100644 index 0000000000000000000000000000000000000000..e10258b8b48d0253ca1a3141482ee600c96d58e9 Binary files /dev/null and b/src/main/resources/sound/music/menu/musicPlaceholder.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 1.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 1.wav new file mode 100644 index 0000000000000000000000000000000000000000..fb7dc6572c0c0232ddd17049a0801d8de0ef0035 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 1.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 10.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 10.wav new file mode 100644 index 0000000000000000000000000000000000000000..7edaf5417e8f65c81092fbae60f309d0c469ae44 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 10.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 11.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 11.wav new file mode 100644 index 0000000000000000000000000000000000000000..52dbe6393a2855313ab661be65b0cfa8c85838c8 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 11.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 12.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 12.wav new file mode 100644 index 0000000000000000000000000000000000000000..24f9a5f098b6f55465cfbe41edac6324985396b2 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 12.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 13.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 13.wav new file mode 100644 index 0000000000000000000000000000000000000000..ead5ebf730e986b5300ae859cb7804d9c5025bc6 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 13.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 14.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 14.wav new file mode 100644 index 0000000000000000000000000000000000000000..128c1d579f44bace7190a3c855673eee901c98ec Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 14.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 15.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 15.wav new file mode 100644 index 0000000000000000000000000000000000000000..e2c2c54985afc50b3f3f1de45b6dd68ae8c0db00 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 15.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 16.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 16.wav new file mode 100644 index 0000000000000000000000000000000000000000..b28f00628e321a05293fa07c73503abc9cc9ec37 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 16.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 17.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 17.wav new file mode 100644 index 0000000000000000000000000000000000000000..6481be5c73f1137e3b10f8483819292d3376056b Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 17.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 18.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 18.wav new file mode 100644 index 0000000000000000000000000000000000000000..f828b12669df1b8a01a4956cc178bd0bed24243d Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 18.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 19.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 19.wav new file mode 100644 index 0000000000000000000000000000000000000000..4e2be3515c1fdfc95226033cf304f56be65a5b6c Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 19.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 2.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 2.wav new file mode 100644 index 0000000000000000000000000000000000000000..87570339d853042dd6dc4fcbd7b871ec3afcee34 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 2.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 20.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 20.wav new file mode 100644 index 0000000000000000000000000000000000000000..85a71f7d9764cae6a3220c38393336cf320cb284 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 20.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 3.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 3.wav new file mode 100644 index 0000000000000000000000000000000000000000..ba37dc8a23965323887983518a5e9274ff1938f6 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 3.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 4.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 4.wav new file mode 100644 index 0000000000000000000000000000000000000000..e3acb0eb0e6d900fa67fc2500c06be7ab0383d16 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 4.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 5.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 5.wav new file mode 100644 index 0000000000000000000000000000000000000000..dabe68f4c735ded390aa3de52d293e31ef0b4967 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 5.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 6.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 6.wav new file mode 100644 index 0000000000000000000000000000000000000000..ce9dd0eb336d5129f78ceac527e28f60f39b554f Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 6.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 7.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 7.wav new file mode 100644 index 0000000000000000000000000000000000000000..71e061472f1fddae9fbaa2ae5a186a71f078a008 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 7.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 8.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 8.wav new file mode 100644 index 0000000000000000000000000000000000000000..9b8538a47aaa357ffcbe6bc8223809584be19e2c Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 8.wav differ diff --git a/src/main/resources/sound/sfx/steps/grass/steps - Track 9.wav b/src/main/resources/sound/sfx/steps/grass/steps - Track 9.wav new file mode 100644 index 0000000000000000000000000000000000000000..6ea17cb32406c61630d7975713742719070d3ef6 Binary files /dev/null and b/src/main/resources/sound/sfx/steps/grass/steps - Track 9.wav differ