mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-03-09 23:34:56 +08:00
fix: incorrect auto parameter assignment when a non-auto item is set to 0 (#1189)
This commit is contained in:
parent
54288ebd44
commit
a5e716cb3e
@ -87,14 +87,15 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
foreach (var (paramName, list) in _mamiByParam)
|
||||
{
|
||||
// Assign automatic values first
|
||||
float defaultValue;
|
||||
int? defaultValue = null;
|
||||
if (declaredParams.TryGetValue(paramName, out var p))
|
||||
{
|
||||
defaultValue = p.defaultValue;
|
||||
defaultValue = (int) p.defaultValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
defaultValue = list.FirstOrDefault(m => m.isDefault && !m.automaticValue)?.Control?.value ?? 0;
|
||||
var floatDefault = list.FirstOrDefault(m => m.isDefault && !m.automaticValue)?.Control?.value;
|
||||
if (floatDefault.HasValue) defaultValue = (int) floatDefault.Value;
|
||||
|
||||
if (list.Count == 1 && list[0].isDefault && list[0].automaticValue)
|
||||
// If we have only a single entry, it's probably an on-off toggle, so we'll implicitly let 1
|
||||
@ -103,7 +104,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
}
|
||||
|
||||
HashSet<int> usedValues = new();
|
||||
usedValues.Add((int)defaultValue);
|
||||
if (defaultValue.HasValue) usedValues.Add(defaultValue.Value);
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
@ -113,6 +114,19 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
}
|
||||
}
|
||||
|
||||
if (!defaultValue.HasValue)
|
||||
{
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
if (!usedValues.Contains(i))
|
||||
{
|
||||
defaultValue = i;
|
||||
usedValues.Add(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var nextValue = 1;
|
||||
|
||||
var valueType = VRCExpressionParameters.ValueType.Bool;
|
||||
@ -125,7 +139,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
if (mami.isDefault)
|
||||
{
|
||||
mami.Control.value = defaultValue;
|
||||
mami.Control.value = defaultValue.GetValueOrDefault();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -153,7 +167,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
name = paramName,
|
||||
valueType = valueType,
|
||||
saved = isSaved,
|
||||
defaultValue = defaultValue,
|
||||
defaultValue = defaultValue.GetValueOrDefault(),
|
||||
networkSynced = isSynced
|
||||
};
|
||||
newParameters[paramName] = newParam;
|
||||
|
@ -48,13 +48,18 @@ namespace UnitTests.ReactiveComponent.ParameterAssignment
|
||||
{
|
||||
TestAssignments(new[] { (false, 2.0f), (true, 0.0f), (true, 0.0f) }, new[] { 2.0f, 1.0f, 3.0f }, null);
|
||||
TestAssignments(new[] { (false, 2.7f), (true, 0.0f), (true, 0.0f) }, new[] { 2.7f, 1.0f, 3.0f }, null);
|
||||
TestAssignments(new[] { (true, 1.0f), (false, 0.0f) }, new[] { 2.0f, 0.0f }, null, overrideExpectedDefaultValue: 1.0f);
|
||||
TestAssignments(new[] { (true, 1.0f), (false, 0.0f) }, new[] { 1.0f, 0.0f }, 0);
|
||||
TestAssignments(new[] { (true, 1.0f), (false, 0.0f) }, new[] { 1.0f, 0.0f }, 1);
|
||||
|
||||
}
|
||||
|
||||
void TestAssignments(
|
||||
(bool, float)[] assignments,
|
||||
float[] expectedAssignments,
|
||||
int? defaultIndex = null,
|
||||
Action<List<ModularAvatarMenuItem>> customize = null
|
||||
Action<List<ModularAvatarMenuItem>> customize = null,
|
||||
float? overrideExpectedDefaultValue = null
|
||||
)
|
||||
{
|
||||
var root = CreateRoot("root");
|
||||
@ -103,7 +108,7 @@ namespace UnitTests.ReactiveComponent.ParameterAssignment
|
||||
Assert.AreEqual(expected, mami.Control.value);
|
||||
}
|
||||
|
||||
var expectedDefaultValue = defaultIndex.HasValue ? expectedAssignments[defaultIndex.Value] : 0;
|
||||
var expectedDefaultValue = overrideExpectedDefaultValue ?? (defaultIndex.HasValue ? expectedAssignments[defaultIndex.Value] : 0);
|
||||
Assert.AreEqual(expectedDefaultValue, avDesc.expressionParameters.parameters.Single().defaultValue);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user