2025-09-24 11:24:38 +05:00

62 lines
1.1 KiB
C#

using System;
using UnityEngine;
namespace TPSBR
{
[CreateAssetMenu(menuName = "TPSBR/Piercing Setup")]
public class PiercingSetup : ScriptableObject
{
// PRIVATE MEMBERS
[SerializeField]
private float _fallbackDamageMultiplier = 0f;
[SerializeField]
private PiercingData[] _piercing;
[NonSerialized]
private bool _initialized;
[NonSerialized]
private int _untaggedHash;
// PUBLIC METHODS
public float GetDamageMultiplier(int tagHash)
{
if (tagHash == 0 || tagHash == _untaggedHash)
return _fallbackDamageMultiplier;
if (_initialized == false)
{
_untaggedHash = "Untagged".GetHashCode();
for (int i = 0; i < _piercing.Length; i++)
{
_piercing[i].TagHash = _piercing[i].Tag.GetHashCode();
}
_initialized = true;
}
for (int i = 0; i < _piercing.Length; i++)
{
if (_piercing[i].TagHash == tagHash)
return _piercing[i].DamageMultiplier;
}
return _fallbackDamageMultiplier;
}
// HELPERS
[Serializable]
private class PiercingData
{
public string Tag;
public float DamageMultiplier;
[NonSerialized]
public int TagHash;
}
}
}