Removed ResourceManager from AudioManagers

This commit is contained in:
lieght
2025-10-13 02:47:34 +02:00
parent fcc0b9d0dd
commit 4bcf70d4dc
4 changed files with 33 additions and 19 deletions

View File

@@ -6,10 +6,12 @@ import org.toop.framework.networking.NetworkingClientManager;
import org.toop.framework.networking.NetworkingInitializationException;
import org.toop.framework.resource.ResourceLoader;
import org.toop.framework.resource.ResourceManager;
import org.toop.framework.resource.ResourceMeta;
import org.toop.framework.resource.resources.MusicAsset;
import org.toop.framework.resource.resources.SoundEffectAsset;
import java.util.Arrays;
import java.util.List;
public final class Main {
static void main(String[] args) {
@@ -21,17 +23,20 @@ public final class Main {
ResourceManager.loadAssets(new ResourceLoader("app/src/main/resources/assets"));
new Thread(NetworkingClientManager::new).start();
new Thread(() -> {
MusicManager<MusicAsset> musicManager = new MusicManager<>(MusicAsset.class);
SoundEffectManager<SoundEffectAsset> soundEffectManager = new SoundEffectManager<>(SoundEffectAsset.class);
new AudioEventListener<>(
musicManager,
soundEffectManager,
new AudioVolumeManager()
MusicManager<MusicAsset> musicManager = new MusicManager<>(ResourceManager.getAllOfTypeAndRemoveWrapper(MusicAsset.class));
SoundEffectManager<SoundEffectAsset> soundEffectManager = new SoundEffectManager<>(ResourceManager.getAllOfType(SoundEffectAsset.class));
AudioVolumeManager audioVolumeManager = new AudioVolumeManager()
.registerManager(VolumeControl.MASTERVOLUME, musicManager)
.registerManager(VolumeControl.MASTERVOLUME, soundEffectManager)
.registerManager(VolumeControl.FX, soundEffectManager)
.registerManager(VolumeControl.MUSIC, musicManager)
.registerManager(VolumeControl.MUSIC, musicManager);
new AudioEventListener<>(
musicManager,
soundEffectManager,
audioVolumeManager
).initListeners("medium-button-click.wav");
}).start();
}
}

View File

@@ -20,12 +20,9 @@ public class MusicManager<T extends AudioResource> implements org.toop.framework
private int playingIndex = 0;
private boolean playing = false;
public MusicManager(Class<T> type) {
public MusicManager(List<T> resources) {
this.dispatcher = new JavaFXDispatcher();
this.resources = new ArrayList<>(ResourceManager.getAllOfType((Class<? extends BaseResource>) type)
.stream()
.map(e -> (T) e.getResource())
.toList());
this.resources = resources;
createShuffled();
}

View File

@@ -21,10 +21,9 @@ public class SoundEffectManager<T extends AudioResource> implements org.toop.fra
private static final Logger logger = LogManager.getLogger(SoundEffectManager.class);
private final HashMap<String, T> soundEffectResources;
public SoundEffectManager(Class<T> type){
public <K extends BaseResource & AudioResource> SoundEffectManager(List<ResourceMeta<K>> resources) {
// If there are duplicates, takes discards the first
soundEffectResources = (HashMap<String, T>) ResourceManager
.getAllOfType((Class<? extends BaseResource>) type)
this.soundEffectResources = (HashMap<String, T>) resources
.stream()
.collect(Collectors.
toMap(ResourceMeta::getName, ResourceMeta::getResource, (a, b) -> b, HashMap::new));

View File

@@ -119,6 +119,19 @@ public class ResourceManager {
return result;
}
public static <T extends BaseResource> List<T> getAllOfTypeAndRemoveWrapper(Class<T> type) {
List<T> result = new ArrayList<>();
for (ResourceMeta<? extends BaseResource> meta : assets.values()) {
BaseResource res = meta.getResource();
if (type.isInstance(res)) {
result.add((T) res);
}
}
return result;
}
/**
* Retrieve an asset by its unique ID.
*