using System;
using UnityEngine;
namespace HQFPSWeapons
{
public class ItemProperty
{
[Serializable]
public struct Float
{
public float Current { get { return m_Current; } set { m_Current = value; } }
/// The default value, that was set up initially, when the item was defined.
public float Default { get { return m_Default; } }
/// This is equal to Current / Default.
public float Ratio { get { return m_Current / m_Default; } }
#pragma warning disable 0649
[SerializeField]
private float m_Current;
[SerializeField]
private float m_Default;
#pragma warning restore 0649
public override string ToString()
{
return m_Current.ToString();
}
}
[Serializable]
public struct Definition
{
public string Name { get { return m_Name; } }
#pragma warning disable 0649
[SerializeField]
private string m_Name;
#pragma warning restore 0649
}
[Serializable]
public class Value
{
[NonSerialized]
public Message Changed = new Message();
public string Name { get { return m_Name; } }
public Float Val { get { return m_Float; } }
[SerializeField]
private string m_Name = string.Empty;
[SerializeField]
private Float m_Float = new Float();
public Value GetClone()
{
return (Value)MemberwiseClone();
}
public void SetValue(object value)
{
m_Float = (Float)value;
Changed.Send(this);
}
public override string ToString()
{
m_Float.ToString();
return m_Name;
}
public void AdjustValue(float adjustment, float clampMin = -Mathf.Infinity, float clampMax = Mathf.Infinity)
{
var floatingPointNr = m_Float;
floatingPointNr.Current = Mathf.Clamp(floatingPointNr.Current + adjustment, clampMin, clampMax);
SetValue(floatingPointNr);
}
}
}
}