/// <summary> /// Setups up the configuration based on the Mixed Reality Controller Mapping Profile. /// </summary> public bool SetupConfiguration(Type controllerType, InputSourceType inputSourceType = InputSourceType.Controller) { if (IsControllerMappingEnabled()) { if (GetControllerVisualizationProfile() != null && GetControllerVisualizationProfile().RenderMotionControllers) { TryRenderControllerModel(controllerType, inputSourceType); } // We can only enable controller profiles if mappings exist. var controllerMappings = GetControllerMappings(); // Have to test that a controller type has been registered in the profiles, // else its Unity Input manager mappings will not have been set up by the inspector. bool profileFound = false; if (controllerMappings != null) { for (int i = 0; i < controllerMappings.Length; i++) { if (controllerMappings[i].ControllerType.Type == controllerType) { profileFound = true; // If it is an exact match, assign interaction mappings. if (controllerMappings[i].Handedness == ControllerHandedness && controllerMappings[i].Interactions.Length > 0) { MixedRealityInteractionMapping[] profileInteractions = controllerMappings[i].Interactions; MixedRealityInteractionMapping[] newInteractions = new MixedRealityInteractionMapping[profileInteractions.Length]; for (int j = 0; j < profileInteractions.Length; j++) { newInteractions[j] = new MixedRealityInteractionMapping(profileInteractions[j]); } AssignControllerMappings(newInteractions); break; } } } } // If no controller mappings found, warn the user. Does not stop the project from running. if (Interactions == null || Interactions.Length < 1) { SetupDefaultInteractions(ControllerHandedness); // We still don't have controller mappings, so this may be a custom controller. if (Interactions == null || Interactions.Length < 1) { Debug.LogWarning($"No Controller interaction mappings found for {controllerType}."); return(false); } } if (!profileFound) { Debug.LogWarning($"No controller profile found for type {controllerType}, please ensure all controllers are defined in the configured MixedRealityControllerConfigurationProfile."); return(false); } } return(true); }
/// <summary> /// Gets the <seealso cref="MixedRealityInteractionMapping"/> matching the <seealso cref="DeviceInputType"/> for /// the specified controller. /// </summary> /// <param name="controller">The <seealso cref="IMixedRealityController"/> instance</param> /// <param name="inputType">The type of device input</param> /// <param name="mapping">The <seealso cref="MixedRealityInteractionMapping"/> being returned</param> /// <returns> /// True if the interaction mapping is being returned, false otherwise. /// </returns> private static bool TryGetInteractionMapping(IMixedRealityController controller, DeviceInputType inputType, out MixedRealityInteractionMapping mapping) { mapping = null; MixedRealityInteractionMapping[] mappings = controller.Interactions; for (int i = 0; i < mappings.Length; i++) { if (mappings[i].InputType == inputType) { mapping = mappings[i]; return(true); } } return(false); }
/// <summary> /// Constructor. /// </summary> protected BaseController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) { TrackingState = trackingState; ControllerHandedness = controllerHandedness; InputSource = inputSource; Interactions = interactions; IsPositionAvailable = false; IsPositionApproximate = false; IsRotationAvailable = false; Type controllerType = GetType(); if (IsControllerMappingEnabled() && Interactions == null) { // We can only enable controller profiles if mappings exist. var controllerMappings = GetControllerMappings(); // Have to test that a controller type has been registered in the profiles, // else its Unity input manager mappings will not have been set up by the inspector. bool profileFound = false; if (controllerMappings != null) { for (int i = 0; i < controllerMappings.Length; i++) { if (controllerMappings[i].ControllerType.Type == controllerType) { profileFound = true; // If it is an exact match, assign interaction mappings. if (controllerMappings[i].Handedness == ControllerHandedness && controllerMappings[i].Interactions.Length > 0) { MixedRealityInteractionMapping[] profileInteractions = controllerMappings[i].Interactions; MixedRealityInteractionMapping[] newInteractions = new MixedRealityInteractionMapping[profileInteractions.Length]; for (int j = 0; j < profileInteractions.Length; j++) { newInteractions[j] = new MixedRealityInteractionMapping(profileInteractions[j]); } AssignControllerMappings(newInteractions); break; } } } } // If no controller mappings found, try to use default interactions. if (Interactions == null || Interactions.Length < 1) { SetupDefaultInteractions(); // We still don't have controller mappings, so this may be a custom controller. if (Interactions == null || Interactions.Length < 1) { Debug.LogWarning($"No controller interaction mappings found for {controllerType}."); return; } } // If no profile was found, warn the user. Does not stop the project from running. if (!profileFound) { Debug.LogWarning($"No controller profile found for type {controllerType}; please ensure all controllers are defined in the configured MixedRealityControllerConfigurationProfile."); } } if (GetControllerVisualizationProfile() != null && GetControllerVisualizationProfile().RenderMotionControllers&& InputSource != null) { TryRenderControllerModel(controllerType, InputSource.SourceType); } Enabled = true; }