49 lines
1.2 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|