mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-04-24 13:29:01 +08:00
fix: untranslated warning generated when multiple parameters remap to the same name (#698)
* fix: untranslated warning generated when multiple parameters remap to the same name Fixed by allowing this case and applying normal parameter type resolution rules. Closes: #694 * chore: enable accidentally disabled unit test
This commit is contained in:
parent
2f67b9509b
commit
8c435874ac
@ -609,7 +609,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
ref ImmutableDictionary<string, string> prefixRemaps
|
ref ImmutableDictionary<string, string> prefixRemaps
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ImmutableDictionary<string, ParameterInfo> rv = ImmutableDictionary<string, ParameterInfo>.Empty;
|
ImmutableDictionary<string, ParameterInfo> parameterInfos = ImmutableDictionary<string, ParameterInfo>.Empty;
|
||||||
|
|
||||||
foreach (var param in p.parameters)
|
foreach (var param in p.parameters)
|
||||||
{
|
{
|
||||||
@ -656,11 +656,6 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
|
|
||||||
if (!param.isPrefix)
|
if (!param.isPrefix)
|
||||||
{
|
{
|
||||||
if (rv.ContainsKey(remapTo))
|
|
||||||
{
|
|
||||||
BuildReport.Log(ErrorSeverity.NonFatal, "error.rename_params.duplicate_parameter", param.nameOrPrefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
ParameterConfig parameterConfig = param;
|
ParameterConfig parameterConfig = param;
|
||||||
parameterConfig.nameOrPrefix = remapTo;
|
parameterConfig.nameOrPrefix = remapTo;
|
||||||
parameterConfig.remapTo = null;
|
parameterConfig.remapTo = null;
|
||||||
@ -679,11 +674,18 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
info.DefaultSources.Add(p);
|
info.DefaultSources.Add(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = rv.SetItem(remapTo, info);
|
if (parameterInfos.TryGetValue(remapTo, out var existing))
|
||||||
|
{
|
||||||
|
existing.MergeSibling(info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parameterInfos = parameterInfos.SetItem(remapTo, info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return parameterInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is generic to simplify remapping parameter driver fields, some of which are 'object's.
|
// This is generic to simplify remapping parameter driver fields, some of which are 'object's.
|
||||||
|
@ -6,12 +6,14 @@ using System.Collections.Immutable;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using nadena.dev.modular_avatar.core;
|
using nadena.dev.modular_avatar.core;
|
||||||
using nadena.dev.modular_avatar.core.editor;
|
using nadena.dev.modular_avatar.core.editor;
|
||||||
|
using nadena.dev.modular_avatar.editor.ErrorReporting;
|
||||||
using nadena.dev.ndmf;
|
using nadena.dev.ndmf;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using UnityEditor.Animations;
|
using UnityEditor.Animations;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using VRC.SDK3.Avatars.Components;
|
using VRC.SDK3.Avatars.Components;
|
||||||
using VRC.SDK3.Avatars.ScriptableObjects;
|
using VRC.SDK3.Avatars.ScriptableObjects;
|
||||||
|
using VRC.SDK3.Dynamics.Contact.Components;
|
||||||
using AvatarProcessor = nadena.dev.modular_avatar.core.editor.AvatarProcessor;
|
using AvatarProcessor = nadena.dev.modular_avatar.core.editor.AvatarProcessor;
|
||||||
|
|
||||||
namespace modular_avatar_tests.RenameParametersTests
|
namespace modular_avatar_tests.RenameParametersTests
|
||||||
@ -158,6 +160,7 @@ namespace modular_avatar_tests.RenameParametersTests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
public void SavedParameterResolution()
|
public void SavedParameterResolution()
|
||||||
{
|
{
|
||||||
var prefab = CreatePrefab("SavedParamResolution.prefab");
|
var prefab = CreatePrefab("SavedParamResolution.prefab");
|
||||||
@ -175,6 +178,77 @@ namespace modular_avatar_tests.RenameParametersTests
|
|||||||
Assert.IsFalse(expParams["e"].saved);
|
Assert.IsFalse(expParams["e"].saved);
|
||||||
Assert.IsTrue(expParams["f"].saved);
|
Assert.IsTrue(expParams["f"].saved);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestMultipleRemappings()
|
||||||
|
{
|
||||||
|
var av = CreateRoot("avatar");
|
||||||
|
|
||||||
|
var parameters = av.AddComponent<ModularAvatarParameters>();
|
||||||
|
|
||||||
|
parameters.parameters = new List<ParameterConfig>()
|
||||||
|
{
|
||||||
|
new ParameterConfig()
|
||||||
|
{
|
||||||
|
nameOrPrefix = "a",
|
||||||
|
remapTo = "z",
|
||||||
|
syncType = ParameterSyncType.Float
|
||||||
|
},
|
||||||
|
new ParameterConfig()
|
||||||
|
{
|
||||||
|
nameOrPrefix = "b",
|
||||||
|
remapTo = "z",
|
||||||
|
syncType = ParameterSyncType.Float
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
var c1 = av.AddComponent<VRCContactReceiver>();
|
||||||
|
c1.parameter = "a";
|
||||||
|
|
||||||
|
var c2 = av.AddComponent<VRCContactReceiver>();
|
||||||
|
c2.parameter = "a";
|
||||||
|
|
||||||
|
var context = CreateContext(av);
|
||||||
|
var maContext = context.ActivateExtensionContext<ModularAvatarContext>().BuildContext;
|
||||||
|
|
||||||
|
var errors = ErrorReport.CaptureErrors(() => new RenameParametersHook().OnPreprocessAvatar(av, maContext));
|
||||||
|
|
||||||
|
Assert.IsEmpty(errors);
|
||||||
|
|
||||||
|
Assert.AreEqual("z", c1.parameter);
|
||||||
|
Assert.AreEqual("z", c2.parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestMultipleRemappings_WithConflict()
|
||||||
|
{
|
||||||
|
var av = CreateRoot("avatar");
|
||||||
|
|
||||||
|
var parameters = av.AddComponent<ModularAvatarParameters>();
|
||||||
|
|
||||||
|
parameters.parameters = new List<ParameterConfig>()
|
||||||
|
{
|
||||||
|
new ParameterConfig()
|
||||||
|
{
|
||||||
|
nameOrPrefix = "a",
|
||||||
|
remapTo = "z",
|
||||||
|
syncType = ParameterSyncType.Float
|
||||||
|
},
|
||||||
|
new ParameterConfig()
|
||||||
|
{
|
||||||
|
nameOrPrefix = "b",
|
||||||
|
remapTo = "z",
|
||||||
|
syncType = ParameterSyncType.Int
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
var context = CreateContext(av);
|
||||||
|
var maContext = context.ActivateExtensionContext<ModularAvatarContext>().BuildContext;
|
||||||
|
|
||||||
|
var errors = ErrorReport.CaptureErrors(() => new RenameParametersHook().OnPreprocessAvatar(av, maContext));
|
||||||
|
|
||||||
|
Assert.IsNotEmpty(errors);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user