diff --git a/Runtime/Source/AudioSourceProxy.cs b/Runtime/Source/AudioSourceProxy.cs new file mode 100644 index 0000000..bd6430c --- /dev/null +++ b/Runtime/Source/AudioSourceProxy.cs @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: Apache-2.0 +// © 2024 Nikolay Melnikov + +using Depra.SerializeReference.Extensions; +using Depra.Sound.Clip; +using Depra.Sound.Parameter; +using UnityEngine; +using static Depra.Sound.Module; + +namespace Depra.Sound.Source +{ + [AddComponentMenu(MENU_PATH + nameof(AudioSourceProxy), DEFAULT_ORDER)] + public sealed class AudioSourceProxy : MonoBehaviour, IAudioSource + { + [SerializeReferenceDropdown] + [UnityEngine.SerializeReference] + private IAudioSource _audioSource; + + event IAudioSource.PlayDelegate IAudioSource.Started + { + add => _audioSource.Started += value; + remove => _audioSource.Started -= value; + } + + event IAudioSource.StopDelegate IAudioSource.Stopped + { + add => _audioSource.Stopped += value; + remove => _audioSource.Stopped -= value; + } + + bool IAudioSource.IsPlaying => _audioSource.IsPlaying; + + IAudioClipParameters IAudioSource.Parameters => _audioSource.Parameters; + + void IAudioSource.Stop() => _audioSource.Stop(); + + void IAudioSource.Play(IAudioClip clip) => _audioSource.Play(clip); + } +} \ No newline at end of file diff --git a/Runtime/Source/AudioSourceProxy.cs.meta b/Runtime/Source/AudioSourceProxy.cs.meta new file mode 100644 index 0000000..24139a9 --- /dev/null +++ b/Runtime/Source/AudioSourceProxy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 117a12dee8034c31a3746e67fb4c0986 +timeCreated: 1714604103 \ No newline at end of file diff --git a/Runtime/Source/DefaultAudioSourceFactory.cs b/Runtime/Source/DefaultAudioSourceFactory.cs index 05c3273..5b19752 100644 --- a/Runtime/Source/DefaultAudioSourceFactory.cs +++ b/Runtime/Source/DefaultAudioSourceFactory.cs @@ -6,6 +6,7 @@ namespace Depra.Sound.Source { + [Serializable] public sealed class DefaultAudioSourceFactory : IAudioSourceFactory { private readonly UnityAudioSource _original; diff --git a/Runtime/Source/SceneAudioSourceRef.cs b/Runtime/Source/SceneAudioSourceRef.cs new file mode 100644 index 0000000..43469dd --- /dev/null +++ b/Runtime/Source/SceneAudioSourceRef.cs @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: Apache-2.0 +// © 2024 Nikolay Melnikov + +using System; +using Depra.Sound.Clip; +using Depra.Sound.Parameter; +using UnityEngine; + +namespace Depra.Sound.Source +{ + [Serializable] + public sealed class SceneAudioSourceRef : IAudioSource + { + [SerializeField] private GameObject _gameObject; + private IAudioSource _audioSource; + + private IAudioSource AudioSource => _audioSource ??= _gameObject.GetComponent(); + + event IAudioSource.PlayDelegate IAudioSource.Started + { + add => AudioSource.Started += value; + remove => AudioSource.Started -= value; + } + + event IAudioSource.StopDelegate IAudioSource.Stopped + { + add => AudioSource.Stopped += value; + remove => AudioSource.Stopped -= value; + } + + bool IAudioSource.IsPlaying => AudioSource.IsPlaying; + + IAudioClipParameters IAudioSource.Parameters => AudioSource?.Parameters; + + void IAudioSource.Stop() => AudioSource?.Stop(); + + void IAudioSource.Play(IAudioClip clip) => AudioSource?.Play(clip); + } +} \ No newline at end of file diff --git a/Runtime/Source/SceneAudioSourceRef.cs.meta b/Runtime/Source/SceneAudioSourceRef.cs.meta new file mode 100644 index 0000000..70df73a --- /dev/null +++ b/Runtime/Source/SceneAudioSourceRef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 337554c153cd45db97a52ef4c6eb6f52 +timeCreated: 1714604103 \ No newline at end of file diff --git a/package.json b/package.json index 6193002..8f74019 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.depra.sound.unity", - "version": "0.0.12", + "version": "0.0.13", "displayName": "Depra.Sound", "description": "", "unity": "2021.3",