Files
2026-03-04 10:03:45 +08:00

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));
}
}
}