AudioManager.cs 6.5 KB

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