65 lines
1.3 KiB
C#
Raw Normal View History

2025-09-24 11:24:38 +05:00
using System;
using UnityEngine;
namespace TPSBR
{
[CreateAssetMenu(menuName = "TPSBR/Footstep Setup")]
public class FootstepSetup : ScriptableObject
{
// PRIVATE MEMBERS
[SerializeField]
private AudioSetup _fallbackWalkSound;
[SerializeField]
private AudioSetup _fallbackRunSound;
[SerializeField]
private FootstepData[] _footsteps;
[NonSerialized]
private bool _initialized;
[NonSerialized]
private int _untaggedHash;
// PUBLIC METHODS
public AudioSetup GetSound(int tagHash, bool isRunning)
{
if (tagHash == 0 || tagHash == _untaggedHash)
return isRunning == true ? _fallbackRunSound : _fallbackWalkSound;
if (_initialized == false)
{
_untaggedHash = "Untagged".GetHashCode();
for (int i = 0; i < _footsteps.Length; i++)
{
_footsteps[i].TagHash = _footsteps[i].Tag.GetHashCode();
}
_initialized = true;
}
for (int i = 0; i < _footsteps.Length; i++)
{
if (_footsteps[i].TagHash == tagHash)
return isRunning == true ? _footsteps[i].SoundRun : _footsteps[i].SoundWalk;
}
return isRunning == true ? _fallbackRunSound : _fallbackWalkSound;
}
// HELPERS
[Serializable]
private class FootstepData
{
public string Tag;
public AudioSetup SoundWalk;
public AudioSetup SoundRun;
[NonSerialized]
public int TagHash;
}
}
}