using System.Collections.Generic; using UnityEngine; public class AudioManager : Singleton { [SerializeField] private AudioSource musicSource; [SerializeField] private AudioSource introSource; private bool backgroundMusicShouldPlay = true; private bool introIsActive; private readonly List activeIntroClips = new(); protected override void Awake() { base.Awake(); musicSource ??= GetComponent(); } private void Update() { if (introIsActive && (introSource == null || !introSource.isPlaying)) { if (introSource != null) { activeIntroClips.Remove(introSource.clip); } introIsActive = false; ApplyBackgroundMusicState(); } } public void PlayBackgroundMusic() { backgroundMusicShouldPlay = true; ApplyBackgroundMusicState(); } public void PauseBackgroundMusic() { backgroundMusicShouldPlay = false; ApplyBackgroundMusicState(); } public void PlayArtWorkIntro(AudioClip introClip) { if (introSource == null || introClip == null) { return; } if (!activeIntroClips.Contains(introClip)) { activeIntroClips.Add(introClip); } ApplyActiveIntroState(); } public void PauseArtWorkIntro(AudioClip introClip) { if (introClip == null) { return; } activeIntroClips.Remove(introClip); ApplyActiveIntroState(); } private void ApplyActiveIntroState() { AudioClip nextIntroClip = activeIntroClips.Count > 0 ? activeIntroClips[activeIntroClips.Count - 1] : null; if (introSource == null || nextIntroClip == null) { if (introSource != null && introSource.isPlaying) { introSource.Pause(); } introIsActive = false; ApplyBackgroundMusicState(); return; } if (introSource.clip != nextIntroClip) { introSource.clip = nextIntroClip; introSource.Play(); } else { introSource.UnPause(); if (!introSource.isPlaying) { introSource.Play(); } } introIsActive = true; ApplyBackgroundMusicState(); } private void ApplyBackgroundMusicState() { if (musicSource == null) { return; } if (!backgroundMusicShouldPlay || introIsActive) { if (musicSource.isPlaying) { musicSource.Pause(); } return; } if (musicSource.isPlaying) { return; } musicSource.UnPause(); if (!musicSource.isPlaying) { musicSource.Play(); } } }