Space-Smash-Out/Assets/Scripts/ManageableAudio.cs

75 lines
1.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using log4net;
using PrimeTween;
using UnityEngine;
public class ManageableAudio : MonoBehaviour
{
private static ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public int id = 0;
public string audioTag = "audio";
public AudioSource AudioSource { get; set; }
private bool IsUpdating = false;
void Awake()
{
if (gameObject.TryGetComponent(out AudioSource audioS))
{
AudioSource = audioS;
}
else
{
Log.Warn("Managable Audio Instance hasn't got an audio source game object"
+ $". Tag:{audioTag} ID:{id}");
return;
}
}
public void PlayAudio()
{
if (AudioSource == null || IsUpdating || AudioSource.isPlaying)
{
return;
}
if (!AudioSource.enabled)
{
AudioSource.enabled = true;
}
AudioSource.Play();
}
public void StopAudio()
{
if (AudioSource == null || IsUpdating)
{
return;
}
if (AudioSource.isPlaying)
{
AudioSource.Stop();
}
}
public void FadeOutAudio(float duration = 1)
{
if (IsUpdating)
{
return;
}
IsUpdating = true;
float initVolume = AudioSource.volume;
Tween.Custom(initVolume, 0, duration, onValueChange: value => AudioSource.volume = value)
.OnComplete(() =>
{
IsUpdating = false;
StopAudio();
AudioSource.volume = initVolume;
});
}
}