using Fie.Utility; using System.Collections.Generic; using UnityEngine; namespace Fie.Footstep { /// /// Plays the footstep animations created as players or enemies move around. /// public class FieFootstepMaterial : MonoBehaviour { [SerializeField] private float _audioVolume = 0.5f; [SerializeField] private List _audioClips = new List(); /// /// The particle material to spawn under an entity's hooves as they walk. /// [SerializeField] private Material _footStepParticleMaterial; /// /// A lotto of audio clips to play. Provides a random one when queried. /// private Lottery _lottery = new Lottery(); /// /// The pool of sounds that can be played by this material. /// public List audioClips => _audioClips; private void Awake() { foreach (AudioClip audioClip in _audioClips) { _lottery.AddItem(audioClip); // add each audio clip to the lottery } } /// /// Attempts to play an audio clip for the given footstep player. /// Accepts nulls. /// public void playFootstepAudio(FieFootstepPlayer player) { if (!(player == null) && _lottery.IsExecutable()) { AudioClip audioClip = _lottery.Lot(); if (!(audioClip == null)) { player.SetMaterial(_footStepParticleMaterial); player.audioSource.pitch = player.pitchOffset; player.audioSource.PlayOneShot(audioClip, _audioVolume); player.EmitFootstepParticle(audioClip.length); } } } } }