/*! \cond PRIVATE */
using UnityEngine;
using System.Collections.Generic;
using System;
namespace DarkTonic.MasterAudio {
///
/// This class will handle unloading and load audio data for Audio Clips that have "Preload Audio Data" turned off.
///
// ReSharper disable once CheckNamespace
public static class AudioLoaderOptimizer {
private static readonly Dictionary> PlayingGameObjectsByClipName = new Dictionary>(StringComparer.OrdinalIgnoreCase);
public static void AddNonPreloadedPlayingClip(AudioClip clip, GameObject maHolderGameObject) {
if (clip == null) {
return;
}
var clipName = clip.CachedName();
if (!PlayingGameObjectsByClipName.ContainsKey(clipName)) {
PlayingGameObjectsByClipName.Add(clipName, new List { maHolderGameObject });
return;
}
var gameObjects = PlayingGameObjectsByClipName[clipName];
if (gameObjects.Contains(maHolderGameObject)) {
return; // already added before somehow
}
gameObjects.Add(maHolderGameObject);
}
public static void RemoveNonPreloadedPlayingClip(AudioClip clip, GameObject maHolderGameObject) {
if (clip == null) {
return;
}
var clipName = clip.CachedName();
if (!PlayingGameObjectsByClipName.ContainsKey(clipName)) {
return;
}
var gameObjects = PlayingGameObjectsByClipName[clipName];
gameObjects.Remove(maHolderGameObject);
if (gameObjects.Count == 0) {
PlayingGameObjectsByClipName.Remove(clipName);
}
}
public static bool IsAnyOfNonPreloadedClipPlaying(AudioClip clip) {
if (clip == null) {
return false;
}
return PlayingGameObjectsByClipName.ContainsKey(clip.CachedName());
}
}
}
/*! \endcond */