zombie_mp/Assets/HQ FPS Weapons/Scripts/Utility/SoundPlayer.cs
Sewmina Dilshan 68183e5317 initial
2021-08-23 13:28:33 +05:30

85 lines
4.5 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using UnityEngine;
using Random = UnityEngine.Random;
namespace HQFPSWeapons
{
[Serializable]
public class SoundPlayer : ICloneable
{
public int ClipCount { get { return m_Clips.Count; } }
[SerializeField]
[Reorderable]
private AudioClipList m_Clips = null;
[SerializeField]
[MinMax(0f,1f)]
private Vector2 m_VolumeRange = new Vector2(0.5f, 0.75f);
[SerializeField]
[MinMax(0.5f, 1.5f)]
private Vector2 m_PitchRange = new Vector2(0.9f, 1.1f);
[SerializeField]
[Range(0f, 1f)]
private float m_VolumeMultiplier = 1f;
private int m_LastClipPlayed = -1;
public object Clone()
{
return MemberwiseClone();
}
public void Play(AudioSource audioSource, float volume = 1f)
{
Play(ItemSelection.Method.RandomExcludeLast, audioSource, volume);
}
public void Play(ItemSelection.Method selectionMethod, AudioSource audioSource, float volume = 1f)
{
if(!audioSource || m_Clips.Count == 0)
return;
if(m_LastClipPlayed >= m_Clips.Count || m_LastClipPlayed <= -1)
m_LastClipPlayed = m_Clips.Count - 1;
AudioClip clipToPlay = m_Clips.List.Select(ref m_LastClipPlayed, selectionMethod);
var finalVolume = GetVolume() * volume;
audioSource.pitch = Random.Range(m_PitchRange.x, m_PitchRange.y);
audioSource.PlayOneShot(clipToPlay, finalVolume);
}
/// <summary>
/// Will use the AudioSource.PlayClipAtPoint() method, which doesn't include pitch variation.
/// </summary>
public void PlayAtPosition(ItemSelection.Method selectionMethod, Vector3 position, float volume = 1f)
{
if(m_Clips.Count == 0)
return;
AudioClip clipToPlay = m_Clips.List.Select(ref m_LastClipPlayed, selectionMethod);
AudioSource.PlayClipAtPoint(clipToPlay, position, GetVolume() * volume);
}
public void Play2D(ItemSelection.Method selectionMethod = ItemSelection.Method.RandomExcludeLast, float volume = 1f)
{
if(m_Clips.Count == 0)
return;
AudioClip clipToPlay = m_Clips.List.Select(ref m_LastClipPlayed, selectionMethod);
AudioUtils.Instance.Play2D(clipToPlay, GetVolume() * volume);
}
private float GetVolume()
{
return Random.Range(m_VolumeRange.x, m_VolumeRange.y) * m_VolumeMultiplier;
}
}
}