//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, January 30, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; using System.Collections.Generic; namespace vnxbqy.UI { public class SoundUtility { static DateTime lastHitAudioPlayTime = DateTime.Now; static int hitAudioTimeInterval = 50;//毫秒 static int hitAudioPoolMax = 2; static int hitAudioCountPool = 2; static Dictionary> jobHitAudio = new Dictionary>() { { 1,new List(){101,102,103,104} }, { 2,new List(){146,147,148,149} }, { 3,new List(){101,102,103,104} }, }; public static void PlayHitAudio(AudioSource _audioSource) { if (_audioSource == null) { return; } if (hitAudioCountPool < hitAudioPoolMax) { hitAudioCountPool = Mathf.Clamp(hitAudioCountPool + (int)((DateTime.Now - lastHitAudioPlayTime).TotalMilliseconds / hitAudioTimeInterval), 0, hitAudioPoolMax); } if (hitAudioCountPool > 0) { var job = PlayerDatas.Instance.baseData.Job; if (jobHitAudio.ContainsKey(job)) { var audios = jobHitAudio[job]; var index = UnityEngine.Random.Range(0, audios.Count); SoundPlayer.Instance.PlayAudio(_audioSource, audios[index]); lastHitAudioPlayTime = DateTime.Now; hitAudioCountPool--; } } } static Dictionary fightRoars = new Dictionary() { { 1,new int[]{ 97,98,99 } }, { 2,new int[]{ 142,143,144 } }, }; public static void PlayFightRoar(AudioSource _audioSource, int _job) { var ableIndex = UnityEngine.Random.Range(0, 3); if (ableIndex != 1) { return; } int[] audioList = null; if (fightRoars.ContainsKey(_job)) { audioList = fightRoars[_job]; } if (audioList == null) { return; } var randomIndex = UnityEngine.Random.Range(0, audioList.Length); var audio = audioList[randomIndex]; SoundPlayer.Instance.PlayAudio(_audioSource, audio); } static Dictionary deadAudios = new Dictionary() { { 1,100}, { 2,145}, { 3,100}, }; public static void PlayDeadAudio(AudioSource _audioSource, int _job) { SoundPlayer.Instance.PlayAudio(_audioSource, deadAudios[_job]); } static Dictionary stateFootAudios = new Dictionary() { { 1,new int[]{ 130, 131, 132,133} }, { 2,new int[]{ 134, 135, 136, 137 } }, { 3,new int[]{ 138, 139, 140, 141 } }, }; static Dictionary rideAudios = new Dictionary(); static FootAudioType currentState = FootAudioType.Walk; static int audioIndex = 0; static Dictionary stateFootAudioLastPlayTimes = new Dictionary(); const float overTime = 2f; public static void PlayFootAudio(AudioSource _audioSource, FootAudioType _state, int _horseId = 0) { var stateInt = (int)_state; if (!stateFootAudios.ContainsKey(stateInt)) { return; } if (currentState != _state) { audioIndex = 0; currentState = _state; } if (stateFootAudioLastPlayTimes.ContainsKey(stateInt)) { var lastPlayTime = stateFootAudioLastPlayTimes[stateInt]; if ((DateTime.Now - lastPlayTime).TotalSeconds > 2f) { audioIndex = 0; } } else { audioIndex = 0; } int[] audios = null; switch (stateInt) { case 1: case 3: audios = stateFootAudios[(int)_state]; break; case 2: if (rideAudios.ContainsKey(_horseId)) { audios = rideAudios[_horseId]; } else { var config = HorseConfig.Get(_horseId); audios = new int[config.RideAudios.Length]; Array.Copy(config.RideAudios, audios, config.RideAudios.Length); rideAudios[_horseId] = audios; } break; } if (audioIndex < audios.Length) { var audio = audios[audioIndex]; SoundPlayer.Instance.PlayAudio(_audioSource, audio); stateFootAudioLastPlayTimes[stateInt] = DateTime.Now; audioIndex++; } if (audioIndex >= audios.Length) { audioIndex = 0; } } } }