AudioManager.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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 void InstantiatePrefabs()
  31. {
  32. ResourceManager.Get(ResourceLabel.Music, Folder.Audio, true, transform, true, ObjType.Music);
  33. }
  34. public override void FirstInit()
  35. {
  36. Instance = this;
  37. #region MusicMini
  38. TweenAudio tween = MinigameAudio.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  39. tween.OnForwardStart += () =>
  40. {
  41. if (MusicOn)
  42. {
  43. MinigameAudio.Play();
  44. CoroMiniGameMusic = StartCoroutine(LoopPlayback(MinigameAudio));
  45. }
  46. };
  47. tween.OnBackwardStart += () =>
  48. {
  49. if (MusicOn)
  50. {
  51. StopCoroutine(CoroThemeMusic);
  52. }
  53. };
  54. #endregion
  55. #region MusicTheme
  56. tween = GardenThemeAudio.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  57. tween.OnForwardStart += () =>
  58. {
  59. if (MusicOn)
  60. {
  61. GardenThemeAudio.Play();
  62. CoroThemeMusic = StartCoroutine(LoopPlayback(GardenThemeAudio));
  63. }
  64. };
  65. tween.OnBackwardStart += () =>
  66. {
  67. if (MusicOn)
  68. {
  69. StopCoroutine(CoroThemeMusic);
  70. }
  71. };
  72. #endregion
  73. #region MusicPartyTheme
  74. tween = PartyThemeAudio.CreateTweenAudio(1, 2f, true, true, Curve.EaseOutQuad);
  75. tween.OnForwardStart += () =>
  76. {
  77. if (MusicOn)
  78. {
  79. PartyThemeAudio.Play();
  80. CoroPartyThemeMusic = StartCoroutine(LoopPlayback(PartyThemeAudio));
  81. }
  82. };
  83. tween.OnBackwardStart += () =>
  84. {
  85. if (MusicOn)
  86. {
  87. StopCoroutine(CoroPartyThemeMusic);
  88. }
  89. };
  90. #endregion
  91. if (!MusicOn)
  92. {
  93. ResourceManager.SetActive(CanvasLabel.L_MusicOn, false);
  94. ResourceManager.SetActive(CanvasLabel.L_MusicOff, true);
  95. }
  96. if (!AudioOn)
  97. {
  98. ResourceManager.SetActive(CanvasLabel.L_AudioOn, false);
  99. ResourceManager.SetActive(CanvasLabel.L_AudioOff, true);
  100. }
  101. }
  102. public override void RegistReference()
  103. {
  104. AudioSource[] audioSources = ResourceManager.Gets<AudioSource>(ResourceLabel.Music);
  105. ClipAudioSource = audioSources[2];
  106. MinigameAudio = audioSources[1];
  107. GardenThemeAudio = audioSources[0];
  108. PartyThemeAudio = audioSources[3];
  109. }
  110. public static void LoadPrefs()
  111. {
  112. AudioOn = PlayerPrefs.GetInt(Lib.AudioPrefs, 1).ToBool();
  113. MusicOn = PlayerPrefs.GetInt(Lib.MusicPrefs, 1).ToBool();
  114. }
  115. public static void SetLogoVolume()
  116. {
  117. if (!AudioOn || !MusicOn)
  118. {
  119. GameObject.Find(ResourceLabel.LOGO0005).GetComponent<AudioSource>().volume = 0;
  120. }
  121. }
  122. public static void PlayClip(string clipName)
  123. {
  124. if (AudioOn)
  125. {
  126. AudioClip audioClip = ResourceManager.Load<AudioClip>(clipName, Folder.Audio);
  127. ClipAudioSource.PlayOneShot(audioClip);
  128. }
  129. }
  130. public void MusicSwitch()
  131. {
  132. if (MusicOn)
  133. {
  134. MusicOn = false;
  135. ResourceManager.SetActive(CanvasLabel.L_MusicOn, false);
  136. ResourceManager.SetActive(CanvasLabel.L_MusicOff, true);
  137. MinigameAudio.Pause();
  138. GardenThemeAudio.Pause();
  139. PartyThemeAudio.Pause();
  140. PlayerPrefs.SetInt(Lib.MusicPrefs, 0);
  141. }
  142. else
  143. {
  144. MusicOn = true;
  145. ResourceManager.SetActive(CanvasLabel.L_MusicOn, true);
  146. ResourceManager.SetActive(CanvasLabel.L_MusicOff, false);
  147. MinigameAudio.UnPause();
  148. PartyThemeAudio.UnPause();
  149. if (GardenThemeAudio.isPlaying)
  150. {
  151. GardenThemeAudio.UnPause();
  152. }
  153. else
  154. {
  155. GardenThemeAudio.TweenReForAudio();
  156. }
  157. PlayerPrefs.SetInt(Lib.MusicPrefs, 1);
  158. }
  159. }
  160. public void AudioSwitch()
  161. {
  162. if (AudioOn)
  163. {
  164. AudioOn = false;
  165. ResourceManager.SetActive(CanvasLabel.L_AudioOn, false);
  166. ResourceManager.SetActive(CanvasLabel.L_AudioOff, true);
  167. PlayerPrefs.SetInt(Lib.AudioPrefs, 0);
  168. }
  169. else
  170. {
  171. AudioOn = true;
  172. ResourceManager.SetActive(CanvasLabel.L_AudioOn, true);
  173. ResourceManager.SetActive(CanvasLabel.L_AudioOff, false);
  174. PlayerPrefs.SetInt(Lib.AudioPrefs, 1);
  175. }
  176. }
  177. private float LoopDelay = 1.5f;
  178. public IEnumerator LoopPlayback(AudioSource audioSource)
  179. {
  180. while (true)
  181. {
  182. Mark: yield return null;
  183. while (Manager.InBackground)
  184. {
  185. goto Mark;
  186. }
  187. while (!audioSource.enabled)
  188. {
  189. goto Mark;
  190. }
  191. while (audioSource.isPlaying)
  192. {
  193. goto Mark;
  194. }
  195. while (!MusicOn)
  196. {
  197. goto Mark;
  198. }
  199. yield return new WaitForSeconds(LoopDelay);
  200. audioSource.Play();
  201. }
  202. }
  203. }