62 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|