#if ! (UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.
//////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2017 Audiokinetic Inc. / All Rights Reserved
//
//////////////////////////////////////////////////////////////////////
///
/// This component makes a GameObject aware of AkRoom components.
/// When using Spatial Audio rooms, all emitters and the spatial audio listener should have this component.
///
[UnityEngine.AddComponentMenu("Wwise/Spatial Audio/AkRoomAwareObject")]
[UnityEngine.RequireComponent(typeof(AkGameObj))]
[UnityEngine.DisallowMultipleComponent]
public class AkRoomAwareObject : UnityEngine.MonoBehaviour
{
private static readonly System.Collections.Generic.Dictionary ColliderToRoomAwareObjectMap = new System.Collections.Generic.Dictionary();
public static AkRoomAwareObject GetAkRoomAwareObjectFromCollider(UnityEngine.Collider collider)
{
AkRoomAwareObject roomAwareObject = null;
return ColliderToRoomAwareObjectMap.TryGetValue(collider, out roomAwareObject) ? roomAwareObject : null;
}
public UnityEngine.Collider m_Collider;
private readonly AkRoom.PriorityList roomPriorityList = new AkRoom.PriorityList();
private void Awake()
{
m_Collider = GetComponent();
if (m_Collider != null)
ColliderToRoomAwareObjectMap.Add(m_Collider, this);
}
private void OnEnable()
{
AkRoomAwareManager.RegisterRoomAwareObject(this);
for (int i = 0; i < roomPriorityList.Count; ++i)
roomPriorityList[i].TryEnter(this);
}
private void OnDisable()
{
for (int i = 0; i < roomPriorityList.Count; ++i)
roomPriorityList[i].Exit(this);
AkRoomAwareManager.UnregisterRoomAwareObject(this);
SetGameObjectInRoom(null);
}
private void OnDestroy()
{
ColliderToRoomAwareObjectMap.Remove(m_Collider);
}
public void SetGameObjectInHighestPriorityActiveAndEnabledRoom()
{
SetGameObjectInRoom(roomPriorityList.GetHighestPriorityActiveAndEnabledRoom());
}
private void SetGameObjectInRoom(AkRoom room)
{
AkSoundEngine.SetGameObjectInRoom(gameObject, AkRoom.GetAkRoomID(room));
}
///
/// Called when entering a room.
///
/// The room.
public void EnteredRoom(AkRoom room)
{
roomPriorityList.Add(room);
}
///
/// Called when exiting a room.
///
/// The room.
public void ExitedRoom(AkRoom room)
{
roomPriorityList.Remove(room);
}
}
#endif // #if ! (UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.