using UnityEngine; namespace Cryville.Crtr.Config.UI { public abstract class PropertyValuePanel : MonoBehaviour { IPropertyAdapter _property; public void Init(IPropertyAdapter property) { _property = property; _property.ValueChanged += GetValue; GetValue(); } protected bool SetMapped { get { return _property.SetMapped; } } protected object[] Range { get { return _property.Range; } } private object m_mappedValue; public object MappedValue { get { return m_mappedValue; } set { m_rawValue = _property.MapValueInverse(value); SetValue(); } } private object m_rawValue; public object RawValue { get { return m_rawValue; } set { m_rawValue = value; SetValue(); } } protected abstract void OnValueUpdated(); void GetValue() { if (_property.SetMapped) { m_mappedValue = _property.GetValue(); m_rawValue = _property.MapValueInverse(m_mappedValue); } else { m_rawValue = _property.GetValue(); m_mappedValue = _property.MapValue(m_rawValue); } OnValueUpdated(); } void SetValue() { var outRaw = RawValue; m_mappedValue = _property.MapValue(outRaw); _property.SetValue(_property.SetMapped ? m_mappedValue : outRaw); OnValueUpdated(); } } }