using System.Collections.Generic; using CriWare; using Cute; using Wizard; public class Voice { private CriAtomSource m_VoiceAudioSourceA; private CriAtomSource m_VoiceAudioSourceB; private const string CATEGORY_NAME = "VO"; private float m_volume; private bool m_isMuted; private int _currentVoiceSourceIndex; private int _voiceSourceCount; private const int VoiceA = 0; private const int VoiceB = 1; public Voice() { m_VoiceAudioSourceA = GameMgr.GetIns().GetGameObjMgr().GetGameObj() .AddComponent(); m_VoiceAudioSourceA.loop = false; m_VoiceAudioSourceA.playOnStart = false; m_VoiceAudioSourceA.use3dPositioning = false; m_VoiceAudioSourceA.player.AttachFader(); m_VoiceAudioSourceA.player.SetFadeOutTime(50); m_VoiceAudioSourceB = GameMgr.GetIns().GetGameObjMgr().GetGameObj() .AddComponent(); m_VoiceAudioSourceB.loop = false; m_VoiceAudioSourceB.playOnStart = false; m_VoiceAudioSourceB.use3dPositioning = false; m_VoiceAudioSourceB.player.AttachFader(); m_VoiceAudioSourceB.player.SetFadeOutTime(50); SetVolume(PlayerPrefsWrapper.GetValue(PlayerPrefsWrapper.VOICE_VOLUME)); Mute(PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.SOUND_MUTE)); _voiceSourceCount = Toolbox.AudioManager.GetVoiceSourceCount(); } public void SetVolume(float Prm) { CriAtomExCategory.SetVolume("VO", Prm); m_volume = Prm; } public float GetVolume() { return m_volume; } public void Mute(bool isMute) { CriAtomExCategory.Mute("VO", isMute); m_isMuted = isMute; } public bool IsMuted() { return m_isMuted; } public void Play(ClassCharaPrm.EmotionType emotiontype, int classid, List pathList, string voiceId = "", bool isEvolved = false) { string cueName = ""; string cueSheet = ""; cueName = GetEmotionCueName(emotiontype, classid, isEvolved); cueSheet = GetEmotionCueSheet(emotiontype, classid); if (voiceId != string.Empty) { cueName = "vo_" + voiceId; cueSheet = "v/" + cueName + ".acb"; } if (string.IsNullOrEmpty(cueName)) { return; } if (Toolbox.AudioManager.IsAvailableCueSheet(cueSheet) || pathList == null) { Toolbox.AudioManager.PlayVoice(0, cueName, cueSheet, cueName); return; } UIManager.GetInstance().StartCoroutine(Toolbox.ResourcesManager.LoadAssetAsync(cueSheet, delegate { pathList.Add(cueSheet); Toolbox.AudioManager.PlayVoice(0, cueName, cueSheet, cueName); })); } public static string GetEmotionCueName(ClassCharaPrm.EmotionType emotiontype, int skinId, bool isEvolved = false) { return "vo_" + GameMgr.GetIns().GetDataMgr().GetEmotionDataBySkinId(skinId.ToString())[emotiontype].GetVoiceId(isEvolved); } public static string GetEmotionCueSheet(ClassCharaPrm.EmotionType emotiontype, int skinId) { return "v/" + GetEmotionCueName(emotiontype, skinId) + ".acb"; } public void PlayScenario(string cuename, float fadeout) { AudioManager audioManager = Toolbox.AudioManager; audioManager.StopVoice(_currentVoiceSourceIndex, fadeout); _currentVoiceSourceIndex = (_currentVoiceSourceIndex + 1) % _voiceSourceCount; audioManager.PlayVoice(_currentVoiceSourceIndex, cuename); } public void StopScenario(float fadeout) { Toolbox.AudioManager.StopVoice(_currentVoiceSourceIndex, fadeout); } public void PlayByKey(string quenameid, bool forcePlay = false) { if (!forcePlay) { if (Toolbox.AudioManager.IsPlayVoice(0)) { string text = "vo_" + quenameid; if (UIManager.GetInstance().GetCurrentScene() != UIManager.ViewScene.Battle) { Toolbox.AudioManager.StopVoice(0); } Toolbox.AudioManager.PlayVoice(1, text, m_VoiceAudioSourceB.cueSheet, text); } else { string text2 = "vo_" + quenameid; if (UIManager.GetInstance().GetCurrentScene() != UIManager.ViewScene.Battle) { Toolbox.AudioManager.StopVoice(1); } Toolbox.AudioManager.PlayVoice(0, text2, m_VoiceAudioSourceA.cueSheet, text2); } } else { Toolbox.AudioManager.StopVoice(0); Toolbox.AudioManager.StopVoice(1); string text3 = "vo_" + quenameid; Toolbox.AudioManager.PlayVoice(0, text3, m_VoiceAudioSourceA.cueSheet, text3); } } public void StopVoice(float fadeout) { if (m_VoiceAudioSourceA.status == CriAtomSource.Status.Playing) { Toolbox.AudioManager.StopVoice(0, fadeout); } else { Toolbox.AudioManager.StopVoice(1, fadeout); } } public void StopAll(float fadeout) { for (int i = 0; i < _voiceSourceCount; i++) { Toolbox.AudioManager.StopVoice(i, fadeout); } } public bool IsPlaying() { for (int i = 0; i < _voiceSourceCount; i++) { if (Toolbox.AudioManager.IsPlayVoice(i)) { return true; } } return false; } }