Skip to content

Commit

Permalink
fix: NotSynced parameters become synced when merging (#1347)
Browse files Browse the repository at this point in the history
Closes: #1342
  • Loading branch information
bdunderscore authored Nov 17, 2024
1 parent 4405d7a commit 30512c2
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Editor/ParamsUsage/MAParametersIntrospection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public IEnumerable<ProvidedParameter> GetSuppliedParameters(ndmf.BuildContext co
_component, PluginDefinition.Instance, paramType)
{
IsAnimatorOnly = animatorOnly,
WantSynced = !p.localOnly,
WantSynced = !p.localOnly && !animatorOnly,
IsHidden = p.internalParameter,
DefaultValue = p.defaultValue
};
Expand Down
2 changes: 2 additions & 0 deletions Editor/RenameParametersHook.cs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ void MergeCommon(ParameterInfo info)
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;
Expand Down Expand Up @@ -734,6 +735,7 @@ private ImmutableDictionary<string, ParameterInfo> CollectParameters(ModularAvat
ParameterConfig parameterConfig = param;
parameterConfig.nameOrPrefix = remapTo;
parameterConfig.remapTo = remapTo;
parameterConfig.localOnly = parameterConfig.localOnly || param.syncType == ParameterSyncType.NotSynced;
var info = new ParameterInfo()
{
ResolvedParameter = parameterConfig,
Expand Down
39 changes: 39 additions & 0 deletions UnitTests~/RenameParametersTests/RenameParametersTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,45 @@ public void RecursiveRenameTest()

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);
}
}
}

Expand Down

0 comments on commit 30512c2

Please sign in to comment.