ccl4/blueberryPeak/Assets/Wwise/MonoBehaviour/Runtime/AkEnvironmentPortal.cs
AgentSchmisch 9144907a10 ANGST
2025-06-12 18:45:34 +02:00

103 lines
4.2 KiB
C#

#if ! (UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.
/*******************************************************************************
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
Technology released in source code form as part of the game integration package.
The content of this file may not be used without valid licenses to the
AUDIOKINETIC Wwise Technology.
Note that the use of the game engine is subject to the Unity(R) Terms of
Service at https://unity3d.com/legal/terms-of-service
License Usage
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
this file in accordance with the end user license agreement provided with the
software or, alternatively, in accordance with the terms contained
in a written agreement between you and Audiokinetic Inc.
Copyright (c) 2025 Audiokinetic Inc.
*******************************************************************************/
/// @brief Use this component to define an area that straddles two different AkEnvironment's zones and allow mixing between both zones. \ref unity_use_AkEnvironment_AkEnvironmentPortal
[UnityEngine.AddComponentMenu("Wwise/AkEnvironmentPortal")]
[UnityEngine.RequireComponent(typeof(UnityEngine.BoxCollider))]
public class AkEnvironmentPortal : UnityEngine.MonoBehaviour
{
public const int MAX_ENVIRONMENTS_PER_PORTAL = 2;
///The axis used to find the contribution of each environment
public UnityEngine.Vector3 axis = UnityEngine.Vector3.right;
///The array is already sorted by position.
///The first environment is on the negative side of the portal(opposite to the direction of the chosen axis)
///The second environment is on the positive side of the portal
public AkEnvironment[] environments = new AkEnvironment[MAX_ENVIRONMENTS_PER_PORTAL];
private UnityEngine.BoxCollider m_BoxCollider;
private UnityEngine.BoxCollider BoxCollider
{
get
{
if (!m_BoxCollider)
m_BoxCollider = GetComponent<UnityEngine.BoxCollider>();
return m_BoxCollider;
}
}
public bool EnvironmentsShareAuxBus
{
get
{
if (environments[0] == null)
return environments[1] == null;
if (environments[1] == null)
return false;
if (environments[0].data == null)
return environments[1].data == null;
if (environments[1].data == null)
return false;
return environments[0].data.Id == environments[1].data.Id;
}
}
public float GetAuxSendValueForPosition(UnityEngine.Vector3 in_position, int index)
{
//total length of the portal in the direction of axis
var portalLength = UnityEngine.Vector3.Dot(UnityEngine.Vector3.Scale(BoxCollider.size, transform.lossyScale), axis);
//transform axis to world coordinates
var axisWorld = UnityEngine.Vector3.Normalize(transform.rotation * axis);
//Get distance form left side of the portal(opposite to the direction of axis) to the game object in the direction of axisWorld
var dist = UnityEngine.Vector3.Dot(in_position - (transform.position - portalLength * 0.5f * axisWorld), axisWorld);
dist = UnityEngine.Mathf.Clamp(dist, 0, portalLength);
//calculate value of the environment referred by index
if (index == 0)
return (portalLength - dist) * (portalLength - dist) / (portalLength * portalLength);
return dist * dist / (portalLength * portalLength);
}
#if UNITY_EDITOR
/// This enables us to detect intersections between portals and environments in the editor
[System.Serializable]
public class EnvListWrapper
{
public System.Collections.Generic.List<AkEnvironment> list = new System.Collections.Generic.List<AkEnvironment>();
}
/// Unity can't serialize an array of list so we wrap the list in a serializable class
public EnvListWrapper[] envList =
{
new EnvListWrapper(), //All environments on the negative side of each portal(opposite to the direction of the chosen axis)
new EnvListWrapper() //All environments on the positive side of each portal(same direction as the chosen axis)
};
#endif
}
#endif // #if ! (UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.