Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

182 lines
6.9 KiB

using System;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEditor;
using UnityEditorInternal;
using UnityEditorInternal.VR;
using UnityEngine;
namespace VRTK
{
public sealed class VRTK_SupportInfoWindow : EditorWindow
{
private const string Separator = " ";
private readonly StringBuilder stringBuilder = new StringBuilder();
private int section;
private Vector2 scrollPosition;
[MenuItem("Window/VRTK/Support Info")]
public static void ShowWindow()
{
GetWindow<VRTK_SupportInfoWindow>(true, "VRTK Support Info").RefreshData();
}
private void OnGUI()
{
GUIContent buttonContent = new GUIContent("Copy to clipboard");
minSize = Vector2.Max(minSize, GUI.skin.button.CalcSize(buttonContent) + new Vector2(10, 0));
using (EditorGUILayout.ScrollViewScope scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition))
{
scrollPosition = scrollViewScope.scrollPosition;
using (new EditorGUILayout.VerticalScope(EditorStyles.textArea))
{
EditorGUILayout.LabelField(
stringBuilder.ToString(),
new GUIStyle(EditorStyles.label) { wordWrap = true },
GUILayout.ExpandHeight(true)
);
}
}
if (GUILayout.Button(buttonContent))
{
EditorGUIUtility.systemCopyBuffer = stringBuilder.ToString();
}
}
private void RefreshData()
{
stringBuilder.Length = 0;
Assembly editorAssembly = typeof(VRTK_SDKManagerEditor).Assembly;
Assembly assembly = typeof(VRTK_SDKManager).Assembly;
Append(
"Versions",
() =>
{
Append("Unity", InternalEditorUtility.GetFullUnityVersion());
Append("VRTK", VRTK_Defines.CurrentVersion + " (may not be correct if source is GitHub)");
Type steamVRUpdateType = editorAssembly.GetType("SteamVR_Update");
if (steamVRUpdateType != null)
{
FieldInfo currentVersionField = steamVRUpdateType.GetField("currentVersion", BindingFlags.NonPublic | BindingFlags.Static);
if (currentVersionField != null)
{
string currentVersion = (string)currentVersionField.GetValue(null);
Append("SteamVR", currentVersion);
}
}
Type ovrPluginType = assembly.GetType("OVRPlugin");
if (ovrPluginType != null)
{
Append(
"OVRPlugin (Oculus Utilities)",
() =>
{
FieldInfo wrapperVersionField = ovrPluginType.GetField("wrapperVersion", BindingFlags.Public | BindingFlags.Static);
if (wrapperVersionField != null)
{
Version wrapperVersion = (Version)wrapperVersionField.GetValue(null);
Append("wrapperVersion", wrapperVersion);
}
PropertyInfo versionField = ovrPluginType.GetProperty("version", BindingFlags.Public | BindingFlags.Static);
if (versionField != null)
{
Version version = (Version)versionField.GetGetMethod().Invoke(null, null);
Append("version", version);
}
PropertyInfo nativeSDKVersionField = ovrPluginType.GetProperty("nativeSDKVersion", BindingFlags.Public | BindingFlags.Static);
if (nativeSDKVersionField != null)
{
Version nativeSDKVersion = (Version)nativeSDKVersionField.GetGetMethod().Invoke(null, null);
Append("nativeSDKVersion", nativeSDKVersion);
}
}
);
}
}
);
Append(
"VR Settings",
() =>
{
foreach (BuildTargetGroup targetGroup in VRTK_SharedMethods.GetValidBuildTargetGroups())
{
bool isVREnabled;
#if UNITY_5_5_OR_NEWER
isVREnabled = VREditor.GetVREnabledOnTargetGroup(targetGroup);
#else
isVREnabled = VREditor.GetVREnabled(targetGroup);
#endif
if (!isVREnabled)
{
continue;
}
string[] vrEnabledDevices;
#if UNITY_5_5_OR_NEWER
vrEnabledDevices = VREditor.GetVREnabledDevicesOnTargetGroup(targetGroup);
#else
vrEnabledDevices = VREditor.GetVREnabledDevices(targetGroup);
#endif
Append(targetGroup, string.Join(", ", vrEnabledDevices));
}
}
);
Append(
"Scripting Define Symbols",
() =>
{
foreach (BuildTargetGroup targetGroup in VRTK_SharedMethods.GetValidBuildTargetGroups())
{
string symbols = string.Join(
";",
PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup)
.Split(';')
.Where(symbol => !symbol.StartsWith(VRTK_Defines.VersionScriptingDefineSymbolPrefix, StringComparison.Ordinal))
.ToArray());
if (!string.IsNullOrEmpty(symbols))
{
Append(targetGroup, symbols);
}
}
}
);
stringBuilder.Length--;
}
private void Append(string value, Action sectionContentAction = null)
{
for (int index = 0; index < section; index++)
{
stringBuilder.Append(Separator);
}
stringBuilder.AppendLine(value);
if (sectionContentAction != null)
{
section++;
sectionContentAction();
section--;
}
}
private void Append(object tag, object value)
{
Append(string.Format("{0}: {1}", tag, value));
}
}
}