fix: NotSynced parameters become synced when merging (#1347)

Closes: #1342
This commit is contained in:
bd_ 2024-11-16 19:02:32 -08:00 committed by GitHub
parent 4405d7aa56
commit 30512c26e8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 42 additions and 1 deletions

View File

@ -87,7 +87,7 @@ namespace nadena.dev.modular_avatar.core.editor
_component, PluginDefinition.Instance, paramType)
{
IsAnimatorOnly = animatorOnly,
WantSynced = !p.localOnly,
WantSynced = !p.localOnly && !animatorOnly,
IsHidden = p.internalParameter,
DefaultValue = p.defaultValue
};

View File

@ -136,6 +136,7 @@ namespace nadena.dev.modular_avatar.core.editor
if (ResolvedParameter.syncType == ParameterSyncType.NotSynced)
{
ResolvedParameter.syncType = info.ResolvedParameter.syncType;
ResolvedParameter.localOnly = info.ResolvedParameter.localOnly;
} else if (ResolvedParameter.syncType != info.ResolvedParameter.syncType && info.ResolvedParameter.syncType != ParameterSyncType.NotSynced)
{
TypeConflict = true;
@ -734,6 +735,7 @@ namespace nadena.dev.modular_avatar.core.editor
ParameterConfig parameterConfig = param;
parameterConfig.nameOrPrefix = remapTo;
parameterConfig.remapTo = remapTo;
parameterConfig.localOnly = parameterConfig.localOnly || param.syncType == ParameterSyncType.NotSynced;
var info = new ParameterInfo()
{
ResolvedParameter = parameterConfig,

View File

@ -306,6 +306,45 @@ namespace modular_avatar_tests.RenameParametersTests
Assert.AreNotEqual(fuga.name, "Fuga"); // should be auto-renamed
}
[Test]
public void AnimatorOnlyAndLocalParameterShouldNotSync()
{
var root = CreateRoot("x");
var c1 = CreateChild(root, "c1");
var c2 = CreateChild(root, "c2");
var p1 = c1.AddComponent<ModularAvatarParameters>();
var p2 = c2.AddComponent<ModularAvatarParameters>();
p1.parameters = new()
{
new()
{
nameOrPrefix = "a",
syncType = ParameterSyncType.NotSynced,
localOnly = false
}
};
p2.parameters = new()
{
new()
{
nameOrPrefix = "a",
syncType = ParameterSyncType.Int,
localOnly = true
}
};
AvatarProcessor.ProcessAvatar(root);
var expParams = root.GetComponent<VRCAvatarDescriptor>().expressionParameters.parameters
.Select(p => new KeyValuePair<string, VRCExpressionParameters.Parameter>(p.name, p))
.ToImmutableDictionary();
Assert.IsFalse(expParams["a"].networkSynced);
}
}
}