From a6cde1fbe915818c56ece3a2c48d01def3c601ad Mon Sep 17 00:00:00 2001 From: bd_ Date: Fri, 31 Jan 2025 17:46:03 -0800 Subject: [PATCH] fix: menu assets referenced by Menu Installer aren't renamed correctly Closes: #1414 --- Editor/BuildContext.cs | 21 +- Editor/Menu/VirtualMenu.cs | 23 +- Editor/RenameParametersHook.cs | 12 + .../MenuItem-SubMenuIsRenamed-Issue1414.meta | 8 + .../Issue1414.prefab | 446 ++++++++++++++++++ .../Issue1414.prefab.meta | 7 + .../MenuItemSubmenusAreRenamed.cs | 25 + .../MenuItemSubmenusAreRenamed.cs.meta | 11 + .../TestMenu.asset | 26 + .../TestMenu.asset.meta | 8 + .../TestParameter.asset | 21 + .../TestParameter.asset.meta | 8 + 12 files changed, 596 insertions(+), 20 deletions(-) create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414.meta create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab.meta create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs.meta create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset.meta create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset create mode 100644 UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset.meta diff --git a/Editor/BuildContext.cs b/Editor/BuildContext.cs index b1dfa3fc..1783dd85 100644 --- a/Editor/BuildContext.cs +++ b/Editor/BuildContext.cs @@ -1,23 +1,21 @@ -using System; +#if MA_VRCSDK3_AVATARS +using VRC.SDK3.Avatars.Components; +using VRC.SDK3.Avatars.ScriptableObjects; +#endif +using System; using System.Collections.Generic; using nadena.dev.modular_avatar.animation; using nadena.dev.ndmf; using UnityEditor; using UnityEditor.Animations; using UnityEngine; - -#if MA_VRCSDK3_AVATARS -using VRC.SDK3.Avatars.Components; -using VRC.SDK3.Avatars.ScriptableObjects; -#endif - using Object = UnityEngine.Object; namespace nadena.dev.modular_avatar.core.editor { internal class BuildContext { - internal readonly nadena.dev.ndmf.BuildContext PluginBuildContext; + internal readonly ndmf.BuildContext PluginBuildContext; #if MA_VRCSDK3_AVATARS internal VRCAvatarDescriptor AvatarDescriptor => PluginBuildContext.AvatarDescriptor; @@ -31,7 +29,7 @@ internal class BuildContext internal PathMappings PathMappings => PluginBuildContext.Extension().PathMappings; - internal UnityEngine.Object AssetContainer => PluginBuildContext.AssetContainer; + internal Object AssetContainer => PluginBuildContext.AssetContainer; private bool SaveImmediate = false; @@ -44,13 +42,12 @@ internal readonly Dictionary ClonedMenus /// replace the source menu for the purposes of identifying any other MAMIs that might install to the same /// menu asset. /// - internal readonly Dictionary> PostProcessControls - = new Dictionary>(); + internal readonly Dictionary> PostProcessControls = new(); #endif public static implicit operator BuildContext(ndmf.BuildContext ctx) => ctx.Extension().BuildContext; - public BuildContext(nadena.dev.ndmf.BuildContext PluginBuildContext) + public BuildContext(ndmf.BuildContext PluginBuildContext) { this.PluginBuildContext = PluginBuildContext; } diff --git a/Editor/Menu/VirtualMenu.cs b/Editor/Menu/VirtualMenu.cs index c50ee654..d7701347 100644 --- a/Editor/Menu/VirtualMenu.cs +++ b/Editor/Menu/VirtualMenu.cs @@ -11,6 +11,7 @@ using UnityEngine; using VRC.SDK3.Avatars.Components; using VRC.SDK3.Avatars.ScriptableObjects; +using Object = UnityEngine.Object; namespace nadena.dev.modular_avatar.core.editor.menu { @@ -41,9 +42,9 @@ internal delegate VirtualMenuNode private readonly ImmutableDictionary> _menuToInstallerMap; - private readonly ImmutableDictionary> + private readonly ImmutableDictionary> _postProcessControls - = ImmutableDictionary>.Empty; + = ImmutableDictionary>.Empty; private readonly VirtualMenuNode _node; private readonly NodeForDelegate _nodeFor; @@ -76,7 +77,7 @@ public NodeContextImpl( VirtualMenuNode node, NodeForDelegate nodeFor, ImmutableDictionary> menuToInstallerMap, - ImmutableDictionary> postProcessControls, + ImmutableDictionary> postProcessControls, Action visitedMenu, Action postprocessor ) @@ -128,7 +129,13 @@ public void PushNode(MenuSource source) if (_visited.Contains(source)) return; _visited.Add(source); - BuildReport.ReportingObject(source as UnityEngine.Object, () => source.Visit(this)); + var sourceObj = source as Object; + var postProcessor = sourceObj != null ? _postProcessControls.GetValueOrDefault(sourceObj) : default; + + using (new PostprocessorContext(this, postProcessor)) + { + BuildReport.ReportingObject(source as Object, () => source.Visit(this)); + } _visited.Remove(source); } @@ -229,9 +236,9 @@ private Dictionary> _targetMenuToInstal private Dictionary> _installerToTargetComponent = new Dictionary>(); - private ImmutableDictionary> + private ImmutableDictionary> _postprocessControlsHooks = - ImmutableDictionary>.Empty; + ImmutableDictionary>.Empty; private Dictionary _resolvedMenu = new Dictionary(); @@ -406,7 +413,7 @@ VirtualMenuNode NodeFor(object key, Action postproce _pendingGeneration.Enqueue(() => { - BuildReport.ReportingObject(key as UnityEngine.Object, () => + BuildReport.ReportingObject(key as Object, () => { var context = new NodeContextImpl(node, NodeFor, menuToInstallerFiltered, _postprocessControlsHooks, @@ -431,7 +438,7 @@ VirtualMenuNode NodeFor(object key, Action postproce } } - internal VRCExpressionsMenu SerializeMenu(Action SaveAsset) + internal VRCExpressionsMenu SerializeMenu(Action SaveAsset) { Dictionary serializedMenus = new Dictionary(); diff --git a/Editor/RenameParametersHook.cs b/Editor/RenameParametersHook.cs index afbf83ba..02de614c 100644 --- a/Editor/RenameParametersHook.cs +++ b/Editor/RenameParametersHook.cs @@ -439,6 +439,18 @@ GameObject obj } } + if (menuItem.Control.type == VRCExpressionsMenu.Control.ControlType.SubMenu) + { + _context.PostProcessControls.Add(menuItem, control => + { + control.parameter.name = remap(remaps, control.parameter.name); + foreach (var subParam in control.subParameters) + { + subParam.name = remap(remaps, subParam.name); + } + }); + } + break; } } diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414.meta b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414.meta new file mode 100644 index 00000000..511b58b3 --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d27a3d2e3ba70b842b525ba6ed302be1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab new file mode 100644 index 00000000..3e7041b6 --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab @@ -0,0 +1,446 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4141761180637574822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6736570768048215942} + - component: {fileID: 1996617268122238853} + - component: {fileID: 2253435849215167742} + m_Layer: 0 + m_Name: menuitem-submenu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6736570768048215942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4141761180637574822} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1195159552950649908} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1996617268122238853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4141761180637574822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b29d45007c5493d926d2cd45a489529, type: 3} + m_Name: + m_EditorClassIdentifier: + Control: + name: + icon: {fileID: 0} + type: 103 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 11400000, guid: 3769532da5e863e40a82660c073b1c0e, type: 2} + subParameters: [] + labels: [] + MenuSource: 0 + menuSource_otherObjectChildren: {fileID: 0} + isSynced: 1 + isSaved: 1 + isDefault: 0 + automaticValue: 1 + label: +--- !u!114 &2253435849215167742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4141761180637574822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ef83cb0c23d4d7c9d41021e544a1978, type: 3} + m_Name: + m_EditorClassIdentifier: + menuToAppend: {fileID: 0} + installTargetMenu: {fileID: 0} +--- !u!1 &4700416093747858563 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1195159552950649908} + - component: {fileID: 7166994706586842511} + m_Layer: 0 + m_Name: parameters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1195159552950649908 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4700416093747858563} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.27075344, y: -1.2841506, z: 0.62660336} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 6736570768048215942} + m_Father: {fileID: 8917138092303870328} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7166994706586842511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4700416093747858563} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71a96d4ea0c344f39e277d82035bf9bd, type: 3} + m_Name: + m_EditorClassIdentifier: + parameters: + - nameOrPrefix: testparameter + remapTo: + internalParameter: 1 + isPrefix: 0 + syncType: 3 + localOnly: 0 + defaultValue: 0 + saved: 0 + hasExplicitDefaultValue: 0 + m_overrideAnimatorDefaults: 0 +--- !u!1 &6509987416864043123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8917138092303870328} + - component: {fileID: 1070243091863543787} + - component: {fileID: 730373452759752028} + m_Layer: 0 + m_Name: Issue1414 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8917138092303870328 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6509987416864043123} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.27075344, y: 1.2841506, z: -0.62660336} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1195159552950649908} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1070243091863543787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6509987416864043123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 542108242, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + Name: + ViewPosition: {x: 0, y: 1.6, z: 0.2} + Animations: 0 + ScaleIPD: 1 + lipSync: 0 + lipSyncJawBone: {fileID: 0} + lipSyncJawClosed: {x: 0, y: 0, z: 0, w: 1} + lipSyncJawOpen: {x: 0, y: 0, z: 0, w: 1} + VisemeSkinnedMesh: {fileID: 0} + MouthOpenBlendShapeName: Facial_Blends.Jaw_Down + VisemeBlendShapes: [] + unityVersion: + portraitCameraPositionOffset: {x: 0, y: 0, z: 0} + portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139} + networkIDs: [] + customExpressions: 0 + expressionsMenu: {fileID: 0} + expressionParameters: {fileID: 0} + enableEyeLook: 0 + customEyeLookSettings: + eyeMovement: + confidence: 0.5 + excitement: 0.5 + leftEye: {fileID: 0} + rightEye: {fileID: 0} + eyesLookingStraight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingUp: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingDown: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingLeft: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingRight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidType: 0 + upperLeftEyelid: {fileID: 0} + upperRightEyelid: {fileID: 0} + lowerLeftEyelid: {fileID: 0} + lowerRightEyelid: {fileID: 0} + eyelidsDefault: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsClosed: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingUp: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingDown: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsSkinnedMesh: {fileID: 0} + eyelidsBlendshapes: + customizeAnimationLayers: 0 + baseAnimationLayers: + - isEnabled: 0 + type: 0 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 2 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 3 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 4 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 5 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + specialAnimationLayers: + - isEnabled: 0 + type: 6 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 7 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 8 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + AnimationPreset: {fileID: 0} + animationHashSet: [] + autoFootsteps: 1 + autoLocomotion: 1 + collider_head: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_torso: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} +--- !u!114 &730373452759752028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6509987416864043123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_Name: + m_EditorClassIdentifier: + launchedFromSDKPipeline: 0 + completedSDKPipeline: 0 + blueprintId: + contentType: 0 + assetBundleUnityVersion: + fallbackStatus: 0 diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab.meta b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab.meta new file mode 100644 index 00000000..c43a23ab --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/Issue1414.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f3b0ca4e7d7ab944eb56886e04580748 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs new file mode 100644 index 00000000..7b09f80f --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs @@ -0,0 +1,25 @@ +#if MA_VRCSDK3_AVATARS + +using modular_avatar_tests; +using nadena.dev.modular_avatar.core.editor; +using NUnit.Framework; +using VRC.SDK3.Avatars.Components; + +public class MenuItemSubmenusAreRenamed : TestBase +{ + [Test] + public void TestMenuItemSubmenusAreRenamed() + { + var root = CreatePrefab("Issue1414.prefab"); + + AvatarProcessor.ProcessAvatar(root); + + var menu = root.GetComponent().expressionsMenu; + var submenu = menu.controls[0].subMenu; + var button = submenu.controls[0]; + + Assert.AreNotEqual(button.parameter.name, "testparameter"); + } +} + +#endif \ No newline at end of file diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs.meta b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs.meta new file mode 100644 index 00000000..2e583cb3 --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/MenuItemSubmenusAreRenamed.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcf33026126c04b4e83f31ae6a798c69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset new file mode 100644 index 00000000..63386cb8 --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset @@ -0,0 +1,26 @@ +%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: TestMenu + m_EditorClassIdentifier: + Parameters: {fileID: 11400000, guid: 830e0e68e0fa83a40bb5908bb325eab2, type: 2} + controls: + - name: TestButton + icon: {fileID: 0} + type: 102 + parameter: + name: testparameter + value: 0 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset.meta b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset.meta new file mode 100644 index 00000000..9ed1f5c7 --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestMenu.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3769532da5e863e40a82660c073b1c0e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset new file mode 100644 index 00000000..4a4a0f20 --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset @@ -0,0 +1,21 @@ +%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: TestParameter + m_EditorClassIdentifier: + isEmpty: 0 + parameters: + - name: testparameter + valueType: 2 + saved: 0 + defaultValue: 0 + networkSynced: 0 diff --git a/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset.meta b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset.meta new file mode 100644 index 00000000..893b77df --- /dev/null +++ b/UnitTests~/RenameParametersTests/MenuItem-SubMenuIsRenamed-Issue1414/TestParameter.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 830e0e68e0fa83a40bb5908bb325eab2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: