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 = true; public static bool Music = true; 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() { 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 += () => { if (Music) { MusicMini.Play(); CoroMiniGame = StartCoroutine(Loop(MusicMini)); } }; tween.OnBackwardStart += () => { if (Music) { StopCoroutine(CoroTheme); } }; #endregion #region MusicTheme tween = MusicTheme.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad); tween.OnForwardStart += () => { if (Music) { MusicTheme.Play(); CoroTheme = StartCoroutine(Loop(MusicTheme)); } }; tween.OnBackwardStart += () => { if (Music) { StopCoroutine(CoroTheme); } }; #endregion MusicTheme.TweenForAudio(); } public override void RegistReference() { AudioSource[] audioSources = ManaReso.Gets("Music"); MusicClip = audioSources[2]; MusicMini = audioSources[1]; MusicTheme = audioSources[0]; } public static void PlayClip(Clip clip) { if (Audio) { 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.Pause(); MusicTheme.Pause(); } else { Music = true; ManaReso.SetActive("L_MusicOn", true); ManaReso.SetActive("L_MusicOff", false); MusicMini.UnPause(); MusicTheme.UnPause(); } } public void AudioSwitch() { if (Audio) { Audio = false; ManaReso.SetActive("L_AudioOn", false); ManaReso.SetActive("L_AudioOff", true); } else { Audio = true; ManaReso.SetActive("L_AudioOn", true); ManaReso.SetActive("L_AudioOff", false); } } public IEnumerator Loop(AudioSource audioSource) { while (true) { Mark: yield return null; while (ManaCenter.Background) { goto Mark; } while (!audioSource.enabled) { goto Mark; } while (audioSource.isPlaying) { goto Mark; } while (!Music) { goto Mark; } yield return new WaitForSeconds(1.5f); audioSource.Play(); } } } #region DebugList //从花园到小游戏 //从小游戏到花园 //从后台恢复 //循环 //静音 #endregion