/// <inheritdoc /> public override void Enable() { if (!UInput.mousePresent) { Disable(); return; } #if UNITY_EDITOR if (UnityEditor.EditorWindow.focusedWindow != null) { UnityEditor.EditorWindow.focusedWindow.ShowNotification(new GUIContent("Press \"ESC\" to regain mouse control")); } #endif Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; IMixedRealityInputSource mouseInputSource = null; MixedRealityRaycaster.DebugEnabled = true; const Handedness handedness = Handedness.Any; System.Type controllerType = typeof(MouseController); // Make sure that the handedness declared in the controller attribute matches what we expect { var controllerAttribute = MixedRealityControllerAttribute.Find(controllerType); if (controllerAttribute != null) { Handedness[] handednesses = controllerAttribute.SupportedHandedness; Debug.Assert(handednesses.Length == 1 && handednesses[0] == Handedness.Any, "Unexpected mouse handedness declared in MixedRealityControllerAttribute"); } } IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; if (inputSystem != null) { var pointers = RequestPointers(SupportedControllerType.Mouse, handedness); mouseInputSource = inputSystem.RequestNewGenericInputSource("Mouse Input", pointers); } Controller = new MouseController(TrackingState.NotApplicable, handedness, mouseInputSource); if (mouseInputSource != null) { for (int i = 0; i < mouseInputSource.Pointers.Length; i++) { mouseInputSource.Pointers[i].Controller = Controller; } } Controller.SetupConfiguration(typeof(MouseController)); inputSystem?.RaiseSourceDetected(Controller.InputSource, Controller); }
/// <inheritdoc /> public override void Enable() { if (!UInput.mousePresent) { Disable(); return; } if (Controller != null) { // device manager has already been set up return; } IMixedRealityInputSource mouseInputSource = null; MixedRealityRaycaster.DebugEnabled = true; const Handedness handedness = Handedness.Any; System.Type controllerType = typeof(MouseController); // Make sure that the handedness declared in the controller attribute matches what we expect { var controllerAttribute = MixedRealityControllerAttribute.Find(controllerType); if (controllerAttribute != null) { Handedness[] handednesses = controllerAttribute.SupportedHandedness; Debug.Assert(handednesses.Length == 1 && handednesses[0] == Handedness.Any, "Unexpected mouse handedness declared in MixedRealityControllerAttribute"); } } IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; if (inputSystem != null) { var pointers = RequestPointers(SupportedControllerType.Mouse, handedness); mouseInputSource = inputSystem.RequestNewGenericInputSource("Mouse Input", pointers); } Controller = new MouseController(TrackingState.NotApplicable, handedness, mouseInputSource); if (mouseInputSource != null) { for (int i = 0; i < mouseInputSource.Pointers.Length; i++) { mouseInputSource.Pointers[i].Controller = Controller; } } Controller.SetupConfiguration(typeof(MouseController)); inputSystem?.RaiseSourceDetected(Controller.InputSource, Controller); }
private static Texture2D GetControllerTextureInternal(Type controllerType, Handedness handedness, string suffix) { if (controllerType != null) { var attr = MixedRealityControllerAttribute.Find(controllerType); if (attr != null) { if (attr.TexturePath.Length > 0) { Texture2D texture = GetControllerTextureInternal(attr.TexturePath, handedness, suffix); if (texture != null) { return(texture); } } } } return(GetControllerTextureInternal("StandardAssets/Textures/Generic_controller", Handedness.None, suffix)); }
void PlugSimulatedMotionController(Handedness controllerHandedness) { MixedRealityRaycaster.DebugEnabled = true; System.Type controllerType = typeof(SimulatedMotionController); // Make sure that the handedness declared in the controller attribute matches what we expect { var controllerAttribute = MixedRealityControllerAttribute.Find(controllerType); if (controllerAttribute != null) { Handedness[] handednesses = controllerAttribute.SupportedHandedness; //Debug.Assert(handednesses.Length == 3 && handednesses[0] == Handedness.Any, "Unexpected mouse handedness declared in MixedRealityControllerAttribute"); } } IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; var pointers = RequestPointers(SupportedControllerType.GenericOpenVR, controllerHandedness); IMixedRealityInputSource inputSource = inputSystem.RequestNewGenericInputSource("Mouse Input", pointers, InputSourceType.Controller); SimulatedMotionController simulatedMotionController = new SimulatedMotionController(TrackingState.Tracked, controllerHandedness, inputSource); simulatedMotionController.SetupConfiguration(controllerType); if (inputSource != null) { for (int i = 0; i < inputSource.Pointers.Length; i++) { inputSource.Pointers[i].Controller = simulatedMotionController; } } SimulatedMotionControllerDictionary.Add(controllerHandedness, simulatedMotionController); inputSystem?.RaiseSourceDetected(simulatedMotionController.InputSource, simulatedMotionController); }
private void RenderControllerList(SerializedProperty controllerList) { if (thisProfile.MixedRealityControllerMappingProfiles.Length != controllerList.arraySize) { return; } EditorGUILayout.Space(); if (GUILayout.Button(ControllerAddButtonContent, EditorStyles.miniButton)) { AddController(controllerList, typeof(GenericJoystickController)); return; } controllerRenderList.Clear(); GUILayout.Space(12f); using (var outerVerticalScope = new GUILayout.VerticalScope()) { GUILayout.HorizontalScope horizontalScope = null; for (int i = 0; i < thisProfile.MixedRealityControllerMappingProfiles.Length; i++) { MixedRealityControllerMapping controllerMapping = thisProfile.MixedRealityControllerMappingProfiles[i]; Type controllerType = controllerMapping.ControllerType; if (controllerType == null) { continue; } Handedness handedness = controllerMapping.Handedness; bool useCustomInteractionMappings = controllerMapping.HasCustomInteractionMappings; SupportedControllerType supportedControllerType = controllerMapping.SupportedControllerType; var controllerMappingProperty = controllerList.GetArrayElementAtIndex(i); var handednessProperty = controllerMappingProperty.FindPropertyRelative("handedness"); if (!useCustomInteractionMappings) { bool skip = false; // Merge controllers with the same supported controller type. for (int j = 0; j < controllerRenderList.Count; j++) { if (controllerRenderList[j].SupportedControllerType == supportedControllerType && controllerRenderList[j].Handedness == handedness) { thisProfile.MixedRealityControllerMappingProfiles[i].SynchronizeInputActions(controllerRenderList[j].Interactions); serializedObject.ApplyModifiedProperties(); skip = true; } } if (skip) { continue; } } controllerRenderList.Add(new ControllerRenderProfile(supportedControllerType, handedness, thisProfile.MixedRealityControllerMappingProfiles[i].Interactions)); string controllerTitle = thisProfile.MixedRealityControllerMappingProfiles[i].Description; var interactionsProperty = controllerMappingProperty.FindPropertyRelative("interactions"); if (useCustomInteractionMappings) { if (horizontalScope != null) { horizontalScope.Dispose(); horizontalScope = null; } GUILayout.Space(24f); using (var verticalScope = new GUILayout.VerticalScope()) { using (horizontalScope = new GUILayout.HorizontalScope()) { EditorGUIUtility.labelWidth = 64f; EditorGUIUtility.fieldWidth = 64f; EditorGUILayout.LabelField(controllerTitle); EditorGUIUtility.fieldWidth = defaultFieldWidth; EditorGUIUtility.labelWidth = defaultLabelWidth; if (GUILayout.Button(ControllerMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) { controllerList.DeleteArrayElementAtIndex(i); return; } } EditorGUI.indentLevel++; EditorGUIUtility.labelWidth = 128f; EditorGUIUtility.fieldWidth = 64f; EditorGUI.BeginChangeCheck(); // Generic Type dropdown Type[] genericTypes = MixedRealityControllerMappingProfile.CustomControllerMappingTypes; var genericTypeListContent = new GUIContent[genericTypes.Length]; var genericTypeListIds = new int[genericTypes.Length]; int currentGenericType = -1; for (int genericTypeIdx = 0; genericTypeIdx < genericTypes.Length; genericTypeIdx++) { var attribute = MixedRealityControllerAttribute.Find(genericTypes[genericTypeIdx]); if (attribute != null) { genericTypeListContent[genericTypeIdx] = new GUIContent(attribute.SupportedControllerType.ToString().Replace("Generic", "").ToProperCase() + " Controller"); } else { genericTypeListContent[genericTypeIdx] = new GUIContent("Unknown Controller"); } genericTypeListIds[genericTypeIdx] = genericTypeIdx; if (controllerType == genericTypes[genericTypeIdx]) { currentGenericType = genericTypeIdx; } } Debug.Assert(currentGenericType != -1); currentGenericType = EditorGUILayout.IntPopup(GenericTypeContent, currentGenericType, genericTypeListContent, genericTypeListIds); controllerType = genericTypes[currentGenericType]; { // Handedness dropdown var attribute = MixedRealityControllerAttribute.Find(controllerType); if (attribute != null && attribute.SupportedHandedness.Length >= 1) { // Make sure handedness is valid for the selected controller type. if (Array.IndexOf(attribute.SupportedHandedness, (Handedness)handednessProperty.intValue) < 0) { handednessProperty.intValue = (int)attribute.SupportedHandedness[0]; } if (attribute.SupportedHandedness.Length >= 2) { var handednessListContent = new GUIContent[attribute.SupportedHandedness.Length]; var handednessListIds = new int[attribute.SupportedHandedness.Length]; for (int handednessIdx = 0; handednessIdx < attribute.SupportedHandedness.Length; handednessIdx++) { handednessListContent[handednessIdx] = new GUIContent(attribute.SupportedHandedness[handednessIdx].ToString()); handednessListIds[handednessIdx] = (int)attribute.SupportedHandedness[handednessIdx]; } handednessProperty.intValue = EditorGUILayout.IntPopup(HandednessTypeContent, handednessProperty.intValue, handednessListContent, handednessListIds); } } else { handednessProperty.intValue = (int)Handedness.None; } } if (EditorGUI.EndChangeCheck()) { interactionsProperty.ClearArray(); serializedObject.ApplyModifiedProperties(); thisProfile.MixedRealityControllerMappingProfiles[i].ControllerType.Type = genericTypes[currentGenericType]; thisProfile.MixedRealityControllerMappingProfiles[i].SetDefaultInteractionMapping(true); serializedObject.ApplyModifiedProperties(); return; } EditorGUIUtility.labelWidth = defaultLabelWidth; EditorGUIUtility.fieldWidth = defaultFieldWidth; EditorGUI.indentLevel--; if (GUILayout.Button("Edit Input Action Map")) { ControllerPopupWindow.Show(controllerMapping, interactionsProperty, handedness); } if (GUILayout.Button("Reset Input Actions")) { interactionsProperty.ClearArray(); serializedObject.ApplyModifiedProperties(); thisProfile.MixedRealityControllerMappingProfiles[i].SetDefaultInteractionMapping(true); serializedObject.ApplyModifiedProperties(); } } } else { if (supportedControllerType == SupportedControllerType.WindowsMixedReality && handedness == Handedness.None) { controllerTitle = "HoloLens Gestures"; } if (handedness != Handedness.Right) { if (horizontalScope != null) { horizontalScope.Dispose(); horizontalScope = null; } horizontalScope = new GUILayout.HorizontalScope(); } var buttonContent = new GUIContent(controllerTitle, ControllerMappingLibrary.GetControllerTextureScaled(controllerType, handedness)); if (GUILayout.Button(buttonContent, controllerButtonStyle, GUILayout.Height(128f), GUILayout.MinWidth(32f), GUILayout.ExpandWidth(true))) { ControllerPopupWindow.Show(controllerMapping, interactionsProperty, handedness); } } } if (horizontalScope != null) { horizontalScope.Dispose(); horizontalScope = null; } } }
private void RenderControllerList(SerializedProperty controllerList) { if (thisProfile.ControllerVisualizationSettings.Length != controllerList.arraySize) { return; } EditorGUILayout.Space(); if (InspectorUIUtility.RenderIndentedButton(ControllerAddButtonContent, EditorStyles.miniButton)) { controllerList.InsertArrayElementAtIndex(controllerList.arraySize); var index = controllerList.arraySize - 1; var controllerSetting = controllerList.GetArrayElementAtIndex(index); var mixedRealityControllerMappingDescription = controllerSetting.FindPropertyRelative("description"); mixedRealityControllerMappingDescription.stringValue = typeof(GenericJoystickController).Name; var mixedRealityControllerHandedness = controllerSetting.FindPropertyRelative("handedness"); mixedRealityControllerHandedness.intValue = 1; serializedObject.ApplyModifiedProperties(); thisProfile.ControllerVisualizationSettings[index].ControllerType.Type = typeof(GenericJoystickController); return; } #if UNITY_2019 xrPipelineUtility.RenderXRPipelineTabs(); #endif // UNITY_2019 for (int i = 0; i < controllerList.arraySize; i++) { var controllerSetting = controllerList.GetArrayElementAtIndex(i); var mixedRealityControllerMappingDescription = controllerSetting.FindPropertyRelative("description"); SystemType controllerType = thisProfile.ControllerVisualizationSettings[i].ControllerType; bool hasValidType = controllerType != null && controllerType.Type != null; if (hasValidType) { MixedRealityControllerAttribute controllerAttribute = MixedRealityControllerAttribute.Find(controllerType.Type); if (controllerAttribute != null && !controllerAttribute.SupportedUnityXRPipelines.HasFlag(xrPipelineUtility.SelectedPipeline)) { continue; } } else if (!MixedRealityProjectPreferences.ShowNullDataProviders) { continue; } EditorGUILayout.Space(); mixedRealityControllerMappingDescription.stringValue = hasValidType ? controllerType.Type.Name.ToProperCase() : "Undefined Controller"; serializedObject.ApplyModifiedProperties(); SerializedProperty mixedRealityControllerHandedness = controllerSetting.FindPropertyRelative("handedness"); using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField($"{mixedRealityControllerMappingDescription.stringValue} {((Handedness)mixedRealityControllerHandedness.intValue).ToString().ToProperCase()} Hand{(mixedRealityControllerHandedness.intValue == (int)(Handedness.Both) ? "s" : "")}", EditorStyles.boldLabel); if (GUILayout.Button(ControllerMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) { controllerList.DeleteArrayElementAtIndex(i); return; } } EditorGUILayout.PropertyField(controllerSetting.FindPropertyRelative("controllerType")); EditorGUILayout.PropertyField(controllerSetting.FindPropertyRelative("controllerVisualizationType")); if (!hasValidType) { EditorGUILayout.HelpBox("A controller type must be defined!", MessageType.Error); } else { // Only check for Oculus if we already know the type is valid (otherwise, null ref) bool isOculusType = controllerType.Type.FullName.Contains("OculusXRSDKTouchController"); if (isOculusType) { EditorGUILayout.HelpBox("Oculus Touch controller model visualization is not managed by MRTK, refer to the Oculus XRSDK Device Manager to configure controller visualization settings", MessageType.Error); } } var handednessValue = mixedRealityControllerHandedness.intValue - 1; // Reset in case it was set to something other than left, right, or both. if (handednessValue < 0 || handednessValue > 2) { handednessValue = 0; } EditorGUI.BeginChangeCheck(); handednessValue = EditorGUILayout.IntPopup(new GUIContent(mixedRealityControllerHandedness.displayName, mixedRealityControllerHandedness.tooltip), handednessValue, HandednessSelections, null); if (EditorGUI.EndChangeCheck()) { mixedRealityControllerHandedness.intValue = handednessValue + 1; } var overrideModel = controllerSetting.FindPropertyRelative("overrideModel"); var overrideModelPrefab = overrideModel.objectReferenceValue as GameObject; var controllerUsePlatformModelOverride = controllerSetting.FindPropertyRelative("usePlatformModels"); EditorGUILayout.PropertyField(controllerUsePlatformModelOverride); if (controllerUsePlatformModelOverride.boolValue) { var platformModelMaterial = controllerSetting.FindPropertyRelative("platformModelMaterial"); EditorGUILayout.PropertyField(platformModelMaterial); } if (controllerUsePlatformModelOverride.boolValue && overrideModelPrefab != null) { EditorGUILayout.HelpBox("When platform model is used, the override model will only be used if the default model cannot be loaded from the driver.", MessageType.Warning); } EditorGUI.BeginChangeCheck(); overrideModelPrefab = EditorGUILayout.ObjectField(new GUIContent(overrideModel.displayName, "If no override model is set, the global model is used."), overrideModelPrefab, typeof(GameObject), false) as GameObject; if (overrideModelPrefab == null && !controllerUsePlatformModelOverride.boolValue) { EditorGUILayout.HelpBox("No override model was assigned and this controller will not attempt to use the platform's model, the global model will be used instead", MessageType.Warning); } if (EditorGUI.EndChangeCheck() && CheckVisualizer(overrideModelPrefab)) { overrideModel.objectReferenceValue = overrideModelPrefab; } } }
private void RenderControllerList(SerializedProperty controllerList) { if (thisProfile.MixedRealityControllerMappings.Length != controllerList.arraySize) { return; } if (InspectorUIUtility.RenderIndentedButton(ControllerAddButtonContent, EditorStyles.miniButton)) { AddController(controllerList, typeof(GenericJoystickController)); return; } controllerRenderList.Clear(); // Generating the set of controllers that belong to each Controller Mapping Signature Dictionary <ControllerMappingSignature, List <string> > controllersAffectedByMappingSignatures = new Dictionary <ControllerMappingSignature, List <string> >(); for (int i = 0; i < thisProfile.MixedRealityControllerMappings.Length; i++) { MixedRealityControllerMapping controllerMapping = thisProfile.MixedRealityControllerMappings[i]; Type controllerType = controllerMapping.ControllerType; if (controllerType == null) { continue; } Handedness handedness = controllerMapping.Handedness; SupportedControllerType supportedControllerType = controllerMapping.SupportedControllerType; ControllerMappingSignature currentSignature = new ControllerMappingSignature(supportedControllerType, handedness); if (!controllersAffectedByMappingSignatures.ContainsKey(currentSignature)) { controllersAffectedByMappingSignatures.Add(currentSignature, new List <string>()); } controllersAffectedByMappingSignatures[currentSignature].Add(controllerType.ToString()); } showControllerDefinitions = EditorGUILayout.Foldout(showControllerDefinitions, "Controller Definitions", true); if (showControllerDefinitions) { using (var outerVerticalScope = new GUILayout.VerticalScope()) { GUILayout.HorizontalScope horizontalScope = null; for (int i = 0; i < thisProfile.MixedRealityControllerMappings.Length; i++) { MixedRealityControllerMapping controllerMapping = thisProfile.MixedRealityControllerMappings[i]; Type controllerType = controllerMapping.ControllerType; if (controllerType == null) { continue; } Handedness handedness = controllerMapping.Handedness; bool useCustomInteractionMappings = controllerMapping.HasCustomInteractionMappings; SupportedControllerType supportedControllerType = controllerMapping.SupportedControllerType; var controllerMappingProperty = controllerList.GetArrayElementAtIndex(i); var handednessProperty = controllerMappingProperty.FindPropertyRelative("handedness"); #region Profile Migration // Between MRTK v2 RC2 and GA, the HoloLens clicker and HoloLens voice select input were migrated from // SupportedControllerType.WindowsMixedReality && Handedness.None to SupportedControllerType.GGVHand && Handedness.None if (supportedControllerType == SupportedControllerType.WindowsMixedReality && handedness == Handedness.None) { for (int j = 0; j < thisProfile.MixedRealityControllerMappings.Length; j++) { if (thisProfile.MixedRealityControllerMappings[j].SupportedControllerType == SupportedControllerType.GGVHand && thisProfile.MixedRealityControllerMappings[j].Handedness == Handedness.None) { if (horizontalScope != null) { horizontalScope.Dispose(); horizontalScope = null; } serializedObject.ApplyModifiedProperties(); for (int k = 0; k < controllerMapping.Interactions.Length; k++) { MixedRealityInteractionMapping currentMapping = controllerMapping.Interactions[k]; if (currentMapping.InputType == DeviceInputType.Select) { thisProfile.MixedRealityControllerMappings[j].Interactions[0].MixedRealityInputAction = currentMapping.MixedRealityInputAction; } else if (currentMapping.InputType == DeviceInputType.SpatialGrip) { thisProfile.MixedRealityControllerMappings[j].Interactions[1].MixedRealityInputAction = currentMapping.MixedRealityInputAction; } } serializedObject.Update(); controllerList.DeleteArrayElementAtIndex(i); EditorUtility.DisplayDialog("Mappings updated", "The \"HoloLens Voice and Clicker\" mappings have been migrated to a new serialization. Please save this asset.", "Okay, thanks!"); return; } } } #endregion Profile Migration if (!useCustomInteractionMappings) { bool skip = false; // Merge controllers with the same supported controller type. for (int j = 0; j < controllerRenderList.Count; j++) { if (controllerRenderList[j].SupportedControllerType == supportedControllerType && controllerRenderList[j].Handedness == handedness) { try { thisProfile.MixedRealityControllerMappings[i].SynchronizeInputActions(controllerRenderList[j].Interactions); } catch (ArgumentException e) { Debug.LogError($"Controller mappings between {thisProfile.MixedRealityControllerMappings[i].Description} and {controllerMapping.Description} do not match. Error message: {e.Message}"); } serializedObject.ApplyModifiedProperties(); skip = true; } } if (skip) { continue; } } controllerRenderList.Add(new ControllerRenderProfile(supportedControllerType, handedness, thisProfile.MixedRealityControllerMappings[i].Interactions)); string controllerTitle = thisProfile.MixedRealityControllerMappings[i].Description; var interactionsProperty = controllerMappingProperty.FindPropertyRelative("interactions"); if (useCustomInteractionMappings) { if (horizontalScope != null) { horizontalScope.Dispose(); horizontalScope = null; } GUILayout.Space(24f); using (var verticalScope = new GUILayout.VerticalScope()) { using (horizontalScope = new GUILayout.HorizontalScope()) { EditorGUILayout.LabelField(controllerTitle, EditorStyles.boldLabel); if (GUILayout.Button(ControllerMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) { controllerList.DeleteArrayElementAtIndex(i); return; } } EditorGUI.BeginChangeCheck(); // Generic Type dropdown Type[] genericTypes = MixedRealityControllerMappingProfile.CustomControllerMappingTypes; var genericTypeListContent = new GUIContent[genericTypes.Length]; var genericTypeListIds = new int[genericTypes.Length]; int currentGenericType = -1; for (int genericTypeIdx = 0; genericTypeIdx < genericTypes.Length; genericTypeIdx++) { var attribute = MixedRealityControllerAttribute.Find(genericTypes[genericTypeIdx]); if (attribute != null) { genericTypeListContent[genericTypeIdx] = new GUIContent(attribute.SupportedControllerType.ToString().Replace("Generic", "").ToProperCase() + " Controller"); } else { genericTypeListContent[genericTypeIdx] = new GUIContent("Unknown Controller"); } genericTypeListIds[genericTypeIdx] = genericTypeIdx; if (controllerType == genericTypes[genericTypeIdx]) { currentGenericType = genericTypeIdx; } } Debug.Assert(currentGenericType != -1); currentGenericType = EditorGUILayout.IntPopup(GenericTypeContent, currentGenericType, genericTypeListContent, genericTypeListIds); controllerType = genericTypes[currentGenericType]; { // Handedness dropdown var attribute = MixedRealityControllerAttribute.Find(controllerType); if (attribute != null && attribute.SupportedHandedness.Length >= 1) { // Make sure handedness is valid for the selected controller type. if (Array.IndexOf(attribute.SupportedHandedness, (Handedness)handednessProperty.intValue) < 0) { handednessProperty.intValue = (int)attribute.SupportedHandedness[0]; } if (attribute.SupportedHandedness.Length >= 2) { var handednessListContent = new GUIContent[attribute.SupportedHandedness.Length]; var handednessListIds = new int[attribute.SupportedHandedness.Length]; for (int handednessIdx = 0; handednessIdx < attribute.SupportedHandedness.Length; handednessIdx++) { handednessListContent[handednessIdx] = new GUIContent(attribute.SupportedHandedness[handednessIdx].ToString()); handednessListIds[handednessIdx] = (int)attribute.SupportedHandedness[handednessIdx]; } handednessProperty.intValue = EditorGUILayout.IntPopup(HandednessTypeContent, handednessProperty.intValue, handednessListContent, handednessListIds); } } else { handednessProperty.intValue = (int)Handedness.None; } } if (EditorGUI.EndChangeCheck()) { interactionsProperty.ClearArray(); serializedObject.ApplyModifiedProperties(); thisProfile.MixedRealityControllerMappings[i].ControllerType.Type = genericTypes[currentGenericType]; thisProfile.MixedRealityControllerMappings[i].SetDefaultInteractionMapping(true); serializedObject.ApplyModifiedProperties(); return; } if (InspectorUIUtility.RenderIndentedButton("Edit Input Action Map")) { ControllerPopupWindow.Show(controllerMapping, interactionsProperty, handedness); } if (InspectorUIUtility.RenderIndentedButton("Reset Input Actions")) { interactionsProperty.ClearArray(); serializedObject.ApplyModifiedProperties(); thisProfile.MixedRealityControllerMappings[i].SetDefaultInteractionMapping(true); serializedObject.ApplyModifiedProperties(); } } } else { if (handedness != Handedness.Right) { if (horizontalScope != null) { horizontalScope.Dispose(); horizontalScope = null; } horizontalScope = new GUILayout.HorizontalScope(); } var buttonContent = new GUIContent(controllerTitle, ControllerMappingLibrary.GetControllerTextureScaled(controllerType, handedness)); if (GUILayout.Button(buttonContent, MixedRealityStylesUtility.ControllerButtonStyle, GUILayout.Height(128f), GUILayout.MinWidth(32f), GUILayout.ExpandWidth(true))) { ControllerMappingSignature buttonSignature = new ControllerMappingSignature(supportedControllerType, handedness); ControllerPopupWindow.Show(controllerMapping, interactionsProperty, handedness, controllersAffectedByMappingSignatures[buttonSignature]); } } } if (horizontalScope != null) { horizontalScope.Dispose(); horizontalScope = null; } } } }