// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved. // This code can only be used under the standard Unity Asset Store End User License Agreement // A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms using System.Collections.Generic; using Doozy.Runtime.Common.Utils; using Doozy.Runtime.Reactor.Ticker; using Doozy.Runtime.UIManager.Animators; using UnityEngine; // ReSharper disable MemberCanBePrivate.Global namespace Doozy.Runtime.UIManager.Audio { /// /// Specialized audio component used to play a set AudioClip by listening to a UIContainer (controller) show/hide commands. /// [AddComponentMenu("Doozy/UI/Containers/Addons/UIContainer Audio")] public class UIContainerAudio : BaseUIContainerAnimator { #if UNITY_EDITOR [UnityEditor.MenuItem("GameObject/Doozy/UI/Containers/Addons/UIContainer Audio", false, 8)] private static void CreateComponent(UnityEditor.MenuCommand menuCommand) { GameObjectUtils.AddToScene("UIContainer Audio", false, true); } #endif [SerializeField] private AudioSource AudioSource; /// Reference to a target Audio source public AudioSource audioSource => AudioSource; /// Check if a AudioSource is referenced or not public bool hasAudioSource => AudioSource != null; [SerializeField] private AudioClip ShowAudioClip; /// Container Show AudioClip public AudioClip showAudioClip => ShowAudioClip; [SerializeField] private AudioClip HideAudioClip; /// Container Hide AudioClip public AudioClip hideAudioClip => HideAudioClip; /// Stop the currently playing sound, if any. public override void StopAllReactions() { if (!hasAudioSource) return; audioSource.Stop(); } public override void Show() { if (!hasAudioSource) return; if (showAudioClip == null) return; audioSource.Stop(); audioSource.clip = showAudioClip; audioSource.Play(); } public override void ReverseShow() => Hide(); public override void Hide() { if (!hasAudioSource) return; if (hideAudioClip == null) return; audioSource.Stop(); audioSource.clip = hideAudioClip; audioSource.Play(); } public override void ReverseHide() => Show(); /// Ignored public override void UpdateSettings() {} /// Ignored public override void InstantShow() {} /// Ignored public override void InstantHide() {} /// Ignored public override void ResetToStartValues(bool forced = false) {} /// Ignored public override List SetHeartbeat() { return null; } } }