From 6f03ae5eca7a8fb792f83cc5ba0c97d31cf1b5b0 Mon Sep 17 00:00:00 2001 From: nekobako Date: Sun, 15 Sep 2024 14:52:56 +0900 Subject: [PATCH] fix: incorrect default value for single menu item with automatic value --- Editor/ReactiveObjects/ParameterAssignerPass.cs | 14 +++++--------- .../AutoValueAssignmentTests.cs | 15 +++++++++++---- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Editor/ReactiveObjects/ParameterAssignerPass.cs b/Editor/ReactiveObjects/ParameterAssignerPass.cs index 5bfa59f7..1f3ff8c4 100644 --- a/Editor/ReactiveObjects/ParameterAssignerPass.cs +++ b/Editor/ReactiveObjects/ParameterAssignerPass.cs @@ -96,10 +96,10 @@ namespace nadena.dev.modular_avatar.core.editor { defaultValue = list.FirstOrDefault(m => m.isDefault && !m.automaticValue)?.Control?.value ?? 0; - if (list.Count == 1) - // If we have only a single entry, it's probably an on-off toggle, so we'll implicitly let 0 - // be the 'unselected' default value (if this is not default) - defaultValue = 0; + 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 + // be the 'selected' default value (if this is default and automatic value) + defaultValue = 1; } HashSet usedValues = new(); @@ -124,11 +124,7 @@ namespace nadena.dev.modular_avatar.core.editor { if (mami.automaticValue) { - if (list.Count == 1) - { - mami.Control.value = 1; - } - else if (mami.isDefault) + if (mami.isDefault) { mami.Control.value = defaultValue; } diff --git a/UnitTests~/ReactiveComponent/ParameterAssignment/AutoValueAssignmentTests.cs b/UnitTests~/ReactiveComponent/ParameterAssignment/AutoValueAssignmentTests.cs index 62c3745c..ce0bd961 100644 --- a/UnitTests~/ReactiveComponent/ParameterAssignment/AutoValueAssignmentTests.cs +++ b/UnitTests~/ReactiveComponent/ParameterAssignment/AutoValueAssignmentTests.cs @@ -16,10 +16,14 @@ namespace UnitTests.ReactiveComponent.ParameterAssignment [Test] public void ManuallyAssignedParametersAreNotReplaced() { - TestAssignments( - new[] { (false, 1.0f), (false, 4.0f) }, - new[] { 1.0f, 4.0f } - ); + TestAssignments(new[] { (false, 1.0f) }, new[] { 1.0f }); + TestAssignments(new[] { (false, 1.0f) }, new[] { 1.0f }, 0); + + TestAssignments(new[] { (false, 4.0f) }, new[] { 4.0f }); + TestAssignments(new[] { (false, 4.0f) }, new[] { 4.0f }, 0); + + TestAssignments(new[] { (false, 1.0f), (false, 4.0f) }, new[] { 1.0f, 4.0f }); + TestAssignments(new[] { (false, 1.0f), (false, 4.0f) }, new[] { 1.0f, 4.0f }, 0); } [Test] @@ -98,6 +102,9 @@ namespace UnitTests.ReactiveComponent.ParameterAssignment { Assert.AreEqual(expected, mami.Control.value); } + + var expectedDefaultValue = defaultIndex.HasValue ? expectedAssignments[defaultIndex.Value] : 0; + Assert.AreEqual(expectedDefaultValue, avDesc.expressionParameters.parameters.Single().defaultValue); } } } \ No newline at end of file