|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace vnxbqy.UI | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class SoundUtility | 
|---|
|  |  |  | { | 
|---|
|  |  |  | static DateTime lastHitAudioPlayTime = DateTime.Now; | 
|---|
|  |  |  | static int hitAudioTimeInterval = 50;//毫秒 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class SoundUtility | 
|---|
|  |  |  | static int hitAudioPoolMax = 2; | 
|---|
|  |  |  | static int hitAudioCountPool = 2; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, List<int>> jobHitAudio = new Dictionary<int, List<int>>() { | 
|---|
|  |  |  | { 1,new List<int>(){101,102,103,104} }, | 
|---|
|  |  |  | { 2,new List<int>(){146,147,148,149} }, | 
|---|
|  |  |  | { 3,new List<int>(){101,102,103,104} }, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void PlayHitAudio(AudioSource _audioSource) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | static DateTime lastHitAudioPlayTime = DateTime.Now; | 
|---|
|  |  |  | static int hitAudioTimeInterval = 50;//毫秒 | 
|---|
|  |  |  | if (_audioSource == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static int hitAudioPoolMax = 2; | 
|---|
|  |  |  | static int hitAudioCountPool = 2; | 
|---|
|  |  |  | if (hitAudioCountPool < hitAudioPoolMax) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | hitAudioCountPool = Mathf.Clamp(hitAudioCountPool + (int)((DateTime.Now - lastHitAudioPlayTime).TotalMilliseconds / hitAudioTimeInterval), 0, hitAudioPoolMax); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, List<int>> jobHitAudio = new Dictionary<int, List<int>>() { | 
|---|
|  |  |  | { 1,new List<int>(){101,102,103,104} }, | 
|---|
|  |  |  | { 2,new List<int>(){146,147,148,149} }, | 
|---|
|  |  |  | { 3,new List<int>(){101,102,103,104} }, | 
|---|
|  |  |  | 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<int, int[]> fightRoars = new Dictionary<int, int[]>() { | 
|---|
|  |  |  | {  1,new int[]{ 97,98,99 } }, | 
|---|
|  |  |  | {  2,new int[]{ 142,143,144 } }, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void PlayHitAudio(AudioSource _audioSource) | 
|---|
|  |  |  | public static void PlayFightRoar(AudioSource _audioSource, int _job) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var ableIndex = UnityEngine.Random.Range(0, 3); | 
|---|
|  |  |  | if (ableIndex != 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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--; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, int[]> fightRoars = new Dictionary<int, int[]>() { | 
|---|
|  |  |  | {  1,new int[]{ 97,98,99 } }, | 
|---|
|  |  |  | {  2,new int[]{ 142,143,144 } }, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void PlayFightRoar(AudioSource _audioSource, int _job) | 
|---|
|  |  |  | int[] audioList = null; | 
|---|
|  |  |  | if (fightRoars.ContainsKey(_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); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | audioList = fightRoars[_job]; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, int> deadAudios = new Dictionary<int, int>() | 
|---|
|  |  |  | if (audioList == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | { 1,100}, | 
|---|
|  |  |  | { 2,145}, | 
|---|
|  |  |  | { 3,100}, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void PlayDeadAudio(AudioSource _audioSource, int _job) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SoundPlayer.Instance.PlayAudio(_audioSource, deadAudios[_job]); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, int[]> stateFootAudios = new Dictionary<int, int[]>() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | { 1,new int[]{ 130, 131, 132,133} }, | 
|---|
|  |  |  | { 2,new int[]{ 134, 135, 136, 137 } }, | 
|---|
|  |  |  | { 3,new int[]{ 138, 139, 140, 141 } }, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | var randomIndex = UnityEngine.Random.Range(0, audioList.Length); | 
|---|
|  |  |  | var audio = audioList[randomIndex]; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, int[]> rideAudios = new Dictionary<int, int[]>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static FootAudioType currentState = FootAudioType.Walk; | 
|---|
|  |  |  | static int audioIndex = 0; | 
|---|
|  |  |  | static Dictionary<int, DateTime> stateFootAudioLastPlayTimes = new Dictionary<int, DateTime>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | SoundPlayer.Instance.PlayAudio(_audioSource, audio); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, int> deadAudios = new Dictionary<int, int>() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | { 1,100}, | 
|---|
|  |  |  | { 2,145}, | 
|---|
|  |  |  | { 3,100}, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void PlayDeadAudio(AudioSource _audioSource, int _job) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SoundPlayer.Instance.PlayAudio(_audioSource, deadAudios[_job]); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, int[]> stateFootAudios = new Dictionary<int, int[]>() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | { 1,new int[]{ 130, 131, 132,133} }, | 
|---|
|  |  |  | { 2,new int[]{ 134, 135, 136, 137 } }, | 
|---|
|  |  |  | { 3,new int[]{ 138, 139, 140, 141 } }, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static Dictionary<int, int[]> rideAudios = new Dictionary<int, int[]>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static FootAudioType currentState = FootAudioType.Walk; | 
|---|
|  |  |  | static int audioIndex = 0; | 
|---|
|  |  |  | static Dictionary<int, DateTime> stateFootAudioLastPlayTimes = new Dictionary<int, DateTime>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|