Files

193 lines
7.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityInternals = Unity.PlasticSCM.Editor.UnityInternals;
namespace Unity.Cloud.Collaborate
{
[InitializeOnLoad]
static class UnityInternalsInjector
{
static UnityInternalsInjector()
{
UnityInternals.UnityEditor.EditorGUI.ScrollableTextAreaInternal =
(Rect position, string text, ref Vector2 scrollPosition, GUIStyle style) =>
{
return EditorGUI.ScrollableTextAreaInternal(position, text, ref scrollPosition, style);
};
UnityInternals.UnityEditor.SettingsWindow.ShowInternal =
(SettingsScope scopes, string settingsPath) =>
{
SettingsWindow settingsWindow = SettingsWindow.Show(scopes, settingsPath);
if (settingsWindow == null)
return null;
return new UnityInternals.UnityEditor.SettingsWindow(settingsWindow);
};
UnityInternals.UnityEditor.SettingsWindow.GetCurrentProviderInternal =
(UnityInternals.UnityEditor.SettingsWindow settingsWindow) =>
{
return ((SettingsWindow)settingsWindow.InternalObject).GetCurrentProvider();
};
UnityInternals.UnityEditor.DockArea.AddTabInternal =
(UnityInternals.UnityEditor.DockArea dockArea, EditorWindow pane, bool sendPaneEvents) =>
{
((DockArea)dockArea.InternalObject).AddTab(pane, sendPaneEvents);
};
UnityInternals.UnityEditor.UnityEditorExtensions.m_ParentInternal =
(EditorWindow editorWindow) =>
{
HostView hostView = editorWindow.m_Parent;
if (hostView == null)
return null;
return new UnityInternals.UnityEditor.HostView(hostView);
};
UnityInternals.UnityEditor.HostView.GetActualViewInternal =
(UnityInternals.UnityEditor.HostView hostView) =>
{
FieldInfo actualViewField = typeof(HostView).GetField(
"m_ActualView",
BindingFlags.Instance | BindingFlags.NonPublic);
return actualViewField?.GetValue(hostView.InternalObject) as EditorWindow;
};
UnityInternals.UnityEditor.Menu.AddMenuItem =
(string name, string shortcut, bool @checked, int priority, Action execute, Func<bool> validate) =>
{
Menu.AddMenuItem(name, shortcut, @checked, priority, execute, validate);
};
UnityInternals.UnityEditor.Menu.RemoveMenuItem =
(string name) =>
{
Menu.RemoveMenuItem(name);
};
UnityInternals.UnityEditor.EditorUtility.Internal_UpdateAllMenus =
() =>
{
EditorUtility.Internal_UpdateAllMenus();
};
UnityInternals.UnityEditor.HostView.GetWindow =
(UnityInternals.UnityEditor.HostView hostView) =>
{
ContainerWindow containerWindow = ((HostView)hostView.InternalObject).window;
if (containerWindow == null)
return null;
return new UnityInternals.UnityEditor.ContainerWindow(containerWindow);
};
UnityInternals.UnityEditor.EditorWindow.Internal_MakeModal =
(UnityInternals.UnityEditor.ContainerWindow containerWindow) =>
{
EditorWindow.Internal_MakeModal((ContainerWindow)containerWindow.InternalObject);
};
UnityInternals.UnityEditor.UnityEditorExtensions.ShowWithModeInternal =
(EditorWindow editorWindow, int mode) =>
{
editorWindow.ShowWithMode((ShowMode)mode);
};
UnityInternals.UnityEditor.SavedGUIState.Create =
() =>
{
return new UnityInternals.UnityEditor.SavedGUIState(SavedGUIState.Create());
};
UnityInternals.UnityEditor.SavedGUIState.ApplyAndForgetInternal =
(UnityInternals.UnityEditor.SavedGUIState savedGUIState) =>
{
((SavedGUIState)savedGUIState.InternalObject).ApplyAndForget();
};
UnityInternals.UnityEditor.SplitterState.Constructor =
(float[] relativeSizes, int[] minSizes, int[] maxSizes) =>
{
return new SplitterState(relativeSizes, minSizes, maxSizes);
};
UnityInternals.UnityEditor.SplitterState.GetRelativeSizes =
(UnityInternals.UnityEditor.SplitterState splitterState) =>
{
return ((SplitterState)splitterState.InternalObject).relativeSizes;
};
UnityInternals.UnityEditor.SplitterGUILayout.BeginHorizontalSplit =
(UnityInternals.UnityEditor.SplitterState splitterState,
GUILayoutOption[] guiLayoutOptions) =>
{
SplitterGUILayout.BeginHorizontalSplit(
(SplitterState)splitterState.InternalObject, guiLayoutOptions);
};
UnityInternals.UnityEditor.SplitterGUILayout.EndHorizontalSplit =
() =>
{
SplitterGUILayout.EndHorizontalSplit();
};
UnityInternals.UnityEditor.SplitterGUILayout.BeginVerticalSplit =
(UnityInternals.UnityEditor.SplitterState splitterState,
GUILayoutOption[] guiLayoutOptions) =>
{
SplitterGUILayout.BeginVerticalSplit(
(SplitterState)splitterState.InternalObject, guiLayoutOptions);
};
UnityInternals.UnityEditor.SplitterGUILayout.EndVerticalSplit =
() =>
{
SplitterGUILayout.EndVerticalSplit();
};
UnityInternals.UnityEditor.SceneManagement.PrefabStageExtensions.SaveInternal =
(PrefabStage prefabStage) =>
{
return prefabStage.Save();
};
UnityInternals.UnityEditor.GenericMenuExtensions.GetMenuItems =
(GenericMenu genericMenu) =>
{
List<GenericMenu.MenuItem> menuItems = genericMenu.menuItems;
if (menuItems == null)
return null;
return menuItems.Select(menuItem =>
new UnityInternals.UnityEditor.GenericMenu.MenuItem(menuItem)).ToList();
};
UnityInternals.UnityEditor.GenericMenu.MenuItem.GetContent =
(UnityInternals.UnityEditor.GenericMenu.MenuItem menuItem) =>
{
return ((GenericMenu.MenuItem)menuItem.InternalObject).content;
};
UnityInternals.UnityEditor.GenericMenu.MenuItem.GetFunc =
(UnityInternals.UnityEditor.GenericMenu.MenuItem menuItem) =>
{
return ((GenericMenu.MenuItem)menuItem.InternalObject).func;
};
}
}
}