mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-16 16:34:41 +01:00
98 lines
2.3 KiB
C#
98 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using UnityEngine;
|
|
|
|
public static class AkBankManager
|
|
{
|
|
private static Dictionary<string, AkBankHandle> m_BankHandles = new Dictionary<string, AkBankHandle>();
|
|
|
|
public static List<uint> BanksToUnload = new List<uint>();
|
|
|
|
private static Mutex m_Mutex = new Mutex();
|
|
|
|
public static void DoUnloadBanks()
|
|
{
|
|
for (int i = 0; i < BanksToUnload.Count; i++)
|
|
{
|
|
uint in_bankID = BanksToUnload[i];
|
|
AkSoundEngine.UnloadBank(in_bankID, IntPtr.Zero, null, null);
|
|
}
|
|
BanksToUnload.Clear();
|
|
}
|
|
|
|
public static void Reset()
|
|
{
|
|
m_BankHandles.Clear();
|
|
BanksToUnload.Clear();
|
|
}
|
|
|
|
public static void GlobalBankCallback(uint in_bankID, IntPtr in_pInMemoryBankPtr, AKRESULT in_eLoadResult, uint in_memPoolId, object in_Cookie)
|
|
{
|
|
m_Mutex.WaitOne();
|
|
AkBankHandle akBankHandle = (AkBankHandle)in_Cookie;
|
|
AkCallbackManager.BankCallback bankCallback = akBankHandle.bankCallback;
|
|
if (in_eLoadResult != AKRESULT.AK_Success)
|
|
{
|
|
Debug.LogWarning("WwiseUnity: Bank " + akBankHandle.bankName + " failed to load (" + in_eLoadResult.ToString() + ")");
|
|
m_BankHandles.Remove(akBankHandle.bankName);
|
|
}
|
|
m_Mutex.ReleaseMutex();
|
|
if (bankCallback != null)
|
|
{
|
|
bankCallback(in_bankID, in_pInMemoryBankPtr, in_eLoadResult, in_memPoolId, null);
|
|
}
|
|
}
|
|
|
|
public static void LoadBank(string name)
|
|
{
|
|
m_Mutex.WaitOne();
|
|
AkBankHandle value = null;
|
|
if (!m_BankHandles.TryGetValue(name, out value))
|
|
{
|
|
value = new AkBankHandle(name);
|
|
m_BankHandles.Add(name, value);
|
|
m_Mutex.ReleaseMutex();
|
|
value.LoadBank();
|
|
}
|
|
else
|
|
{
|
|
value.IncRef();
|
|
m_Mutex.ReleaseMutex();
|
|
}
|
|
}
|
|
|
|
public static void LoadBankAsync(string name, AkCallbackManager.BankCallback callback = null)
|
|
{
|
|
m_Mutex.WaitOne();
|
|
AkBankHandle value = null;
|
|
if (!m_BankHandles.TryGetValue(name, out value))
|
|
{
|
|
value = new AkBankHandle(name);
|
|
m_BankHandles.Add(name, value);
|
|
m_Mutex.ReleaseMutex();
|
|
value.LoadBankAsync(callback);
|
|
}
|
|
else
|
|
{
|
|
value.IncRef();
|
|
m_Mutex.ReleaseMutex();
|
|
}
|
|
}
|
|
|
|
public static void UnloadBank(string name)
|
|
{
|
|
m_Mutex.WaitOne();
|
|
AkBankHandle value = null;
|
|
if (m_BankHandles.TryGetValue(name, out value))
|
|
{
|
|
value.DecRef();
|
|
if (value.RefCount == 0)
|
|
{
|
|
m_BankHandles.Remove(name);
|
|
}
|
|
}
|
|
m_Mutex.ReleaseMutex();
|
|
}
|
|
}
|