From bb586d4d2c3fea7d4a25f85b1bfe7817bcea58ca Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 1 May 2022 12:57:32 -0400 Subject: [PATCH] AudioClip caching + cleanup --- NewHorizons/Builder/Props/SignalBuilder.cs | 2 +- NewHorizons/Main.cs | 1 + .../{AudioUtility.cs => AudioUtilities.cs} | 26 ++++++++++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) rename NewHorizons/Utility/{AudioUtility.cs => AudioUtilities.cs} (63%) diff --git a/NewHorizons/Builder/Props/SignalBuilder.cs b/NewHorizons/Builder/Props/SignalBuilder.cs index d95e775c..d34ca03b 100644 --- a/NewHorizons/Builder/Props/SignalBuilder.cs +++ b/NewHorizons/Builder/Props/SignalBuilder.cs @@ -161,7 +161,7 @@ namespace NewHorizons.Builder.Props { try { - clip = AudioUtility.LoadAudio(mod.ModHelper.Manifest.ModFolderPath + "/" + info.AudioFilePath); + clip = AudioUtilities.LoadAudio(mod.ModHelper.Manifest.ModFolderPath + "/" + info.AudioFilePath); } catch(Exception e) { diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 79687d44..00da82da 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -136,6 +136,7 @@ namespace NewHorizons SearchUtilities.ClearCache(); ImageUtilities.ClearCache(); + AudioUtilities.ClearCache(); _isChangingStarSystem = false; diff --git a/NewHorizons/Utility/AudioUtility.cs b/NewHorizons/Utility/AudioUtilities.cs similarity index 63% rename from NewHorizons/Utility/AudioUtility.cs rename to NewHorizons/Utility/AudioUtilities.cs index d33d27a9..55486172 100644 --- a/NewHorizons/Utility/AudioUtility.cs +++ b/NewHorizons/Utility/AudioUtilities.cs @@ -9,18 +9,36 @@ using UnityEngine.Networking; namespace NewHorizons.Utility { - public static class AudioUtility + public static class AudioUtilities { - public static AudioClip LoadAudio(string filePath) + private static Dictionary _loadedAudioClips = new Dictionary(); + + public static AudioClip LoadAudio(string path) { - var task = Task.Run(async () => await GetAudioClip(filePath)); + if (_loadedAudioClips.ContainsKey(path)) + { + Logger.Log($"Already loaded audio at path: {path}"); + return _loadedAudioClips[path]; + } + Logger.Log($"Loading audio at path: {path}"); + var task = Task.Run(async () => await GetAudioClip(path)); task.Wait(); + _loadedAudioClips.Add(path, task.Result); return task.Result; } + public static void ClearCache() + { + foreach (var audioClip in _loadedAudioClips.Values) + { + if (audioClip == null) continue; + UnityEngine.Object.Destroy(audioClip); + } + _loadedAudioClips.Clear(); + } + private static async Task GetAudioClip(string filePath) { - var extension = filePath.Split(new char[] { '.' }).Last(); UnityEngine.AudioType audioType;