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));
|
|
}
|
|
}
|
|
}
|