using System.Diagnostics.CodeAnalysis; using UnityEditor; using UnityEngine; namespace Phantom.XRMOD.UnityFusion.Editor { [InitializeOnLoad] internal static class ComponentHeaderWrapperToInspectorInjector { static ComponentHeaderWrapperToInspectorInjector() { UnityEditor.Editor.finishedDefaultHeaderGUI -= AfterInspectorRootEditorHeaderGUI; UnityEditor.Editor.finishedDefaultHeaderGUI += AfterInspectorRootEditorHeaderGUI; } private static void AfterInspectorRootEditorHeaderGUI(UnityEditor.Editor editor) { if (editor.target is GameObject) { // Handle InspectorWindow AfterGameObjectHeaderGUI(editor); return; } if (editor.target is Component) { // Handle PropertyEditor window opened via "Properties..." context menu item AfterComponentPropertiesHeaderGUI(editor); } } private static void AfterGameObjectHeaderGUI([DisallowNull] UnityEditor.Editor gameObjectEditor) { foreach (var editorsAndHeaders in InspectorContents.GetComponentHeaderElementsFromInspectorWindows( gameObjectEditor)) { foreach (var editorAndHeader in editorsAndHeaders) { ComponentHeaderWrapper.WrapIfNotAlreadyWrapped(editorAndHeader, true); } } } private static void AfterComponentPropertiesHeaderGUI([DisallowNull] UnityEditor.Editor componentEditor) { foreach (var editorAndHeader in InspectorContents.GetComponentHeaderElementFromPropertyEditorWindows( componentEditor)) { ComponentHeaderWrapper.WrapIfNotAlreadyWrapped(editorAndHeader, false); } } } }