using UnityEngine; using System.Collections; using System.Collections.Generic; public enum Clip { BtnClip, SkillClip, ErrorClip, DropClip, CloseClip, FlowerClip, BubbleClip, CurrentClip, MiniEndClip, } public class ManaAudio : Regist { #region 变量 public static bool Audio; public static bool Music; public static Coroutine CoroTheme; public static Coroutine CoroMiniGame; public static ManaAudio Instance; public static AudioClip BtnClip; public static AudioClip SkillClip; public static AudioClip ErrorClip; public static AudioClip DropClip; public static AudioClip CloseClip; public static AudioClip FlowerClip; public static AudioClip BubbleClip; public static AudioClip CurrentClip; public static AudioClip MiniEndClip; public static AudioSource MusicClip; public static AudioSource MusicMini; public static AudioSource MusicTheme; public static Dictionary ClipDic = new Dictionary(); #endregion public override void Instantiate() { BtnClip = ManaReso.Load("BtnClip", Folder.Audio); SkillClip = ManaReso.Load("SkillClip", Folder.Audio); ErrorClip = ManaReso.Load("ErrorClip", Folder.Audio); DropClip = ManaReso.Load("DropClip", Folder.Audio); CloseClip = ManaReso.Load("CloseClip", Folder.Audio); FlowerClip = ManaReso.Load("FlowerClip", Folder.Audio); BubbleClip = ManaReso.Load("BubbleClip", Folder.Audio); CurrentClip = ManaReso.Load("CurrentClip", Folder.Audio); MiniEndClip = ManaReso.Load("MiniEndClip", Folder.Audio); ManaReso.Get("Music", Folder.Audio, true, transform, true, ObjType.Music); } public override void RegistValueA() { Audio = true; Music = true; Instance = this; #region ClipDic ClipDic.Add(Clip.BtnClip, BtnClip); ClipDic.Add(Clip.SkillClip, SkillClip); ClipDic.Add(Clip.ErrorClip, ErrorClip); ClipDic.Add(Clip.DropClip, DropClip); ClipDic.Add(Clip.CloseClip, CloseClip); ClipDic.Add(Clip.FlowerClip, FlowerClip); ClipDic.Add(Clip.BubbleClip, BubbleClip); ClipDic.Add(Clip.CurrentClip, CurrentClip); ClipDic.Add(Clip.MiniEndClip, MiniEndClip); #endregion #region MusicMini TweenAudio tween = MusicMini.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad); tween.OnForwardStart += () => { MusicMini.Play(); CoroMiniGame = StartCoroutine(Loop(MusicMini)); }; tween.OnBackwardStart += () => { StopCoroutine(CoroTheme); }; #endregion #region MusicTheme tween = MusicTheme.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad); tween.OnForwardStart += () => { MusicTheme.Play(); CoroTheme = StartCoroutine(Loop(MusicTheme)); }; tween.OnBackwardStart += () => { StopCoroutine(CoroTheme); }; MusicTheme.TweenForAudio(); #endregion } public override void RegistReference() { AudioSource[] audioSources = ManaReso.Gets("Music"); MusicClip = audioSources[2]; MusicMini = audioSources[1]; MusicTheme = audioSources[0]; } public static void PlayClip(Clip clip) { AudioClip audioClip = ClipDic[clip]; MusicClip.PlayOneShot(audioClip); } public void MusicSwitch() { if (Music) { Music = false; ManaReso.SetActive("L_MusicOn", false); ManaReso.SetActive("L_MusicOff", true); MusicMini.enabled = false; MusicTheme.enabled = false; StopCoroutine(CoroTheme); } else { Music = true; ManaReso.SetActive("L_MusicOn", true); ManaReso.SetActive("L_MusicOff", false); MusicMini.enabled = true; MusicTheme.enabled = true; MusicTheme.Play(); CoroTheme = StartCoroutine(Loop(MusicTheme)); } } public void AudioSwitch() { if (Audio) { Audio = false; ManaReso.SetActive("L_AudioOn", false); ManaReso.SetActive("L_AudioOff", true); MusicClip.enabled = false; } else { Audio = true; ManaReso.SetActive("L_AudioOn", true); ManaReso.SetActive("L_AudioOff", false); MusicClip.enabled = true; } } public IEnumerator Loop(AudioSource audioSource) { while (true) { while (audioSource.enabled == false) { yield return null; } while (audioSource.isPlaying) { yield return null; } yield return new WaitForSeconds(1.5f); audioSource.Play(); } } public override void Reactive() { if (CoroTheme != null) { StopCoroutine(CoroTheme); CoroTheme = StartCoroutine(Loop(MusicTheme)); } if (CoroMiniGame != null) { StopCoroutine(CoroMiniGame); CoroMiniGame = StartCoroutine(Loop(MusicMini)); } } }