using System.Collections; using UnityEngine; using GFGGame.Launcher; using YooAsset; namespace GFGGame { public class MusicManager : SingletonMonoBase { private AudioSource player; private string currentName; private AssetOperationHandle handle; private Coroutine coroutine; private bool _isOn = true; public bool isOn { get { return _isOn; } set { if(_isOn != value) { _isOn = value; if(_isOn) { if(currentName != null) { PlayCroutine(currentName, true); } } else { Stop(); } LocalCache.SetBool(LauncherConfig.MUSIC_KEY, _isOn); } } } private void Awake() { player = this.gameObject.AddComponent(); player.loop = true; } private void Start() { } private void Update() { } public void PlayCroutine(string path, bool must = false) { if(currentName != path || must) { currentName = path; if(coroutine != null) { StopCoroutine(coroutine); } handle?.Release(); if (_isOn) { coroutine = StartCoroutine(Play(path)); } } } private IEnumerator Play(string path) { //AudioClip clip = GFGAsset.Load(path); handle = YooAssets.LoadAssetAsync(path); yield return handle; player.clip = handle.AssetObject as AudioClip; player.Play(); } public float GetSoundTime() { if (player.clip != null) { return player.clip.length; } return 0; } public void Pause() { player.Pause(); } public void UnPause() { player.UnPause(); } public void Stop() { handle.Release(); player.Stop(); } } }