From 96f65000af57f544f0a9456815b4c63336621fe9 Mon Sep 17 00:00:00 2001 From: raiti-chan Date: Sat, 17 Dec 2022 00:06:06 +0900 Subject: [PATCH] Add ClonedMenuMappings --- .../Editor/ClonedMenuMappings.cs | 36 +++++++++++++++++++ .../Editor/ClonedMenuMappings.cs.meta | 3 ++ 2 files changed, 39 insertions(+) create mode 100644 Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs create mode 100644 Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs.meta diff --git a/Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs b/Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs new file mode 100644 index 00000000..6f84950e --- /dev/null +++ b/Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.Collections.Immutable; +using VRC.SDK3.Avatars.ScriptableObjects; + +// ReSharper disable once CheckNamespace +namespace nadena.dev.modular_avatar.core.editor { + public static class ClonedMenuMappings { + private static Dictionary> ClonedMappings = + new Dictionary>(); + + private static Dictionary OriginalMapping = + new Dictionary(); + + public static void Clear() { + ClonedMappings.Clear(); + OriginalMapping.Clear(); + } + + public static void Add(VRCExpressionsMenu original, VRCExpressionsMenu clonedMenu) { + if (!ClonedMappings.TryGetValue(original, out ImmutableArray clonedMenus)) { + clonedMenus = ImmutableArray.Empty; + } + // Usually, one menu is rarely duplicated in multiple menus, so don't bother using a Builder + ClonedMappings[original] = clonedMenus.Add(clonedMenu); + OriginalMapping[clonedMenu] = original; + } + + public static bool TryGetClonedMenus(VRCExpressionsMenu original, out ImmutableArray clonedMenus) { + return ClonedMappings.TryGetValue(original, out clonedMenus); + } + + public static VRCExpressionsMenu GetOriginal(VRCExpressionsMenu cloned) { + return OriginalMapping.TryGetValue(cloned, out VRCExpressionsMenu original) ? original : null; + } + } +} \ No newline at end of file diff --git a/Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs.meta b/Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs.meta new file mode 100644 index 00000000..656acaab --- /dev/null +++ b/Packages/nadena.dev.modular-avatar/Editor/ClonedMenuMappings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aeaeff9c3af44683bb2f8f5fe6c5791d +timeCreated: 1671016064 \ No newline at end of file