diff --git a/Editor/ParamsUsage/ParamsUsagePrefs.cs b/Editor/ParamsUsage/ParamsUsagePrefs.cs new file mode 100644 index 00000000..e6ea1268 --- /dev/null +++ b/Editor/ParamsUsage/ParamsUsagePrefs.cs @@ -0,0 +1,40 @@ +using System; +using nadena.dev.modular_avatar.ui; +using UnityEditor; +using UnityEngine.Serialization; + +namespace nadena.dev.modular_avatar.core.editor +{ + #if UNITY_2022_3_OR_NEWER + [FilePath("modular-avatar/ParamsUsagePrefs.asset", FilePathAttribute.Location.PreferencesFolder)] + internal sealed class ParamsUsagePrefs : ScriptableSingleton + { + public static event Action OnChange_EnableInfoMenu; + + [FormerlySerializedAs("EnableInfoMenu")] public bool enableInfoMenu = true; + + [MenuItem(UnityMenuItems.TopMenu_EnableInfo, false, UnityMenuItems.TopMenu_EnableInfoOrder)] + private static void Menu_EnableInfo() + { + ParamsUsagePrefs.instance.enableInfoMenu = !ParamsUsagePrefs.instance.enableInfoMenu; + Menu.SetChecked(UnityMenuItems.TopMenu_EnableInfo, ParamsUsagePrefs.instance.enableInfoMenu); + ParamsUsagePrefs.instance.Save(true); + + OnChange_EnableInfoMenu?.Invoke(ParamsUsagePrefs.instance.enableInfoMenu); + } + + [InitializeOnLoadMethod] + private static void Initialize() + { + Menu.SetChecked(UnityMenuItems.TopMenu_EnableInfo, ParamsUsagePrefs.instance.enableInfoMenu); + } + } + #else + internal sealed class ParamsUsagePrefs + { + public static ParamsUsagePrefs instance => new ParamsUsagePrefs(); + public static event Action OnChange_EnableInfoMenu; + public bool enableInfoMenu => false; + } + #endif +} \ No newline at end of file diff --git a/Editor/ParamsUsage/ParamsUsagePrefs.cs.meta b/Editor/ParamsUsage/ParamsUsagePrefs.cs.meta new file mode 100644 index 00000000..c5975d10 --- /dev/null +++ b/Editor/ParamsUsage/ParamsUsagePrefs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3ebf965fd4064a52896def62c36c6a90 +timeCreated: 1713742583 \ No newline at end of file diff --git a/Editor/ParamsUsage/ParamsUsageUI.cs b/Editor/ParamsUsage/ParamsUsageUI.cs index f4275800..bd73a1c2 100644 --- a/Editor/ParamsUsage/ParamsUsageUI.cs +++ b/Editor/ParamsUsage/ParamsUsageUI.cs @@ -47,11 +47,19 @@ namespace nadena.dev.modular_avatar.core.editor (self) => self.OnLanguageChangedCallback()); } + private void OnChange_EnableState(bool enableState) + { + if (_editor != null) + { + Rebuild(); + } + } + private void OnLanguageChangedCallback() { if (_editor != null) { - BuildContent(); + Rebuild(); } } @@ -66,6 +74,8 @@ namespace nadena.dev.modular_avatar.core.editor Object.DestroyImmediate(_editor); _editor = null; } + + ParamsUsagePrefs.OnChange_EnableInfoMenu -= OnChange_EnableState; } private void OnAttach(AttachToPanelEvent evt) @@ -73,12 +83,20 @@ namespace nadena.dev.modular_avatar.core.editor if (_recursing) return; Rebuild(); + + ParamsUsagePrefs.OnChange_EnableInfoMenu += OnChange_EnableState; } private void Rebuild() { if (parent == null) return; + if (!ParamsUsagePrefs.instance.enableInfoMenu) + { + Clear(); + return; + } + SetRedrawSensor(); if (_gameObjectEditorElement?.parent != parent) diff --git a/Runtime/UI/UnityMenuItems.cs b/Runtime/UI/UnityMenuItems.cs index 47c5aaf0..b89b778c 100644 --- a/Runtime/UI/UnityMenuItems.cs +++ b/Runtime/UI/UnityMenuItems.cs @@ -5,10 +5,14 @@ internal const string TopMenu_EditModeBoneSync = "Tools/Modular Avatar/Sync Bones in Edit Mode"; internal const int TopMenu_EditModeBoneSyncOrder = 100; + internal const string TopMenu_EnableInfo = "Tools/Modular Avatar/Show Modular Avatar Information"; + internal const int TopMenu_EnableInfoOrder = 101; + internal const string TopMenu_ManualBakeAvatar = "Tools/Modular Avatar/Manual Bake Avatar"; internal const int TopMenu_ManualBakeAvatarOrder = 1000; internal const string TopMenu_ReloadLocalizations = "Tools/Modular Avatar/Reload Localizations"; internal const int TopMenu_ReloadLocalizationsOrder = 1001; + } } \ No newline at end of file