mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2024-12-29 18:55:06 +08:00
fix: parameters lose their default value when others are moved around (#1302)
Closes: #1296
This commit is contained in:
parent
ab4d1fd2f4
commit
123523540e
@ -20,6 +20,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
private readonly DropdownField _boolField;
|
||||
|
||||
private ParameterSyncType _syncType;
|
||||
private bool _hasInitialBinding;
|
||||
|
||||
public DefaultValueField()
|
||||
{
|
||||
@ -57,28 +58,39 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
_numberField.style.display = DisplayStyle.Flex;
|
||||
_boolField.style.display = DisplayStyle.None;
|
||||
OnUpdateNumberValue(_numberField.value);
|
||||
OnUpdateNumberValue(_numberField.value, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_numberField.style.display = DisplayStyle.None;
|
||||
_boolField.style.display = DisplayStyle.Flex;
|
||||
OnUpdateBoolValue(_boolField.value);
|
||||
OnUpdateBoolValue(_boolField.value, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnUpdateNumberValue(string value)
|
||||
private void OnUpdateNumberValue(string value, bool implicitUpdate = false)
|
||||
{
|
||||
// Upon initial creation, sometimes the OnUpdateSyncType fires before we receive the initial value event.
|
||||
// In this case, suppress the update to avoid losing data.
|
||||
if (implicitUpdate && !_hasInitialBinding) return;
|
||||
|
||||
var theValue = _defaultValueField.value;
|
||||
if (string.IsNullOrWhiteSpace(value))
|
||||
{
|
||||
if (!implicitUpdate)
|
||||
{
|
||||
_defaultValueField.value = 0;
|
||||
}
|
||||
|
||||
theValue = _defaultValueField.value;
|
||||
|
||||
_hasExplicitDefaultValueField.value = false;
|
||||
}
|
||||
else if (float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out var parsed)
|
||||
&& !float.IsNaN(parsed)
|
||||
&& !float.IsInfinity(parsed))
|
||||
{
|
||||
_defaultValueField.value = _syncType switch
|
||||
theValue = _defaultValueField.value = _syncType switch
|
||||
{
|
||||
ParameterSyncType.Int => Mathf.FloorToInt(Mathf.Clamp(parsed, 0, 255)),
|
||||
ParameterSyncType.Float => Mathf.Clamp(parsed, -1, 1),
|
||||
@ -88,11 +100,15 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
_hasExplicitDefaultValueField.value = true;
|
||||
}
|
||||
|
||||
UpdateVisibleField(_defaultValueField.value, _hasExplicitDefaultValueField.value);
|
||||
UpdateVisibleField(theValue, _hasExplicitDefaultValueField.value);
|
||||
}
|
||||
|
||||
private void OnUpdateBoolValue(string value)
|
||||
private void OnUpdateBoolValue(string value, bool implicitUpdate = false)
|
||||
{
|
||||
// Upon initial creation, sometimes the OnUpdateSyncType fires before we receive the initial value event.
|
||||
// In this case, suppress the update to avoid losing data.
|
||||
if (implicitUpdate && !_hasInitialBinding) return;
|
||||
|
||||
_defaultValueField.value = value == V_True ? 1 : 0;
|
||||
_hasExplicitDefaultValueField.value = value != V_None;
|
||||
|
||||
@ -101,6 +117,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
|
||||
private void UpdateVisibleField(float value, bool hasExplicitValue)
|
||||
{
|
||||
_hasInitialBinding = true;
|
||||
|
||||
if (hasExplicitValue || Mathf.Abs(value) > 0.0000001)
|
||||
{
|
||||
_numberField.SetValueWithoutNotify(value.ToString(CultureInfo.InvariantCulture));
|
||||
|
Loading…
Reference in New Issue
Block a user