You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
4.7 KiB
200 lines
4.7 KiB
using IVDataFormat;
|
|
using UnityEngine;
|
|
using UnityEngine.AddressableAssets;
|
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
|
using UnityEngine.Audio;
|
|
using Sirenix.Utilities;
|
|
|
|
public enum SoundName
|
|
{
|
|
BtnPress,
|
|
ReinforceSuccess,
|
|
ReinforceFailed,
|
|
OneSummon,
|
|
MultiSummon,
|
|
SummonBoss,
|
|
GetGoods,
|
|
UnlockThing,
|
|
none
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class Sound
|
|
{
|
|
public SoundName name;
|
|
public AudioClip clip;
|
|
}
|
|
|
|
public class SoundMgr : MonoSingleton<SoundMgr>
|
|
{
|
|
private bool BBgmOn = true;
|
|
public bool BgmOn
|
|
{
|
|
get
|
|
{
|
|
return BBgmOn;
|
|
}
|
|
set
|
|
{
|
|
if (BBgmOn && !value)
|
|
{
|
|
StopBgm();
|
|
}
|
|
else if (!BBgmOn && value)
|
|
{
|
|
PlayBgmSelected();
|
|
}
|
|
|
|
BBgmOn = value;
|
|
}
|
|
}
|
|
|
|
public bool EfcOn { get; set; }
|
|
public bool VoiceOn { get; set; }
|
|
|
|
private AudioSource asPlayer = null;
|
|
private AudioSource[] sfxPlayer = null;
|
|
|
|
private string curBgmPath = "";
|
|
|
|
#region ASSFX
|
|
[SerializeField]
|
|
Sound[] sfx;
|
|
#endregion
|
|
|
|
#region Base
|
|
void Start()
|
|
{
|
|
asPlayer = GetComponent<AudioSource>();
|
|
sfxPlayer = new AudioSource[3];
|
|
sfxPlayer[0] = asPlayer.transform.Find("sfx").GetComponent<AudioSource>();
|
|
sfxPlayer[1] = asPlayer.transform.Find("sfx (1)").GetComponent<AudioSource>();
|
|
sfxPlayer[2] = asPlayer.transform.Find("sfx (2)").GetComponent<AudioSource>();
|
|
}
|
|
#endregion Base
|
|
|
|
#region Control
|
|
public void SetAmxGroupBgm(AudioMixerGroup amxg)
|
|
{
|
|
if (asPlayer != null)
|
|
asPlayer.outputAudioMixerGroup = amxg;
|
|
}
|
|
#endregion Control
|
|
|
|
#region Select
|
|
// 선택된 상태의 배경음 로드 & 재생.
|
|
private void PlayBgmSelected()
|
|
{
|
|
if (curBgmPath.IsNullOrWhitespace()) return;
|
|
Addressables.LoadAssetAsync<AudioClip>(curBgmPath).Completed += ALoadBgmComp;
|
|
}
|
|
|
|
// 배경음 로드 요청.
|
|
public bool PlayBgm(BGM bgm)
|
|
{
|
|
return PlayBgm(FormatString.StringFormat(AddressableMgr.PathBgmClip, DataHandler.GetBgmPath(bgm)));
|
|
}
|
|
|
|
public bool PlayBgm(string path)
|
|
{
|
|
if (path == curBgmPath) return false;
|
|
|
|
curBgmPath = path;
|
|
if (!BBgmOn)
|
|
{
|
|
GameUIMgr.SOnChangeBgm(LocalizationText.GetText(FormatString.StringFormat("bgm : {0}", curBgmPath)));
|
|
return true;
|
|
}
|
|
|
|
Addressables.LoadAssetAsync<AudioClip>(path).Completed += ALoadBgmComp;
|
|
return true;
|
|
}
|
|
|
|
// 배경음 로드 완료.
|
|
private void ALoadBgmComp(AsyncOperationHandle<AudioClip> obj)
|
|
{
|
|
asPlayer.Stop();
|
|
if (asPlayer.clip != null)
|
|
Addressables.Release(asPlayer.clip);
|
|
|
|
asPlayer.clip = obj.Result;
|
|
asPlayer.Play();
|
|
|
|
GameUIMgr.SOnChangeBgm(LocalizationText.GetText(FormatString.StringFormat("bgm : {0}", curBgmPath)));
|
|
AddressableMgr.SAddUnload();
|
|
}
|
|
|
|
// 배경음 멈춤 및 리소스 해제.
|
|
private void StopBgm()
|
|
{
|
|
asPlayer.Stop();
|
|
|
|
if (asPlayer.clip != null)
|
|
Addressables.Release(asPlayer.clip);
|
|
|
|
asPlayer.clip = null;
|
|
}
|
|
|
|
// 배경음 일시 정지.
|
|
public void SPauseBgm()
|
|
{
|
|
asPlayer.Pause();
|
|
GameUIMgr.SPrintTestLog("SPauseBgm");
|
|
}
|
|
|
|
// 배경음 다시 재생.
|
|
public void SResumeBgm()
|
|
{
|
|
asPlayer.Play();
|
|
GameUIMgr.SPrintTestLog("SResumeBgm");
|
|
}
|
|
#endregion Select
|
|
|
|
#region SFX
|
|
public void PlaySfx(SoundName name1, SoundName name2 = SoundName.none, SoundName name3 = SoundName.none)
|
|
{
|
|
if (!EfcOn) return;
|
|
|
|
sfxPlayer[0].clip = sfx[(int)name1].clip;
|
|
sfxPlayer[0].Play();
|
|
if (name2 != SoundName.none)
|
|
{
|
|
sfxPlayer[1].clip = sfx[(int)name2].clip;
|
|
sfxPlayer[1].Play();
|
|
}
|
|
if (name3 != SoundName.none)
|
|
{
|
|
sfxPlayer[2].clip = sfx[(int)name3].clip;
|
|
sfxPlayer[2].Play();
|
|
}
|
|
}
|
|
|
|
public void PlaySfx(AudioClip clip, bool playSurely = true)
|
|
{
|
|
if (!EfcOn) return;
|
|
|
|
for(int i = 0; i < sfxPlayer.Length; i++)
|
|
{
|
|
if (!sfxPlayer[i].isPlaying)
|
|
{
|
|
sfxPlayer[i].clip = clip;
|
|
sfxPlayer[i].Play();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(playSurely)
|
|
{
|
|
// if all sfxPlayer is playing, play on sfxPlayer[0].
|
|
sfxPlayer[0].clip = clip;
|
|
sfxPlayer[0].Play();
|
|
}
|
|
}
|
|
|
|
public void ButtonSFXPlay()
|
|
{
|
|
sfxPlayer[0].clip = sfx[(int)SoundName.BtnPress].clip;
|
|
sfxPlayer[0].Play();
|
|
}
|
|
#endregion
|
|
}
|