File size: 4,953 Bytes
18a519f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | using System;
using System.Linq;
using System.Reflection;
using UnityEditor;
using PackageManager = UnityEditor.PackageManager;
using Unity.PlasticSCM.Editor.UI;
namespace Unity.PlasticSCM.Editor
{
public static class CollabPlugin
{
public static bool IsEnabled()
{
return IsCollabInstanceEnabled();
}
internal static void Disable()
{
SetCollabEnabledInstanceAs(false);
SetCollabEnabledInProjectSettingsAs(false);
}
internal static void GetVersion(Action<string> onGetVersionCompleted)
{
PackageManager.Requests.ListRequest listRequest = PackageManager.Client.List(true);
RunGetVersion(listRequest, onGetVersionCompleted);
}
internal static void Enable()
{
SetCollabEnabledInstanceAs(true);
SetCollabEnabledInProjectSettingsAs(true);
}
static void SetCollabEnabledInstanceAs(bool value)
{
object collabInstance = GetCollabInstance();
if (collabInstance == null)
return;
// Invokes Collab.instance.SetCollabEnabledForCurrentProject(false)
SetCollabEnabledForCurrentProject(collabInstance, value);
}
static void RunGetVersion(
PackageManager.Requests.ListRequest listRequest,
Action<string> onGetVersionCompleted)
{
EditorDispatcher.Dispatch(() =>
{
if (!listRequest.IsCompleted)
{
RunGetVersion(listRequest, onGetVersionCompleted);
return;
}
string pluginVersion = string.Empty;
if (listRequest.Status == PackageManager.StatusCode.Success &&
listRequest.Result != null)
{
PackageManager.PackageInfo collabPackage = listRequest.Result
.FirstOrDefault(package => package.name == mCollabPackageName);
if (collabPackage != null)
pluginVersion = collabPackage.version;
}
onGetVersionCompleted.Invoke(pluginVersion);
});
}
static void SetCollabEnabledInProjectSettingsAs(bool value)
{
// Invokes PlayerSettings.SetCloudServiceEnabled("Collab", false)
SetCloudServiceEnabled("Collab", value);
AssetDatabase.SaveAssets();
}
static bool IsCollabInstanceEnabled()
{
object collabInstance = GetCollabInstance();
if (collabInstance == null)
return false;
// Invokes Collab.instance.IsCollabEnabledForCurrentProject()
return IsCollabEnabledForCurrentProject(collabInstance);
}
static void SetCollabEnabledForCurrentProject(object collabInstance, bool enable)
{
MethodInfo InternalSetCollabEnabledForCurrentProject =
CollabType.GetMethod("SetCollabEnabledForCurrentProject");
if (InternalSetCollabEnabledForCurrentProject == null)
return;
InternalSetCollabEnabledForCurrentProject.
Invoke(collabInstance, new object[] { enable });
}
static void SetCloudServiceEnabled(string setting, bool enable)
{
MethodInfo InternalSetCloudServiceEnabled = PlayerSettingsType.GetMethod(
"SetCloudServiceEnabled",
BindingFlags.NonPublic | BindingFlags.Static);
if (InternalSetCloudServiceEnabled == null)
return;
InternalSetCloudServiceEnabled.
Invoke(null, new object[] { setting, enable });
}
static object GetCollabInstance()
{
if (CollabType == null)
return null;
PropertyInfo InternalInstance =
CollabType.GetProperty("instance");
if (InternalInstance == null)
return null;
return InternalInstance.GetValue(null, null);
}
static bool IsCollabEnabledForCurrentProject(object collabInstance)
{
MethodInfo InternalIsCollabEnabledForCurrentProject =
CollabType.GetMethod("IsCollabEnabledForCurrentProject");
if (InternalIsCollabEnabledForCurrentProject == null)
return false;
return (bool)InternalIsCollabEnabledForCurrentProject.
Invoke(collabInstance, null);
}
static readonly Type CollabType =
typeof(UnityEditor.Editor).Assembly.
GetType("UnityEditor.Collaboration.Collab");
static readonly Type PlayerSettingsType =
typeof(UnityEditor.PlayerSettings);
static readonly string mCollabPackageName = "com.unity.collab-proxy";
}
}
|