Add ClonedMenuMappings

This commit is contained in:
raiti-chan 2022-12-17 00:06:06 +09:00
parent f7a1cf9b37
commit 96f65000af
2 changed files with 39 additions and 0 deletions

View File

@ -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<VRCExpressionsMenu, ImmutableArray<VRCExpressionsMenu>> ClonedMappings =
new Dictionary<VRCExpressionsMenu, ImmutableArray<VRCExpressionsMenu>>();
private static Dictionary<VRCExpressionsMenu, VRCExpressionsMenu> OriginalMapping =
new Dictionary<VRCExpressionsMenu, VRCExpressionsMenu>();
public static void Clear() {
ClonedMappings.Clear();
OriginalMapping.Clear();
}
public static void Add(VRCExpressionsMenu original, VRCExpressionsMenu clonedMenu) {
if (!ClonedMappings.TryGetValue(original, out ImmutableArray<VRCExpressionsMenu> clonedMenus)) {
clonedMenus = ImmutableArray<VRCExpressionsMenu>.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<VRCExpressionsMenu> clonedMenus) {
return ClonedMappings.TryGetValue(original, out clonedMenus);
}
public static VRCExpressionsMenu GetOriginal(VRCExpressionsMenu cloned) {
return OriginalMapping.TryGetValue(cloned, out VRCExpressionsMenu original) ? original : null;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aeaeff9c3af44683bb2f8f5fe6c5791d
timeCreated: 1671016064