Files
crtr/Assets/Cryville/Crtr/Config/UI/PropertyValuePanel.cs

49 lines
1.2 KiB
C#

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();
}
}
}