ManaAudio.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public enum Clip
  5. {
  6. BtnClip,
  7. SkillClip,
  8. ErrorClip,
  9. DropClip,
  10. CloseClip,
  11. FlowerClip,
  12. BubbleClip,
  13. CurrentClip,
  14. MiniEndClip,
  15. }
  16. public class ManaAudio : Regist
  17. {
  18. #region 变量
  19. public static bool Audio = true;
  20. public static bool Music = true;
  21. public static Coroutine CoroTheme;
  22. public static Coroutine CoroMiniGame;
  23. public static ManaAudio Instance;
  24. public static AudioClip BtnClip;
  25. public static AudioClip SkillClip;
  26. public static AudioClip ErrorClip;
  27. public static AudioClip DropClip;
  28. public static AudioClip CloseClip;
  29. public static AudioClip FlowerClip;
  30. public static AudioClip BubbleClip;
  31. public static AudioClip CurrentClip;
  32. public static AudioClip MiniEndClip;
  33. public static AudioSource MusicClip;
  34. public static AudioSource MusicMini;
  35. public static AudioSource MusicTheme;
  36. public static Dictionary<Clip, AudioClip> ClipDic = new Dictionary<Clip, AudioClip>();
  37. #endregion
  38. public override void Instantiate()
  39. {
  40. BtnClip = ManaReso.Load<AudioClip>("BtnClip", Folder.Audio);
  41. SkillClip = ManaReso.Load<AudioClip>("SkillClip", Folder.Audio);
  42. ErrorClip = ManaReso.Load<AudioClip>("ErrorClip", Folder.Audio);
  43. DropClip = ManaReso.Load<AudioClip>("DropClip", Folder.Audio);
  44. CloseClip = ManaReso.Load<AudioClip>("CloseClip", Folder.Audio);
  45. FlowerClip = ManaReso.Load<AudioClip>("FlowerClip", Folder.Audio);
  46. BubbleClip = ManaReso.Load<AudioClip>("BubbleClip", Folder.Audio);
  47. CurrentClip = ManaReso.Load<AudioClip>("CurrentClip", Folder.Audio);
  48. MiniEndClip = ManaReso.Load<AudioClip>("MiniEndClip", Folder.Audio);
  49. ManaReso.Get("Music", Folder.Audio, true, transform, true, ObjType.Music);
  50. }
  51. public override void RegistValueA()
  52. {
  53. Instance = this;
  54. #region ClipDic
  55. ClipDic.Add(Clip.BtnClip, BtnClip);
  56. ClipDic.Add(Clip.SkillClip, SkillClip);
  57. ClipDic.Add(Clip.ErrorClip, ErrorClip);
  58. ClipDic.Add(Clip.DropClip, DropClip);
  59. ClipDic.Add(Clip.CloseClip, CloseClip);
  60. ClipDic.Add(Clip.FlowerClip, FlowerClip);
  61. ClipDic.Add(Clip.BubbleClip, BubbleClip);
  62. ClipDic.Add(Clip.CurrentClip, CurrentClip);
  63. ClipDic.Add(Clip.MiniEndClip, MiniEndClip);
  64. #endregion
  65. #region MusicMini
  66. TweenAudio tween = MusicMini.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  67. tween.OnForwardStart += () =>
  68. {
  69. if (Music)
  70. {
  71. MusicMini.Play();
  72. CoroMiniGame = StartCoroutine(Loop(MusicMini));
  73. }
  74. };
  75. tween.OnBackwardStart += () =>
  76. {
  77. if (Music)
  78. {
  79. StopCoroutine(CoroTheme);
  80. }
  81. };
  82. #endregion
  83. #region MusicTheme
  84. tween = MusicTheme.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  85. tween.OnForwardStart += () =>
  86. {
  87. if (Music)
  88. {
  89. MusicTheme.Play();
  90. CoroTheme = StartCoroutine(Loop(MusicTheme));
  91. }
  92. };
  93. tween.OnBackwardStart += () =>
  94. {
  95. if (Music)
  96. {
  97. StopCoroutine(CoroTheme);
  98. }
  99. };
  100. #endregion
  101. if (!Music)
  102. {
  103. ManaReso.SetActive("L_MusicOn", false);
  104. ManaReso.SetActive("L_MusicOff", true);
  105. }
  106. if (!Audio)
  107. {
  108. ManaReso.SetActive("L_AudioOn", false);
  109. ManaReso.SetActive("L_AudioOff", true);
  110. }
  111. }
  112. public override void RegistReference()
  113. {
  114. AudioSource[] audioSources = ManaReso.Gets<AudioSource>("Music");
  115. MusicClip = audioSources[2];
  116. MusicMini = audioSources[1];
  117. MusicTheme = audioSources[0];
  118. }
  119. public static void PlayClip(Clip clip)
  120. {
  121. if (Audio)
  122. {
  123. AudioClip audioClip = ClipDic[clip];
  124. MusicClip.PlayOneShot(audioClip);
  125. }
  126. }
  127. public static void InitAudioSettingFromPlayerPrefs()
  128. {
  129. Audio = PlayerPrefs.GetInt("AudioOn", 1).ToBool();
  130. Music = PlayerPrefs.GetInt("MusicOn", 1).ToBool();
  131. }
  132. public static void SetLogoVolume()
  133. {
  134. if (!Audio || !Music)
  135. {
  136. GameObject.Find("LOGO0005").GetComponent<AudioSource>().volume = 0;
  137. }
  138. }
  139. public void MusicSwitch()
  140. {
  141. if (Music)
  142. {
  143. Music = false;
  144. ManaReso.SetActive("L_MusicOn", false);
  145. ManaReso.SetActive("L_MusicOff", true);
  146. MusicMini.Pause();
  147. MusicTheme.Pause();
  148. PlayerPrefs.SetInt("MusicOn", 0);
  149. }
  150. else
  151. {
  152. Music = true;
  153. ManaReso.SetActive("L_MusicOn", true);
  154. ManaReso.SetActive("L_MusicOff", false);
  155. MusicMini.UnPause();
  156. if (MusicTheme.isPlaying)
  157. {
  158. MusicTheme.UnPause();
  159. }
  160. else
  161. {
  162. MusicTheme.TweenReForAudio();
  163. }
  164. PlayerPrefs.SetInt("MusicOn", 1);
  165. }
  166. }
  167. public void AudioSwitch()
  168. {
  169. if (Audio)
  170. {
  171. Audio = false;
  172. ManaReso.SetActive("L_AudioOn", false);
  173. ManaReso.SetActive("L_AudioOff", true);
  174. PlayerPrefs.SetInt("AudioOn", 0);
  175. }
  176. else
  177. {
  178. Audio = true;
  179. ManaReso.SetActive("L_AudioOn", true);
  180. ManaReso.SetActive("L_AudioOff", false);
  181. PlayerPrefs.SetInt("AudioOn", 1);
  182. }
  183. }
  184. public IEnumerator Loop(AudioSource audioSource)
  185. {
  186. while (true)
  187. {
  188. Mark: yield return null;
  189. while (ManaCenter.Background)
  190. {
  191. goto Mark;
  192. }
  193. while (!audioSource.enabled)
  194. {
  195. goto Mark;
  196. }
  197. while (audioSource.isPlaying)
  198. {
  199. goto Mark;
  200. }
  201. while (!Music)
  202. {
  203. goto Mark;
  204. }
  205. yield return new WaitForSeconds(1.5f);
  206. audioSource.Play();
  207. }
  208. }
  209. }