AudioClip caching + cleanup

This commit is contained in:
Nick 2022-05-01 12:57:32 -04:00
parent 931403566b
commit bb586d4d2c
3 changed files with 24 additions and 5 deletions

View File

@ -161,7 +161,7 @@ namespace NewHorizons.Builder.Props
{ {
try try
{ {
clip = AudioUtility.LoadAudio(mod.ModHelper.Manifest.ModFolderPath + "/" + info.AudioFilePath); clip = AudioUtilities.LoadAudio(mod.ModHelper.Manifest.ModFolderPath + "/" + info.AudioFilePath);
} }
catch(Exception e) catch(Exception e)
{ {

View File

@ -136,6 +136,7 @@ namespace NewHorizons
SearchUtilities.ClearCache(); SearchUtilities.ClearCache();
ImageUtilities.ClearCache(); ImageUtilities.ClearCache();
AudioUtilities.ClearCache();
_isChangingStarSystem = false; _isChangingStarSystem = false;

View File

@ -9,18 +9,36 @@ using UnityEngine.Networking;
namespace NewHorizons.Utility namespace NewHorizons.Utility
{ {
public static class AudioUtility public static class AudioUtilities
{ {
public static AudioClip LoadAudio(string filePath) private static Dictionary<string, AudioClip> _loadedAudioClips = new Dictionary<string, AudioClip>();
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(); task.Wait();
_loadedAudioClips.Add(path, task.Result);
return 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<AudioClip> GetAudioClip(string filePath) private static async Task<AudioClip> GetAudioClip(string filePath)
{ {
var extension = filePath.Split(new char[] { '.' }).Last(); var extension = filePath.Split(new char[] { '.' }).Last();
UnityEngine.AudioType audioType; UnityEngine.AudioType audioType;