FittsLaw/Assets/Oculus/VR/Scripts/Editor/OVRManagerEditor.cs
2018-10-08 23:54:11 -04:00

205 lines
7.1 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Reflection;
[CustomEditor(typeof(OVRManager))]
public class OVRManagerEditor : Editor
{
override public void OnInspectorGUI()
{
DrawDefaultInspector();
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
OVRManager manager = (OVRManager)target;
EditorGUILayout.Space();
EditorGUILayout.LabelField("Mixed Reality Capture", EditorStyles.boldLabel);
SetupBoolField("Show Properties", ref manager.expandMixedRealityCapturePropertySheet);
if (manager.expandMixedRealityCapturePropertySheet)
{
string[] layerMaskOptions = new string[32];
for (int i=0; i<32; ++i)
{
layerMaskOptions[i] = LayerMask.LayerToName(i);
if (layerMaskOptions[i].Length == 0)
{
layerMaskOptions[i] = "<Layer " + i.ToString() + ">";
}
}
EditorGUI.indentLevel++;
EditorGUILayout.Space();
SetupBoolField("enableMixedReality", ref manager.enableMixedReality);
SetupCompositoinMethodField("compositionMethod", ref manager.compositionMethod);
SetupLayerMaskField("extraHiddenLayers", ref manager.extraHiddenLayers, layerMaskOptions);
if (manager.compositionMethod == OVRManager.CompositionMethod.Direct || manager.compositionMethod == OVRManager.CompositionMethod.Sandwich)
{
EditorGUILayout.Space();
if (manager.compositionMethod == OVRManager.CompositionMethod.Direct)
{
EditorGUILayout.LabelField("Direct Composition", EditorStyles.boldLabel);
}
else
{
EditorGUILayout.LabelField("Sandwich Composition", EditorStyles.boldLabel);
}
EditorGUI.indentLevel++;
EditorGUILayout.Space();
EditorGUILayout.LabelField("Camera", EditorStyles.boldLabel);
SetupCameraDeviceField("capturingCameraDevice", ref manager.capturingCameraDevice);
SetupBoolField("flipCameraFrameHorizontally", ref manager.flipCameraFrameHorizontally);
SetupBoolField("flipCameraFrameVertically", ref manager.flipCameraFrameVertically);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Chroma Key", EditorStyles.boldLabel);
SetupColorField("chromaKeyColor", ref manager.chromaKeyColor);
SetupFloatField("chromaKeySimilarity", ref manager.chromaKeySimilarity);
SetupFloatField("chromaKeySmoothRange", ref manager.chromaKeySmoothRange);
SetupFloatField("chromaKeySpillRange", ref manager.chromaKeySpillRange);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Dynamic Lighting", EditorStyles.boldLabel);
SetupBoolField("useDynamicLighting", ref manager.useDynamicLighting);
SetupDepthQualityField("depthQuality", ref manager.depthQuality);
SetupFloatField("dynamicLightingSmoothFactor", ref manager.dynamicLightingSmoothFactor);
SetupFloatField("dynamicLightingDepthVariationClampingValue", ref manager.dynamicLightingDepthVariationClampingValue);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Virtual Green Screen", EditorStyles.boldLabel);
SetupVirtualGreenTypeField("virtualGreenScreenType", ref manager.virtualGreenScreenType);
SetupFloatField("virtualGreenScreenTopY", ref manager.virtualGreenScreenTopY);
SetupFloatField("virtualGreenScreenBottomY", ref manager.virtualGreenScreenBottomY);
SetupBoolField("virtualGreenScreenApplyDepthCulling", ref manager.virtualGreenScreenApplyDepthCulling);
SetupFloatField("virtualGreenScreenDepthTolerance", ref manager.virtualGreenScreenDepthTolerance);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Latency Control", EditorStyles.boldLabel);
SetupFloatField("handPoseStateLatency", ref manager.handPoseStateLatency);
if (manager.compositionMethod == OVRManager.CompositionMethod.Sandwich)
{
SetupFloatField("sandwichCompositionRenderLatency", ref manager.sandwichCompositionRenderLatency);
SetupIntField("sandwichCompositionBufferedFrames", ref manager.sandwichCompositionBufferedFrames);
}
EditorGUI.indentLevel--;
}
EditorGUI.indentLevel--;
}
#endif
}
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
void SetupBoolField(string name, ref bool member)
{
EditorGUI.BeginChangeCheck();
bool value = EditorGUILayout.Toggle(name, member);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
member = value;
}
}
void SetupIntField(string name, ref int member)
{
EditorGUI.BeginChangeCheck();
int value = EditorGUILayout.IntField(name, member);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
member = value;
}
}
void SetupFloatField(string name, ref float member)
{
EditorGUI.BeginChangeCheck();
float value = EditorGUILayout.FloatField(name, member);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
member = value;
}
}
void SetupDoubleField(string name, ref double member)
{
EditorGUI.BeginChangeCheck();
double value = EditorGUILayout.DoubleField(name, member);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
member = value;
}
}
void SetupColorField(string name, ref Color member)
{
EditorGUI.BeginChangeCheck();
Color value = EditorGUILayout.ColorField(name, member);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
member = value;
}
}
void SetupLayerMaskField(string name, ref LayerMask layerMask, string[] layerMaskOptions)
{
EditorGUI.BeginChangeCheck();
int value = EditorGUILayout.MaskField(name, layerMask, layerMaskOptions);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
layerMask = value;
}
}
void SetupCompositoinMethodField(string name, ref OVRManager.CompositionMethod method)
{
EditorGUI.BeginChangeCheck();
OVRManager.CompositionMethod value = (OVRManager.CompositionMethod)EditorGUILayout.EnumPopup(name, method);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
method = value;
}
}
void SetupCameraDeviceField(string name, ref OVRManager.CameraDevice device)
{
EditorGUI.BeginChangeCheck();
OVRManager.CameraDevice value = (OVRManager.CameraDevice)EditorGUILayout.EnumPopup(name, device);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
device = value;
}
}
void SetupDepthQualityField(string name, ref OVRManager.DepthQuality depthQuality)
{
EditorGUI.BeginChangeCheck();
OVRManager.DepthQuality value = (OVRManager.DepthQuality)EditorGUILayout.EnumPopup(name, depthQuality);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
depthQuality = value;
}
}
void SetupVirtualGreenTypeField(string name, ref OVRManager.VirtualGreenScreenType virtualGreenScreenType)
{
EditorGUI.BeginChangeCheck();
OVRManager.VirtualGreenScreenType value = (OVRManager.VirtualGreenScreenType)EditorGUILayout.EnumPopup(name, virtualGreenScreenType);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Changed " + name);
virtualGreenScreenType = value;
}
}
#endif
}