111 lines
3.2 KiB
C#
111 lines
3.2 KiB
C#
using OctoberStudio.Extensions;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace OctoberStudio.Audio
|
|
{
|
|
[CreateAssetMenu(fileName = "Audio Database", menuName = "October/Audio Database")]
|
|
public class AudioDatabase : ScriptableObject
|
|
{
|
|
[SerializeField] List<SoundContainer> sounds;
|
|
public List<SoundContainer> Sounds => sounds;
|
|
|
|
[Header("Music (Obsolete. Use Sounds instead)")]
|
|
[Tooltip("This value is obsolete and will be deprecated. Use sounds instead")]
|
|
[SerializeField] SoundContainer music;
|
|
|
|
[System.Obsolete("This Property is obsolete and will be deprecated. Use sounds instead")]
|
|
public SoundContainer Music => music;
|
|
|
|
public void Init()
|
|
{
|
|
if(music != null) music.Init();
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class SoundContainer
|
|
{
|
|
[SerializeField] string name;
|
|
public string Name => name;
|
|
|
|
[Tooltip("The minimum interval between sounds")]
|
|
[FormerlySerializedAs("coodlown")]
|
|
[SerializeField, Range(0, 1f)] float cooldown;
|
|
|
|
[SerializeField] AudioClipData audioClip;
|
|
|
|
private float lastTimePlayed;
|
|
|
|
public void Init()
|
|
{
|
|
lastTimePlayed = -1;
|
|
}
|
|
|
|
public AudioSource Play(bool music = false, float volume = 1, float pitch = 1)
|
|
{
|
|
if(cooldown == 0 || Time.unscaledTime > lastTimePlayed + cooldown)
|
|
{
|
|
lastTimePlayed = Time.unscaledTime;
|
|
|
|
if (music)
|
|
{
|
|
return GameController.AudioManager.PlayMusic(audioClip);
|
|
}
|
|
else
|
|
{
|
|
return GameController.AudioManager.PlaySound(audioClip, volume, pitch);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class SoundsContainer
|
|
{
|
|
[Tooltip("The minimum interval between sounds")]
|
|
[FormerlySerializedAs("coodlown")]
|
|
[SerializeField, Range(0, 1f)] float cooldown;
|
|
|
|
[SerializeField] List<AudioClipData> audioClips;
|
|
|
|
private float lastTimePlayed;
|
|
|
|
public void Init()
|
|
{
|
|
lastTimePlayed = -1;
|
|
}
|
|
|
|
public void Play(bool music = false)
|
|
{
|
|
if (lastTimePlayed == 0 || Time.unscaledTime > lastTimePlayed + cooldown)
|
|
{
|
|
var audioClip = audioClips.Random();
|
|
if(music)
|
|
{
|
|
GameController.AudioManager.PlayMusic(audioClip);
|
|
} else
|
|
{
|
|
GameController.AudioManager.PlaySound(audioClip);
|
|
}
|
|
lastTimePlayed = Time.unscaledTime;
|
|
}
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class AudioClipData
|
|
{
|
|
[SerializeField] AudioClip audioClip;
|
|
public AudioClip AudioClip => audioClip;
|
|
|
|
[SerializeField] Vector2 volume = Vector2.one;
|
|
public float Volume => Random.Range(volume.x, volume.y);
|
|
|
|
[SerializeField] Vector2 pitch = Vector2.one;
|
|
public float Pitch => Random.Range(pitch.x, pitch.y);
|
|
}
|
|
} |