mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-04-09 14:09:00 +08:00
fix: unused/hidden subparameters are retained and break builds (#914)
This commit is contained in:
parent
f3168253f6
commit
746a72f60b
@ -1,5 +1,6 @@
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
|
||||
using System.Linq;
|
||||
using nadena.dev.modular_avatar.core.menu;
|
||||
using UnityEngine;
|
||||
using VRC.SDK3.Avatars.ScriptableObjects;
|
||||
@ -56,6 +57,8 @@ namespace nadena.dev.modular_avatar.core
|
||||
cloned.subMenu = null;
|
||||
cloned.name = gameObject.name;
|
||||
|
||||
FilterSubParameters(cloned);
|
||||
|
||||
if (cloned.type == VRCExpressionsMenu.Control.ControlType.SubMenu)
|
||||
{
|
||||
switch (this.MenuSource)
|
||||
@ -77,6 +80,32 @@ namespace nadena.dev.modular_avatar.core
|
||||
|
||||
context.PushControl(cloned);
|
||||
}
|
||||
|
||||
private void FilterSubParameters(VirtualControl control)
|
||||
{
|
||||
var maxSubParams = 0;
|
||||
switch (control.type)
|
||||
{
|
||||
case VRCExpressionsMenu.Control.ControlType.Toggle:
|
||||
case VRCExpressionsMenu.Control.ControlType.Button:
|
||||
case VRCExpressionsMenu.Control.ControlType.SubMenu:
|
||||
default:
|
||||
maxSubParams = 0;
|
||||
break;
|
||||
case VRCExpressionsMenu.Control.ControlType.RadialPuppet:
|
||||
maxSubParams = 1;
|
||||
break;
|
||||
case VRCExpressionsMenu.Control.ControlType.TwoAxisPuppet:
|
||||
maxSubParams = 2;
|
||||
break;
|
||||
case VRCExpressionsMenu.Control.ControlType.FourAxisPuppet:
|
||||
maxSubParams = 4;
|
||||
break;
|
||||
}
|
||||
|
||||
if (control.subParameters.Length > maxSubParams)
|
||||
control.subParameters = control.subParameters.Take(maxSubParams).ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
1006
UnitTests~/VirtualMenuTests/UnusedSubParametersAreStripped.prefab
Normal file
1006
UnitTests~/VirtualMenuTests/UnusedSubParametersAreStripped.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1d9e70d7b7b965045ba1055b2a5b4df0
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
15
UnitTests~/VirtualMenuTests/VRCExpressionParameters.asset
Normal file
15
UnitTests~/VirtualMenuTests/VRCExpressionParameters.asset
Normal file
@ -0,0 +1,15 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: -1506855854, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
|
||||
m_Name: VRCExpressionParameters
|
||||
m_EditorClassIdentifier:
|
||||
parameters: []
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed707d3612602d44db77511dae4096d6
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
15
UnitTests~/VirtualMenuTests/VRCExpressionsMenu.asset
Normal file
15
UnitTests~/VirtualMenuTests/VRCExpressionsMenu.asset
Normal file
@ -0,0 +1,15 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
|
||||
m_Name: VRCExpressionsMenu
|
||||
m_EditorClassIdentifier:
|
||||
controls: []
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 233f883cffa916b4aa2bf329f41e65ac
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -670,6 +670,34 @@ namespace modular_avatar_tests.VirtualMenuTests
|
||||
.SubmenuNode.Controls[0].parameter.name);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void UnusedSubParametersAreStripped()
|
||||
{
|
||||
var root = CreatePrefab("UnusedSubParametersAreStripped.prefab");
|
||||
|
||||
BuildContext buildContext = new BuildContext(root.GetComponent<VRCAvatarDescriptor>());
|
||||
new RenameParametersHook().OnPreprocessAvatar(root, buildContext);
|
||||
var virtualMenu = VirtualMenu.ForAvatar(root.GetComponent<VRCAvatarDescriptor>(), buildContext);
|
||||
|
||||
// Button
|
||||
Assert.AreEqual(0, virtualMenu.RootMenuNode.Controls[0].SubmenuNode.Controls[0].subParameters.Length);
|
||||
|
||||
// Toggle
|
||||
Assert.AreEqual(0, virtualMenu.RootMenuNode.Controls[0].SubmenuNode.Controls[1].subParameters.Length);
|
||||
|
||||
// SubMenu
|
||||
Assert.AreEqual(0, virtualMenu.RootMenuNode.Controls[0].SubmenuNode.Controls[2].subParameters.Length);
|
||||
|
||||
// Two Axis
|
||||
Assert.AreEqual(2, virtualMenu.RootMenuNode.Controls[0].SubmenuNode.Controls[3].subParameters.Length);
|
||||
|
||||
// Radial
|
||||
Assert.AreEqual(1, virtualMenu.RootMenuNode.Controls[0].SubmenuNode.Controls[4].subParameters.Length);
|
||||
|
||||
// Four Axis
|
||||
Assert.AreEqual(4, virtualMenu.RootMenuNode.Controls[0].SubmenuNode.Controls[5].subParameters.Length);
|
||||
}
|
||||
|
||||
ModularAvatarMenuInstaller CreateInstaller(string name)
|
||||
{
|
||||
GameObject obj = new GameObject();
|
||||
@ -688,6 +716,7 @@ namespace modular_avatar_tests.VirtualMenuTests
|
||||
var control = GenerateTestControl();
|
||||
control.type = VRCExpressionsMenu.Control.ControlType.SubMenu;
|
||||
control.subMenu = menu;
|
||||
control.subParameters = Array.Empty<VRCExpressionsMenu.Control.Parameter>();
|
||||
|
||||
return control;
|
||||
}
|
||||
@ -719,13 +748,23 @@ namespace modular_avatar_tests.VirtualMenuTests
|
||||
icon = testTex
|
||||
}
|
||||
};
|
||||
control.subParameters = new[]
|
||||
if (control.type == VRCExpressionsMenu.Control.ControlType.RadialPuppet
|
||||
|| control.type == VRCExpressionsMenu.Control.ControlType.FourAxisPuppet
|
||||
|| control.type == VRCExpressionsMenu.Control.ControlType.TwoAxisPuppet)
|
||||
{
|
||||
new VRCExpressionsMenu.Control.Parameter()
|
||||
control.subParameters = new[]
|
||||
{
|
||||
name = "Test Sub Parameter " + GUID.Generate()
|
||||
}
|
||||
};
|
||||
new VRCExpressionsMenu.Control.Parameter()
|
||||
{
|
||||
name = "Test Sub Parameter " + GUID.Generate()
|
||||
}
|
||||
};
|
||||
} else
|
||||
{
|
||||
control.subParameters = Array.Empty<VRCExpressionsMenu.Control.Parameter>();
|
||||
}
|
||||
|
||||
|
||||
control.value = 0.42f;
|
||||
control.style = VRCExpressionsMenu.Control.Style.Style3;
|
||||
|
||||
@ -742,9 +781,22 @@ namespace modular_avatar_tests.VirtualMenuTests
|
||||
Assert.AreEqual(expected.labels.Length, actual.labels.Length);
|
||||
Assert.AreEqual(expected.labels[0].name, actual.labels[0].name);
|
||||
Assert.AreEqual(expected.labels[0].icon, actual.labels[0].icon);
|
||||
Assert.AreEqual(expected.subParameters.Length, actual.subParameters.Length);
|
||||
Assert.AreEqual(expected.subParameters[0].name, actual.subParameters[0].name);
|
||||
Assert.AreNotSame(expected.subParameters[0], actual.subParameters[0]);
|
||||
switch (expected.type)
|
||||
{
|
||||
case VRCExpressionsMenu.Control.ControlType.Button:
|
||||
case VRCExpressionsMenu.Control.ControlType.Toggle:
|
||||
case VRCExpressionsMenu.Control.ControlType.SubMenu:
|
||||
Assert.AreEqual(0, actual.subParameters.Length);
|
||||
break;
|
||||
default:
|
||||
{
|
||||
Assert.AreEqual(expected.subParameters.Length, actual.subParameters.Length);
|
||||
Assert.AreEqual(expected.subParameters[0].name, actual.subParameters[0].name);
|
||||
Assert.AreNotSame(expected.subParameters[0], actual.subParameters[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Assert.AreEqual(expected.value, actual.value);
|
||||
Assert.AreEqual(expected.style, actual.style);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user