From 21763851e88533df454335147ee017f4bc2b34bc Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Tue, 30 Sep 2025 23:42:56 +0200 Subject: [PATCH] Made AssetManager be Thread safe. --- .../toop/framework/asset/AssetManager.java | 35 ++++++++++++------- .../toop/framework/audio/SoundManager.java | 3 +- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/framework/src/main/java/org/toop/framework/asset/AssetManager.java b/framework/src/main/java/org/toop/framework/asset/AssetManager.java index d5562ff..620cbeb 100644 --- a/framework/src/main/java/org/toop/framework/asset/AssetManager.java +++ b/framework/src/main/java/org/toop/framework/asset/AssetManager.java @@ -2,15 +2,12 @@ package org.toop.framework.asset; import org.toop.framework.asset.resources.*; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.UnsupportedAudioFileException; -import java.io.File; -import java.io.IOException; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class AssetManager { private static final AssetManager INSTANCE = new AssetManager(); - private static final Map> assets = new HashMap<>(); + private static final Map> assets = new ConcurrentHashMap<>(); private AssetManager() {} @@ -18,13 +15,13 @@ public class AssetManager { return INSTANCE; } - public static void loadAssets(AssetLoader loader) { + public synchronized static void loadAssets(AssetLoader loader) { for (var asset : loader.getAssets()) { assets.put(asset.getName(), asset); } } - public ArrayList> getAllOfType(Class type) { + public static ArrayList> getAllOfType(Class type) { ArrayList> list = new ArrayList<>(); for (Asset asset : assets.values()) { // <-- use .values() if (type.isInstance(asset.getResource())) { @@ -36,13 +33,25 @@ public class AssetManager { return list; } - public static Asset getById(String guid) { - return assets.get(guid); + public Asset getById(String id) { + for (Asset asset : assets.values()) { + if (asset.getId().toString().equals(id)) { + return asset; + } + } + return null; } - public static Optional> findByName(String name) { - return assets.values().stream() - .filter(a -> a.getName().equals(name)) - .findFirst(); + public Asset getByName(String name) { + return assets.get(name); } + + public Optional> findByName(String name) { + return Optional.ofNullable(assets.get(name)); + } + + public void addAsset(Asset asset) { + assets.put(asset.getName(), asset); + } + } \ No newline at end of file diff --git a/framework/src/main/java/org/toop/framework/audio/SoundManager.java b/framework/src/main/java/org/toop/framework/audio/SoundManager.java index b0304a6..e4155cb 100644 --- a/framework/src/main/java/org/toop/framework/audio/SoundManager.java +++ b/framework/src/main/java/org/toop/framework/audio/SoundManager.java @@ -12,14 +12,13 @@ import java.util.*; import javax.sound.sampled.*; public class SoundManager { - private final AssetManager asm = AssetManager.getInstance(); private final Map activeClips = new HashMap<>(); private final HashMap audioResources = new HashMap<>(); private final SnowflakeGenerator idGenerator = new SnowflakeGenerator(); // TODO: Don't create a new generator public SoundManager() { // Get all Audio Resources and add them to a list. - for (Asset asset : asm.getAllOfType(AudioAsset.class)) { + for (Asset asset : AssetManager.getAllOfType(AudioAsset.class)) { try { this.addAudioResource(asset); } catch (IOException | LineUnavailableException | UnsupportedAudioFileException e) {