You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.4 KiB
C#
61 lines
1.4 KiB
C#
namespace Projectiles
|
|
{
|
|
public static class AudioEffectExtensions
|
|
{
|
|
public static bool PlaySound(this AudioEffect[] effects, AudioSetup setup, EForceBehaviour force = EForceBehaviour.None)
|
|
{
|
|
if (effects == null)
|
|
return false;
|
|
|
|
if (setup.Clips.SafeCount() == 0)
|
|
return false;
|
|
|
|
AudioEffect bestPlayingEffect = null;
|
|
float bestTime = 0.5f;
|
|
|
|
for (int i = 0; i < effects.Length; i++)
|
|
{
|
|
var audioEffect = effects[i];
|
|
|
|
if (audioEffect.IsPlaying == false)
|
|
{
|
|
audioEffect.Play(setup);
|
|
return true;
|
|
}
|
|
|
|
bool chooseAudioEffect = false;
|
|
|
|
switch (force)
|
|
{
|
|
case EForceBehaviour.ForceDifferentSetup:
|
|
chooseAudioEffect = audioEffect.AudioSource.time > bestTime && audioEffect.CurrentSetup != setup;
|
|
break;
|
|
case EForceBehaviour.ForceSameSetup:
|
|
chooseAudioEffect = audioEffect.AudioSource.time > bestTime && audioEffect.CurrentSetup == setup;
|
|
break;
|
|
case EForceBehaviour.ForceAny:
|
|
chooseAudioEffect = audioEffect.AudioSource.time > bestTime;
|
|
break;
|
|
}
|
|
|
|
if (chooseAudioEffect == true)
|
|
{
|
|
bestPlayingEffect = audioEffect;
|
|
bestTime = audioEffect.AudioSource.time;
|
|
}
|
|
}
|
|
|
|
if (force == EForceBehaviour.None)
|
|
return false; // No free audio effect
|
|
|
|
if (bestPlayingEffect != null)
|
|
{
|
|
bestPlayingEffect.Play(setup, force);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|