diff --git a/app/src/main/java/org/toop/Main.java b/app/src/main/java/org/toop/Main.java index bb903b6..987ae17 100644 --- a/app/src/main/java/org/toop/Main.java +++ b/app/src/main/java/org/toop/Main.java @@ -22,7 +22,7 @@ public final class Main { new Thread(NetworkingClientManager::new).start(); new Thread(() -> { MusicManager musicManager = new MusicManager<>(MusicAsset.class); - SoundEffectManager soundEffectManager = new SoundEffectManager(); + SoundEffectManager soundEffectManager = new SoundEffectManager<>(SoundEffectAsset.class); new AudioEventListener<>( musicManager, soundEffectManager, @@ -31,7 +31,7 @@ public final class Main { .registerManager(VolumeControl.MASTERVOLUME, soundEffectManager) .registerManager(VolumeControl.FX, soundEffectManager) .registerManager(VolumeControl.MUSIC, musicManager) - ).initListeners(); + ).initListeners("medium-button-click.wav"); }).start(); } } diff --git a/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java b/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java index 98f801d..6245249 100644 --- a/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java +++ b/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java @@ -22,7 +22,7 @@ public class AudioEventListener initListeners() { + public AudioEventListener initListeners(String buttonSoundToPlay) { new EventFlow() .listen(this::handleStopMusicManager) .listen(this::handlePlaySound) @@ -31,7 +31,7 @@ public class AudioEventListener - soundEffectManager.play("medium-button-click.wav", false)); + soundEffectManager.play(buttonSoundToPlay, false)); return this; } diff --git a/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java b/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java index ad9b8a9..7a2d0c5 100644 --- a/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java +++ b/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java @@ -7,6 +7,7 @@ import org.toop.framework.resource.ResourceMeta; import org.toop.framework.resource.resources.BaseResource; import org.toop.framework.resource.resources.MusicAsset; import org.toop.framework.resource.resources.SoundEffectAsset; +import org.toop.framework.resource.types.AudioResource; import javax.sound.sampled.Clip; import javax.sound.sampled.LineEvent; @@ -16,25 +17,28 @@ import java.io.IOException; import java.util.*; import java.util.stream.Collectors; -public class SoundEffectManager implements org.toop.framework.audio.interfaces.SoundEffectManager { +public class SoundEffectManager implements org.toop.framework.audio.interfaces.SoundEffectManager { private static final Logger logger = LogManager.getLogger(SoundEffectManager.class); - private final HashMap soundEffectResources; + private final HashMap soundEffectResources; - public SoundEffectManager(){ + public SoundEffectManager(Class type){ // If there are duplicates, takes discards the first - soundEffectResources = ResourceManager.getAllOfType(SoundEffectAsset.class).stream() - .collect(Collectors.toMap(ResourceMeta::getName, ResourceMeta::getResource, (a, b) -> b, HashMap::new)); + soundEffectResources = (HashMap) ResourceManager + .getAllOfType((Class) type) + .stream() + .collect(Collectors. + toMap(ResourceMeta::getName, ResourceMeta::getResource, (a, b) -> b, HashMap::new)); } @Override - public Collection getActiveAudio() { + public Collection getActiveAudio() { return this.soundEffectResources.values(); } @Override public void play(String name, boolean loop) { - SoundEffectAsset asset = soundEffectResources.get(name); + T asset = soundEffectResources.get(name); if (asset == null) { logger.warn("Unable to load audio asset: {}", name); @@ -43,12 +47,12 @@ public class SoundEffectManager implements org.toop.framework.audio.interfaces.S asset.play(); - logger.debug("Playing sound: {}", asset.getFile().getName()); + logger.debug("Playing sound: {}", asset.getName()); } @Override public void stop(String name){ - SoundEffectAsset asset = soundEffectResources.get(name); + T asset = soundEffectResources.get(name); if (asset == null) { logger.warn("Unable to load audio asset: {}", name); @@ -57,6 +61,6 @@ public class SoundEffectManager implements org.toop.framework.audio.interfaces.S asset.stop(); - logger.debug("Stopped sound: {}", asset.getFile().getName()); + logger.debug("Stopped sound: {}", asset.getName()); } } diff --git a/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java index 6cd2792..31e580f 100644 --- a/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java +++ b/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java @@ -60,6 +60,9 @@ public class MusicAsset extends BaseResource implements LoadableResource, AudioR this.volume = volume; } + @Override + public String getName() { return super.getFile().getName(); } + @Override public void setOnEnd(Runnable run) { mediaPlayer.setOnEndOfMedia(run); diff --git a/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java index 9519bba..45ffd01 100644 --- a/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java +++ b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java @@ -98,6 +98,11 @@ public class SoundEffectAsset extends BaseResource implements LoadableResource, } } + @Override + public String getName() { + return this.getFile().getName(); + } + @Override public void setOnEnd(Runnable run) { // TODO diff --git a/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java b/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java index 35044bb..d150e4a 100644 --- a/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java +++ b/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java @@ -1,6 +1,7 @@ package org.toop.framework.resource.types; public interface AudioResource { + String getName(); void updateVolume(double volume); // boolean isPlaying(); void play(); diff --git a/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java b/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java index 815c401..0cd0535 100644 --- a/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java +++ b/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java @@ -34,6 +34,11 @@ class MockAudioResource extends BaseResource implements AudioResource { } } + @Override + public String getName() { + return super.getFile().getName(); + } + @Override public void play() { played = true;