mixedreality/com.microsoft.mixedreality..../Providers/LeapMotion/Editor/LeapMotionDeviceManagerProf...

141 lines
6.6 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using Microsoft.MixedReality.Toolkit.Editor;
using Microsoft.MixedReality.Toolkit.LeapMotion.Input;
using Microsoft.MixedReality.Toolkit.LeapMotion.Utilities;
using Microsoft.MixedReality.Toolkit.Utilities.Editor;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Microsoft.MixedReality.Toolkit.LeapMotion.Inspectors
{
[CustomEditor(typeof(LeapMotionDeviceManagerProfile))]
/// <summary>
/// Custom inspector for the Leap Motion input data provider
/// </summary>
public class LeapMotionDeviceManagerProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector
{
protected const string ProfileTitle = "Leap Motion Controller Settings";
protected const string ProfileDescription = "";
protected LeapMotionDeviceManagerProfile instance;
protected SerializedProperty leapControllerOrientation;
protected SerializedProperty leapControllerOffset;
protected SerializedProperty leapVRDeviceOffsetMode;
protected SerializedProperty leapVRDeviceOffsetY;
protected SerializedProperty leapVRDeviceOffsetZ;
protected SerializedProperty leapVRDeviceOffsetTiltX;
protected SerializedProperty leapVRDeviceOrigin;
protected SerializedProperty enterPinchDistance;
protected SerializedProperty exitPinchDistance;
private const string leapDocURL = "https://docs.microsoft.com/windows/mixed-reality/mrtk-unity/supported-devices/leap-motion-mrtk";
// Used for setting the leapVRDeviceOrigin object reference value
Transform leapVRDeviceOriginTransform;
protected override void OnEnable()
{
base.OnEnable();
instance = target as LeapMotionDeviceManagerProfile;
leapControllerOrientation = serializedObject.FindProperty("leapControllerOrientation");
leapControllerOffset = serializedObject.FindProperty("leapControllerOffset");
leapVRDeviceOffsetMode = serializedObject.FindProperty("leapVRDeviceOffsetMode");
leapVRDeviceOffsetY = serializedObject.FindProperty("leapVRDeviceOffsetY");
leapVRDeviceOffsetZ = serializedObject.FindProperty("leapVRDeviceOffsetZ");
leapVRDeviceOffsetTiltX = serializedObject.FindProperty("leapVRDeviceOffsetTiltX");
leapVRDeviceOrigin = serializedObject.FindProperty("leapVRDeviceOrigin");
enterPinchDistance = serializedObject.FindProperty("enterPinchDistance");
exitPinchDistance = serializedObject.FindProperty("exitPinchDistance");
}
/// <summary>
/// Display the MRTK header for the profile and render custom properties
/// </summary>
public override void OnInspectorGUI()
{
RenderProfileHeader(ProfileTitle, ProfileDescription, target);
RenderCustomInspector();
}
/// <summary>
/// Render the custom properties for the Leap Motion profile
/// </summary>
public virtual void RenderCustomInspector()
{
using (new EditorGUI.DisabledGroupScope(IsProfileLock((BaseMixedRealityProfile)target)))
{
// Add the documentation help button
using (new EditorGUILayout.HorizontalScope())
{
// Draw an empty title to align the documentation button to the right
InspectorUIUtility.DrawLabel("", InspectorUIUtility.DefaultFontSize, InspectorUIUtility.ColorTint10);
InspectorUIUtility.RenderDocumentationButton(leapDocURL);
}
// Show warning if the leap core assets are not in the project
if (!LeapMotionUtilities.IsLeapInProject)
{
EditorGUILayout.HelpBox("The Leap Motion Core Assets could not be found in your project. For more information, visit the Leap Motion MRTK documentation.", MessageType.Error);
}
else
{
serializedObject.Update();
EditorGUILayout.PropertyField(leapControllerOrientation);
if (instance.LeapControllerOrientation == LeapControllerOrientation.Desk)
{
EditorGUILayout.PropertyField(leapControllerOffset);
}
else if (instance.LeapControllerOrientation == LeapControllerOrientation.Headset)
{
// Allow selection of the LeapVRDeviceOffsetMode if the LeapControllerOrientation is Headset
EditorGUILayout.PropertyField(leapVRDeviceOffsetMode);
if (leapVRDeviceOffsetMode.intValue == (int)LeapVRDeviceOffsetMode.ManualHeadOffset)
{
// Display the properties for editing the head offset
EditorGUILayout.PropertyField(leapVRDeviceOffsetY);
EditorGUILayout.PropertyField(leapVRDeviceOffsetZ);
EditorGUILayout.PropertyField(leapVRDeviceOffsetTiltX);
}
else if (leapVRDeviceOffsetMode.intValue == (int)LeapVRDeviceOffsetMode.Transform)
{
// Display the transform property
// EditorGUILayout.PropertyField() did not allow the setting the transform property in editor
leapVRDeviceOriginTransform = EditorGUILayout.ObjectField("Leap VR Device Origin", leapVRDeviceOrigin.objectReferenceValue, typeof(Transform), true) as Transform;
instance.LeapVRDeviceOrigin = leapVRDeviceOriginTransform;
}
}
// Display pinch thresholds
EditorGUILayout.PropertyField(enterPinchDistance);
EditorGUILayout.PropertyField(exitPinchDistance);
serializedObject.ApplyModifiedProperties();
}
}
}
protected override bool IsProfileInActiveInstance()
{
var profile = target as BaseMixedRealityProfile;
return MixedRealityToolkit.IsInitialized && profile != null &&
MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile != null &&
MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.DataProviderConfigurations != null &&
MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.DataProviderConfigurations.Any(s => profile == s.Profile);
}
}
}