Advertisement
Mikilo

GetCurrentEditorWindow

Feb 25th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.25 KB | None | 0 0
  1. private static bool         initializeCurrentEditorWindowMetadata;
  2. private static PropertyInfo current;
  3. private static FieldInfo    m_ActualView;
  4.  
  5. public static EditorWindow  GetCurrentEditorWindow()
  6. {
  7.     if (Utility.initializeCurrentEditorWindowMetadata == false)
  8.     {
  9.         Utility.initializeCurrentEditorWindowMetadata = true;
  10.         Utility.LazyInitializeCurrentEditorWindowMetadata();
  11.     }
  12.  
  13.     if (Utility.current == null)
  14.         return null;
  15.  
  16.     object  guiView = Utility.current.GetValue(null, null);
  17.  
  18.     if (guiView != null)
  19.         return Utility.m_ActualView.GetValue(guiView) as EditorWindow;
  20.     return null;
  21. }
  22.  
  23. [AssemblyVerifier]
  24. private static void LazyInitializeCurrentEditorWindowMetadata()
  25. {
  26.     Type    GUIViewType = AssemblyVerifier.TryGetType(typeof(Editor).Assembly, "UnityEditor.GUIView");
  27.     if (GUIViewType != null)
  28.     {
  29.         Utility.current = AssemblyVerifier.TryGetProperty(GUIViewType, "current", BindingFlags.Public | BindingFlags.Static);
  30.  
  31.         Type    HostViewType = AssemblyVerifier.TryGetType(typeof(Editor).Assembly, "UnityEditor.HostView");
  32.         if (HostViewType != null)
  33.             Utility.m_ActualView = AssemblyVerifier.TryGetField(HostViewType, "m_ActualView", BindingFlags.NonPublic | BindingFlags.Instance);
  34.  
  35.         if (Utility.m_ActualView == null)
  36.             Utility.current = null;
  37.     }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement