#if LITMOTION_SUPPORT_UNITY_AUDIO
using UnityEngine;
using UnityEngine.Audio;
namespace LitMotion.Extensions
{
///
/// Provides binding extension methods for AudioSource and AudioMixer.
///
public static class LitMotionAudioExtensions
{
///
/// Create a motion data and bind it to AudioSource.volume
///
/// The type of special parameters given to the motion data
/// The type of adapter that support value animation
/// This builder
///
/// Handle of the created motion data.
public static MotionHandle BindToVolume(this MotionBuilder builder, AudioSource audioSource)
where TOptions : unmanaged, IMotionOptions
where TAdapter : unmanaged, IMotionAdapter
{
Error.IsNull(audioSource);
return builder.BindWithState(audioSource, static (x, target) =>
{
target.volume = x;
});
}
///
/// Create a motion data and bind it to AudioSource.pitch
///
/// The type of special parameters given to the motion data
/// The type of adapter that support value animation
/// This builder
///
/// Handle of the created motion data.
public static MotionHandle BindToPitch(this MotionBuilder builder, AudioSource audioSource)
where TOptions : unmanaged, IMotionOptions
where TAdapter : unmanaged, IMotionAdapter
{
Error.IsNull(audioSource);
return builder.BindWithState(audioSource, static (x, target) =>
{
target.pitch = x;
});
}
///
/// Create a motion data and bind it to AudioMixer exposed parameter.
///
/// The type of special parameters given to the motion data
/// The type of adapter that support value animation
/// This builder
///
/// Handle of the created motion data.
public static MotionHandle BindToAudioMixerFloat(this MotionBuilder builder, AudioMixer audioMixer, string name)
where TOptions : unmanaged, IMotionOptions
where TAdapter : unmanaged, IMotionAdapter
{
Error.IsNull(audioMixer);
return builder.BindWithState(audioMixer, name, static (x, target, n) =>
{
target.SetFloat(n, x);
});
}
}
}
#endif