mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-04-24 13:29:01 +08:00
fix: incorrect auto parameter assignment when a non-auto item is set to 0
This commit is contained in:
parent
54288ebd44
commit
1e15fc2a6f
@ -87,14 +87,15 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
foreach (var (paramName, list) in _mamiByParam)
|
foreach (var (paramName, list) in _mamiByParam)
|
||||||
{
|
{
|
||||||
// Assign automatic values first
|
// Assign automatic values first
|
||||||
float defaultValue;
|
int? defaultValue = null;
|
||||||
if (declaredParams.TryGetValue(paramName, out var p))
|
if (declaredParams.TryGetValue(paramName, out var p))
|
||||||
{
|
{
|
||||||
defaultValue = p.defaultValue;
|
defaultValue = (int) p.defaultValue;
|
||||||
}
|
}
|
||||||
else
|
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 (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
|
// 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();
|
HashSet<int> usedValues = new();
|
||||||
usedValues.Add((int)defaultValue);
|
if (defaultValue.HasValue) usedValues.Add(defaultValue.Value);
|
||||||
|
|
||||||
foreach (var item in list)
|
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 nextValue = 1;
|
||||||
|
|
||||||
var valueType = VRCExpressionParameters.ValueType.Bool;
|
var valueType = VRCExpressionParameters.ValueType.Bool;
|
||||||
@ -125,7 +139,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
{
|
{
|
||||||
if (mami.isDefault)
|
if (mami.isDefault)
|
||||||
{
|
{
|
||||||
mami.Control.value = defaultValue;
|
mami.Control.value = defaultValue.GetValueOrDefault();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -153,7 +167,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
name = paramName,
|
name = paramName,
|
||||||
valueType = valueType,
|
valueType = valueType,
|
||||||
saved = isSaved,
|
saved = isSaved,
|
||||||
defaultValue = defaultValue,
|
defaultValue = defaultValue.GetValueOrDefault(),
|
||||||
networkSynced = isSynced
|
networkSynced = isSynced
|
||||||
};
|
};
|
||||||
newParameters[paramName] = newParam;
|
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.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[] { (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(
|
void TestAssignments(
|
||||||
(bool, float)[] assignments,
|
(bool, float)[] assignments,
|
||||||
float[] expectedAssignments,
|
float[] expectedAssignments,
|
||||||
int? defaultIndex = null,
|
int? defaultIndex = null,
|
||||||
Action<List<ModularAvatarMenuItem>> customize = null
|
Action<List<ModularAvatarMenuItem>> customize = null,
|
||||||
|
float? overrideExpectedDefaultValue = null
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
var root = CreateRoot("root");
|
var root = CreateRoot("root");
|
||||||
@ -103,7 +108,7 @@ namespace UnitTests.ReactiveComponent.ParameterAssignment
|
|||||||
Assert.AreEqual(expected, mami.Control.value);
|
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);
|
Assert.AreEqual(expectedDefaultValue, avDesc.expressionParameters.parameters.Single().defaultValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user