using UnityEngine;
namespace Crosstales.RTVoice.Tool
{
/// Loudspeaker for an AudioSource.
[RequireComponent(typeof(AudioSource))]
[HelpURL("https://www.crosstales.com/media/data/assets/rtvoice/api/class_crosstales_1_1_r_t_voice_1_1_tool_1_1_loudspeaker.html")]
public class Loudspeaker : MonoBehaviour
{
#region Variables
[UnityEngine.Serialization.FormerlySerializedAsAttribute("Source")] [Tooltip("Origin AudioSource."), SerializeField] private AudioSource source;
[UnityEngine.Serialization.FormerlySerializedAsAttribute("SilenceSource")] [Tooltip("Silence the origin (default: true)."), SerializeField]
private bool silenceSource = true;
private AudioSource audioSource;
private bool stopped = true;
#endregion
#region Properties
/// Origin AudioSource.
public AudioSource Source
{
get => source;
set => source = value;
}
/// Silence the origin.
public bool SilenceSource
{
get => silenceSource;
set => silenceSource = value;
}
#endregion
#region MonoBehaviour methods
private void Awake()
{
audioSource = GetComponent();
audioSource.playOnAwake = false;
audioSource.loop = false;
audioSource.Stop(); //always stop the AudioSource at startup
}
private void Start()
{
if (source == null)
Debug.LogWarning("No 'Source' added to the Loudspeaker!", this);
}
private void Update()
{
if (Util.Helper.hasActiveClip(source))
{
if (stopped)
{
audioSource.loop = source.loop;
audioSource.clip = source.clip;
audioSource.Play();
stopped = false;
if (silenceSource)
source.volume = 0f;
}
}
else
{
if (!stopped)
{
audioSource.Stop();
audioSource.clip = null;
stopped = true;
}
}
}
public void OnDisable()
{
audioSource.Stop();
audioSource.clip = null;
stopped = true;
}
#endregion
}
}
// © 2016-2020 crosstales LLC (https://www.crosstales.com)