83 lines
2.2 KiB
C#
83 lines
2.2 KiB
C#
|
|
using AlicizaX;
|
||
|
|
using AlicizaX.ObjectPool;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
namespace AlicizaX.Audio.Runtime
|
||
|
|
{
|
||
|
|
internal sealed class AudioSourceObject : ObjectBase
|
||
|
|
{
|
||
|
|
private AudioSource _source;
|
||
|
|
private AudioLowPassFilter _lowPassFilter;
|
||
|
|
|
||
|
|
public AudioSource Source => _source;
|
||
|
|
public AudioLowPassFilter LowPassFilter => _lowPassFilter;
|
||
|
|
|
||
|
|
public static AudioSourceObject Create(string name, AudioSource source, AudioLowPassFilter lowPassFilter)
|
||
|
|
{
|
||
|
|
if (source == null)
|
||
|
|
{
|
||
|
|
throw new GameFrameworkException("Audio source is invalid.");
|
||
|
|
}
|
||
|
|
|
||
|
|
AudioSourceObject audioSourceObject = MemoryPool.Acquire<AudioSourceObject>();
|
||
|
|
audioSourceObject.Initialize(name, source);
|
||
|
|
audioSourceObject._source = source;
|
||
|
|
audioSourceObject._lowPassFilter = lowPassFilter;
|
||
|
|
return audioSourceObject;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected internal override void OnSpawn()
|
||
|
|
{
|
||
|
|
if (_source != null)
|
||
|
|
{
|
||
|
|
_source.gameObject.SetActive(true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
protected internal override void OnUnspawn()
|
||
|
|
{
|
||
|
|
ResetSource();
|
||
|
|
if (_source != null)
|
||
|
|
{
|
||
|
|
_source.gameObject.SetActive(false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
protected internal override void Release(bool isShutdown)
|
||
|
|
{
|
||
|
|
if (_source != null)
|
||
|
|
{
|
||
|
|
Object.Destroy(_source.gameObject);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public override void Clear()
|
||
|
|
{
|
||
|
|
base.Clear();
|
||
|
|
_source = null;
|
||
|
|
_lowPassFilter = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
private void ResetSource()
|
||
|
|
{
|
||
|
|
if (_source == null)
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
_source.Stop();
|
||
|
|
_source.clip = null;
|
||
|
|
_source.loop = false;
|
||
|
|
_source.volume = 1f;
|
||
|
|
_source.pitch = 1f;
|
||
|
|
_source.spatialBlend = 0f;
|
||
|
|
|
||
|
|
if (_lowPassFilter != null)
|
||
|
|
{
|
||
|
|
_lowPassFilter.enabled = false;
|
||
|
|
_lowPassFilter.cutoffFrequency = 22000f;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|