You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/Plugins/Smart-Inspector/Base/Reflected/PropertyEditorRef.cs

46 lines
1.5 KiB
C#

3 months ago
using System;
using System.Reflection;
using HarmonyLib;
using UnityEditor;
using UnityEngine;
using static System.Linq.Expressions.Expression;
using Object = UnityEngine.Object;
namespace AV.Inspector
{
internal static class PropertyEditorRef
{
internal static Type type { get; } =
#if UNITY_2020_1_OR_NEWER
typeof(Editor).Assembly.GetType("UnityEditor.PropertyEditor");
#else
typeof(Editor).Assembly.GetType("UnityEditor.InspectorWindow");
#endif
static readonly PropertyInfo tracker = AccessTools.Property(type, "tracker");
public static readonly Func<EditorWindow, Object> GetInspectedObject;
static PropertyEditorRef()
{
var getInspectedObjectRef = type.GetMethod("GetInspectedObject", BindingFlags.NonPublic | BindingFlags.Instance);
var windowParam = Parameter(typeof(EditorWindow));
GetInspectedObject = Lambda<Func<EditorWindow, Object>>(Call(Convert(windowParam, type), getInspectedObjectRef), windowParam).Compile();
}
public static ActiveEditorTracker GetTracker(object propertyEditor)
{
return (ActiveEditorTracker)tracker.GetValue(propertyEditor);
}
public static void RebuildAllInspectors()
{
foreach (var window in Resources.FindObjectsOfTypeAll(type))
{
var tracker = GetTracker(window);
tracker.ForceRebuild();
}
}
}
}