55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
namespace DarkTonic.MasterAudio
|
|
{
|
|
public static class AudioPrioritizer
|
|
{
|
|
private const int MaxPriority = 0;
|
|
|
|
private const int HighestPriority = 16;
|
|
|
|
private const int LowestPriority = 128;
|
|
|
|
public static void Set2DSoundPriority(AudioSource audio)
|
|
{
|
|
audio.priority = 16;
|
|
}
|
|
|
|
public static void SetSoundGroupInitialPriority(AudioSource audio)
|
|
{
|
|
audio.priority = 128;
|
|
}
|
|
|
|
public static void SetPreviewPriority(AudioSource audio)
|
|
{
|
|
audio.priority = 0;
|
|
}
|
|
|
|
public static void Set3DPriority(SoundGroupVariation variation, bool useClipAgePriority)
|
|
{
|
|
if (MasterAudio.ListenerTrans == null)
|
|
{
|
|
return;
|
|
}
|
|
AudioSource varAudio = variation.VarAudio;
|
|
if (varAudio.spatialBlend == 0f)
|
|
{
|
|
Set2DSoundPriority(variation.VarAudio);
|
|
return;
|
|
}
|
|
float num = Vector3.Distance(varAudio.transform.position, MasterAudio.ListenerTrans.position);
|
|
float num2 = varAudio.rolloffMode switch
|
|
{
|
|
AudioRolloffMode.Logarithmic => varAudio.volume / Mathf.Max(varAudio.minDistance, num - varAudio.minDistance),
|
|
AudioRolloffMode.Linear => Mathf.Lerp(varAudio.volume, 0f, Mathf.Max(0f, num - varAudio.minDistance) / (varAudio.maxDistance - varAudio.minDistance)),
|
|
_ => Mathf.Lerp(varAudio.volume, 0f, Mathf.Max(0f, num - varAudio.minDistance) / (varAudio.maxDistance - varAudio.minDistance)),
|
|
};
|
|
if (useClipAgePriority && !varAudio.loop)
|
|
{
|
|
num2 = Mathf.Lerp(num2, num2 * 0.1f, AudioUtil.GetAudioPlayedPercentage(varAudio) * 0.01f);
|
|
}
|
|
varAudio.priority = (int)Mathf.Lerp(16f, 128f, Mathf.InverseLerp(1f, 0f, num2));
|
|
}
|
|
}
|
|
}
|