Fix some mistakes

This commit is contained in:
Nick 2024-06-18 03:29:20 -04:00
parent f91771eb99
commit b07277643e
3 changed files with 90 additions and 74 deletions

View File

@ -643,11 +643,6 @@ namespace NewHorizons.Builder.Props
modules.Add(new SlideRotationModule());
}
if (loaders.Count == 0)
{
Slide.WriteModules(modules, ref slide._modulesList, ref slide._modulesData, ref slide.lengths);
}
var count = loaders.Count;
foreach (var loader in loaders)
{

View File

@ -19,6 +19,8 @@ namespace NewHorizons.Handlers
private static AudioLibrary.AudioEntry[] _defaultLibraryEntries;
private static AudioLibrary _library;
private static bool _isSetUp;
public static void Init()
{
_customAudioTypes = new Dictionary<string, AudioType>();
@ -28,7 +30,11 @@ namespace NewHorizons.Handlers
PostInit
);
SceneManager.sceneUnloaded += SceneManager_sceneUnloaded;
if (!_isSetUp)
{
_isSetUp = true;
SceneManager.sceneUnloaded += SceneManager_sceneUnloaded;
}
}
private static void SceneManager_sceneUnloaded(Scene arg0)
@ -115,8 +121,9 @@ namespace NewHorizons.Handlers
_customAudioTypes.Add(id, audioType);
_library.audioEntries = _library.audioEntries.Append(new AudioLibrary.AudioEntry(audioType, audioClips)).ToArray(); // concat custom entries
Locator.GetAudioManager()._audioLibraryDict = _library.BuildAudioEntryDictionary();
var entry = new AudioLibrary.AudioEntry(audioType, audioClips);
_library.audioEntries = _library.audioEntries.Append(entry).ToArray();
Locator.GetAudioManager()._audioLibraryDict.Add((int)audioType, entry);
return audioType;
}

View File

@ -73,6 +73,8 @@ public static class AudioUtilities
_loadedAudioClips.Clear();
}
public static Action allLoadersComplete;
public class AsyncAudioLoader
{
public class AudioLoadedEvent : UnityEvent<AudioClip> { }
@ -101,6 +103,8 @@ public static class AudioUtilities
{
public static SingletonAudioLoader Instance { get; private set; }
public int loadingCount = 0;
public void Awake()
{
Instance = this;
@ -110,10 +114,12 @@ public static class AudioUtilities
private void OnSceneUnloaded(Scene _)
{
StopAllCoroutines();
loadingCount = 0;
}
public void Load(AsyncAudioLoader loader)
{
loadingCount++;
StartCoroutine(GetAudioClip(loader));
}
@ -128,85 +134,93 @@ public static class AudioUtilities
{
NHLogger.LogVerbose($"Already loaded audio at path: {path}");
loader.audioLoadedEvent?.Invoke(_loadedAudioClips[path]);
yield break;
}
var extension = Path.GetExtension(path);
UnityEngine.AudioType audioType;
switch (extension)
{
case ".wav":
audioType = UnityEngine.AudioType.WAV;
break;
case ".ogg":
audioType = UnityEngine.AudioType.OGGVORBIS;
break;
case ".mp3":
audioType = UnityEngine.AudioType.MPEG;
break;
default:
throw new Exception($"Couldn't load Audio at {path} : Invalid audio file extension ({extension}) must be .wav or .ogg or .mp3");
}
path = $"file:///{path.Replace("+", "%2B")}";
if (audioType == UnityEngine.AudioType.MPEG)
{
DownloadHandlerAudioClip dh = new DownloadHandlerAudioClip(path, UnityEngine.AudioType.MPEG);
dh.compressed = true;
using UnityWebRequest www = new UnityWebRequest(path, "GET", dh, null);
yield return www.SendWebRequest();
// Could have loaded in the meantime
if (_loadedAudioClips.ContainsKey(path))
{
NHLogger.LogVerbose($"Already loaded audio at {path}");
loader.audioLoadedEvent?.Invoke(_loadedAudioClips[path]);
}
else
{
if (www.isNetworkError || www.isHttpError)
{
NHLogger.LogError($"Couldn't load Audio at {path} : {www.error}");
loader.audioLoadedEvent?.Invoke(null);
}
else
{
var audioClip = dh.audioClip;
audioClip.name = Path.GetFileNameWithoutExtension(path);
_loadedAudioClips.Add(path, audioClip);
loader.audioLoadedEvent?.Invoke(audioClip);
}
}
}
else
{
using UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(path, audioType);
yield return www.SendWebRequest();
var extension = Path.GetExtension(path);
// Could have loaded in the meantime
if (_loadedAudioClips.ContainsKey(path))
UnityEngine.AudioType audioType;
switch (extension)
{
NHLogger.LogVerbose($"Already loaded audio at {path}");
loader.audioLoadedEvent?.Invoke(_loadedAudioClips[path]);
case ".wav":
audioType = UnityEngine.AudioType.WAV;
break;
case ".ogg":
audioType = UnityEngine.AudioType.OGGVORBIS;
break;
case ".mp3":
audioType = UnityEngine.AudioType.MPEG;
break;
default:
throw new Exception($"Couldn't load Audio at {path} : Invalid audio file extension ({extension}) must be .wav or .ogg or .mp3");
}
else
path = $"file:///{path.Replace("+", "%2B")}";
if (audioType == UnityEngine.AudioType.MPEG)
{
if (www.isNetworkError || www.isHttpError)
DownloadHandlerAudioClip dh = new DownloadHandlerAudioClip(path, UnityEngine.AudioType.MPEG);
dh.compressed = true;
using UnityWebRequest www = new UnityWebRequest(path, "GET", dh, null);
yield return www.SendWebRequest();
// Could have loaded in the meantime
if (_loadedAudioClips.ContainsKey(path))
{
NHLogger.LogError($"Couldn't load Audio at {path} : {www.error}");
loader.audioLoadedEvent?.Invoke(null);
NHLogger.LogVerbose($"Already loaded audio at {path}");
loader.audioLoadedEvent?.Invoke(_loadedAudioClips[path]);
}
else
{
var audioClip = DownloadHandlerAudioClip.GetContent(www);
audioClip.name = Path.GetFileNameWithoutExtension(path);
_loadedAudioClips.Add(path, audioClip);
loader.audioLoadedEvent?.Invoke(audioClip);
if (www.isNetworkError || www.isHttpError)
{
NHLogger.LogError($"Couldn't load Audio at {path} : {www.error}");
loader.audioLoadedEvent?.Invoke(null);
}
else
{
var audioClip = dh.audioClip;
audioClip.name = Path.GetFileNameWithoutExtension(path);
_loadedAudioClips.Add(path, audioClip);
loader.audioLoadedEvent?.Invoke(audioClip);
}
}
}
else
{
using UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(path, audioType);
yield return www.SendWebRequest();
// Could have loaded in the meantime
if (_loadedAudioClips.ContainsKey(path))
{
NHLogger.LogVerbose($"Already loaded audio at {path}");
loader.audioLoadedEvent?.Invoke(_loadedAudioClips[path]);
}
else
{
if (www.isNetworkError || www.isHttpError)
{
NHLogger.LogError($"Couldn't load Audio at {path} : {www.error}");
loader.audioLoadedEvent?.Invoke(null);
}
else
{
var audioClip = DownloadHandlerAudioClip.GetContent(www);
audioClip.name = Path.GetFileNameWithoutExtension(path);
_loadedAudioClips.Add(path, audioClip);
loader.audioLoadedEvent?.Invoke(audioClip);
}
}
}
}
loadingCount--;
if (loadingCount == 0)
{
allLoadersComplete?.Invoke();
}
}
}