SoundEffectManager now generic

This commit is contained in:
lieght
2025-10-13 02:27:04 +02:00
parent cdc34b432e
commit fcc0b9d0dd
7 changed files with 32 additions and 14 deletions

View File

@@ -22,7 +22,7 @@ public final class Main {
new Thread(NetworkingClientManager::new).start();
new Thread(() -> {
MusicManager<MusicAsset> musicManager = new MusicManager<>(MusicAsset.class);
SoundEffectManager soundEffectManager = new SoundEffectManager();
SoundEffectManager<SoundEffectAsset> 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();
}
}

View File

@@ -22,7 +22,7 @@ public class AudioEventListener<T extends AudioResource, K extends AudioResource
this.audioVolumeManager = audioVolumeManager;
}
public AudioEventListener<?, ?> initListeners() {
public AudioEventListener<?, ?> initListeners(String buttonSoundToPlay) {
new EventFlow()
.listen(this::handleStopMusicManager)
.listen(this::handlePlaySound)
@@ -31,7 +31,7 @@ public class AudioEventListener<T extends AudioResource, K extends AudioResource
.listen(this::handleVolumeChange)
.listen(this::handleGetVolume)
.listen(AudioEvents.ClickButton.class, _ ->
soundEffectManager.play("medium-button-click.wav", false));
soundEffectManager.play(buttonSoundToPlay, false));
return this;
}

View File

@@ -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<SoundEffectAsset> {
public class SoundEffectManager<T extends AudioResource> implements org.toop.framework.audio.interfaces.SoundEffectManager<T> {
private static final Logger logger = LogManager.getLogger(SoundEffectManager.class);
private final HashMap<String, SoundEffectAsset> soundEffectResources;
private final HashMap<String, T> soundEffectResources;
public SoundEffectManager(){
public SoundEffectManager(Class<T> 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<String, T>) ResourceManager
.getAllOfType((Class<? extends BaseResource>) type)
.stream()
.collect(Collectors.
toMap(ResourceMeta::getName, ResourceMeta::getResource, (a, b) -> b, HashMap::new));
}
@Override
public Collection<SoundEffectAsset> getActiveAudio() {
public Collection<T> 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());
}
}

View File

@@ -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);

View File

@@ -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

View File

@@ -1,6 +1,7 @@
package org.toop.framework.resource.types;
public interface AudioResource {
String getName();
void updateVolume(double volume);
// boolean isPlaying();
void play();

View File

@@ -34,6 +34,11 @@ class MockAudioResource extends BaseResource implements AudioResource {
}
}
@Override
public String getName() {
return super.getFile().getName();
}
@Override
public void play() {
played = true;