mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 10:54:51 +00:00
SoundEffectManager now generic
This commit is contained in:
@@ -22,7 +22,7 @@ public final class Main {
|
|||||||
new Thread(NetworkingClientManager::new).start();
|
new Thread(NetworkingClientManager::new).start();
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
MusicManager<MusicAsset> musicManager = new MusicManager<>(MusicAsset.class);
|
MusicManager<MusicAsset> musicManager = new MusicManager<>(MusicAsset.class);
|
||||||
SoundEffectManager soundEffectManager = new SoundEffectManager();
|
SoundEffectManager<SoundEffectAsset> soundEffectManager = new SoundEffectManager<>(SoundEffectAsset.class);
|
||||||
new AudioEventListener<>(
|
new AudioEventListener<>(
|
||||||
musicManager,
|
musicManager,
|
||||||
soundEffectManager,
|
soundEffectManager,
|
||||||
@@ -31,7 +31,7 @@ public final class Main {
|
|||||||
.registerManager(VolumeControl.MASTERVOLUME, soundEffectManager)
|
.registerManager(VolumeControl.MASTERVOLUME, soundEffectManager)
|
||||||
.registerManager(VolumeControl.FX, soundEffectManager)
|
.registerManager(VolumeControl.FX, soundEffectManager)
|
||||||
.registerManager(VolumeControl.MUSIC, musicManager)
|
.registerManager(VolumeControl.MUSIC, musicManager)
|
||||||
).initListeners();
|
).initListeners("medium-button-click.wav");
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class AudioEventListener<T extends AudioResource, K extends AudioResource
|
|||||||
this.audioVolumeManager = audioVolumeManager;
|
this.audioVolumeManager = audioVolumeManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AudioEventListener<?, ?> initListeners() {
|
public AudioEventListener<?, ?> initListeners(String buttonSoundToPlay) {
|
||||||
new EventFlow()
|
new EventFlow()
|
||||||
.listen(this::handleStopMusicManager)
|
.listen(this::handleStopMusicManager)
|
||||||
.listen(this::handlePlaySound)
|
.listen(this::handlePlaySound)
|
||||||
@@ -31,7 +31,7 @@ public class AudioEventListener<T extends AudioResource, K extends AudioResource
|
|||||||
.listen(this::handleVolumeChange)
|
.listen(this::handleVolumeChange)
|
||||||
.listen(this::handleGetVolume)
|
.listen(this::handleGetVolume)
|
||||||
.listen(AudioEvents.ClickButton.class, _ ->
|
.listen(AudioEvents.ClickButton.class, _ ->
|
||||||
soundEffectManager.play("medium-button-click.wav", false));
|
soundEffectManager.play(buttonSoundToPlay, false));
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.toop.framework.resource.ResourceMeta;
|
|||||||
import org.toop.framework.resource.resources.BaseResource;
|
import org.toop.framework.resource.resources.BaseResource;
|
||||||
import org.toop.framework.resource.resources.MusicAsset;
|
import org.toop.framework.resource.resources.MusicAsset;
|
||||||
import org.toop.framework.resource.resources.SoundEffectAsset;
|
import org.toop.framework.resource.resources.SoundEffectAsset;
|
||||||
|
import org.toop.framework.resource.types.AudioResource;
|
||||||
|
|
||||||
import javax.sound.sampled.Clip;
|
import javax.sound.sampled.Clip;
|
||||||
import javax.sound.sampled.LineEvent;
|
import javax.sound.sampled.LineEvent;
|
||||||
@@ -16,25 +17,28 @@ import java.io.IOException;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
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 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
|
// If there are duplicates, takes discards the first
|
||||||
soundEffectResources = ResourceManager.getAllOfType(SoundEffectAsset.class).stream()
|
soundEffectResources = (HashMap<String, T>) ResourceManager
|
||||||
.collect(Collectors.toMap(ResourceMeta::getName, ResourceMeta::getResource, (a, b) -> b, HashMap::new));
|
.getAllOfType((Class<? extends BaseResource>) type)
|
||||||
|
.stream()
|
||||||
|
.collect(Collectors.
|
||||||
|
toMap(ResourceMeta::getName, ResourceMeta::getResource, (a, b) -> b, HashMap::new));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<SoundEffectAsset> getActiveAudio() {
|
public Collection<T> getActiveAudio() {
|
||||||
return this.soundEffectResources.values();
|
return this.soundEffectResources.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void play(String name, boolean loop) {
|
public void play(String name, boolean loop) {
|
||||||
SoundEffectAsset asset = soundEffectResources.get(name);
|
T asset = soundEffectResources.get(name);
|
||||||
|
|
||||||
if (asset == null) {
|
if (asset == null) {
|
||||||
logger.warn("Unable to load audio asset: {}", name);
|
logger.warn("Unable to load audio asset: {}", name);
|
||||||
@@ -43,12 +47,12 @@ public class SoundEffectManager implements org.toop.framework.audio.interfaces.S
|
|||||||
|
|
||||||
asset.play();
|
asset.play();
|
||||||
|
|
||||||
logger.debug("Playing sound: {}", asset.getFile().getName());
|
logger.debug("Playing sound: {}", asset.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop(String name){
|
public void stop(String name){
|
||||||
SoundEffectAsset asset = soundEffectResources.get(name);
|
T asset = soundEffectResources.get(name);
|
||||||
|
|
||||||
if (asset == null) {
|
if (asset == null) {
|
||||||
logger.warn("Unable to load audio asset: {}", name);
|
logger.warn("Unable to load audio asset: {}", name);
|
||||||
@@ -57,6 +61,6 @@ public class SoundEffectManager implements org.toop.framework.audio.interfaces.S
|
|||||||
|
|
||||||
asset.stop();
|
asset.stop();
|
||||||
|
|
||||||
logger.debug("Stopped sound: {}", asset.getFile().getName());
|
logger.debug("Stopped sound: {}", asset.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,9 @@ public class MusicAsset extends BaseResource implements LoadableResource, AudioR
|
|||||||
this.volume = volume;
|
this.volume = volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return super.getFile().getName(); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnEnd(Runnable run) {
|
public void setOnEnd(Runnable run) {
|
||||||
mediaPlayer.setOnEndOfMedia(run);
|
mediaPlayer.setOnEndOfMedia(run);
|
||||||
|
|||||||
@@ -98,6 +98,11 @@ public class SoundEffectAsset extends BaseResource implements LoadableResource,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return this.getFile().getName();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnEnd(Runnable run) {
|
public void setOnEnd(Runnable run) {
|
||||||
// TODO
|
// TODO
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.toop.framework.resource.types;
|
package org.toop.framework.resource.types;
|
||||||
|
|
||||||
public interface AudioResource {
|
public interface AudioResource {
|
||||||
|
String getName();
|
||||||
void updateVolume(double volume);
|
void updateVolume(double volume);
|
||||||
// boolean isPlaying();
|
// boolean isPlaying();
|
||||||
void play();
|
void play();
|
||||||
|
|||||||
@@ -34,6 +34,11 @@ class MockAudioResource extends BaseResource implements AudioResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return super.getFile().getName();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void play() {
|
public void play() {
|
||||||
played = true;
|
played = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user