diff --git a/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityConfigurationProfile.asset b/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityConfigurationProfile.asset index a52ee068f7e..ee1e4deb957 100644 --- a/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityConfigurationProfile.asset +++ b/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityConfigurationProfile.asset @@ -35,7 +35,7 @@ MonoBehaviour: touchScreenInputProfile: {fileID: 11400000, guid: efe3718cb67cffa46a5f6361a522baba, type: 2} enableControllerMapping: 1 - controllerMappingProfile: {fileID: 11400000, guid: 3b591b9f56584e888f557aa29796cbf8, + controllerMappingProfile: {fileID: 11400000, guid: 39ded1fd0711a0c448413d0e1ec4f7f3, type: 2} enableBoundarySystem: 1 boundarySystemType: diff --git a/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerConfigurationProfile.asset b/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset similarity index 61% rename from Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerConfigurationProfile.asset rename to Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset index 3a8b2d50367..ccf67e6bb64 100644 --- a/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerConfigurationProfile.asset +++ b/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset @@ -9,7 +9,7 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1a1cf5fd47e548e6a23bdd3ddcc00cf6, type: 3} - m_Name: DefaultMixedRealityControllerConfigurationProfile + m_Name: DefaultMixedRealityControllerMappingProfile m_EditorClassIdentifier: renderMotionControllers: 1 useDefaultModels: 0 @@ -18,178 +18,230 @@ MonoBehaviour: globalRightHandModel: {fileID: 1760394390528354, guid: 9ef0df44319c4fb4a05649e5b8ceb6d1, type: 2} mixedRealityControllerMappingProfiles: - - id: 1 - description: WMR Controller Left + - id: 0 + description: Xbox Controller controllerType: - reference: Microsoft.MixedReality.Toolkit.Internal.Devices.WindowsMixedReality.WindowsMixedRealityController, + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.UnityInput.XboxController, Microsoft.MixedReality.Toolkit - handedness: 1 + handedness: 0 useDefaultModel: 0 overrideModel: {fileID: 0} useCustomInteractionMappings: 0 interactions: - id: 0 - description: Spatial Pointer - axisType: 7 - inputType: 3 + description: Left Thumbstick + axisType: 4 + inputType: 17 inputAction: - id: 4 - description: Pointer Pose - axisConstraint: 7 + id: 0 + description: None + axisConstraint: 0 keyCode: 0 - axisCodeX: - axisCodeY: + axisCodeX: AXIS_1 + axisCodeY: AXIS_2 invertXAxis: 0 - invertYAxis: 0 + invertYAxis: 1 - id: 1 - description: Spatial Grip - axisType: 7 - inputType: 14 + description: Left Thumbstick Click + axisType: 2 + inputType: 7 inputAction: - id: 3 - description: Grip Pose - axisConstraint: 7 - keyCode: 0 + id: 0 + description: None + axisConstraint: 0 + keyCode: 338 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 2 - description: Grip Press + description: Right Thumbstick + axisType: 4 + inputType: 17 + inputAction: + id: 5 + description: Teleport Direction + axisConstraint: 4 + keyCode: 0 + axisCodeX: AXIS_4 + axisCodeY: AXIS_5 + invertXAxis: 0 + invertYAxis: 1 + - id: 3 + description: Right Thumbstick Click axisType: 2 inputType: 7 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 339 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 3 - description: Touchpad Position + - id: 4 + description: D-Pad axisType: 4 - inputType: 21 + inputType: 49 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: + axisCodeX: AXIS_6 + axisCodeY: AXIS_7 + invertXAxis: 0 + invertYAxis: 1 + - id: 5 + description: Shared Trigger + axisType: 3 + inputType: 10 + inputAction: + id: 6 + description: Trigger + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_3 axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 4 - description: Touchpad Touch - axisType: 2 - inputType: 22 + - id: 6 + description: Left Trigger + axisType: 3 + inputType: 10 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: + axisCodeX: AXIS_9 axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 5 - description: Touchpad Press - axisType: 2 - inputType: 24 + - id: 7 + description: Right Trigger + axisType: 3 + inputType: 10 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 + axisCodeX: AXIS_10 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 8 + description: View + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 336 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 6 - description: Thumbstick Position - axisType: 4 - inputType: 17 + - id: 9 + description: Menu + axisType: 2 + inputType: 7 inputAction: - id: 5 - description: Teleport - axisConstraint: 4 - keyCode: 0 + id: 2 + description: Menu + axisConstraint: 2 + keyCode: 337 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 7 - description: Thumbstick Press + - id: 10 + description: Left Bumper axisType: 2 - inputType: 18 + inputType: 7 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 334 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 8 - description: Trigger Position - axisType: 3 - inputType: 10 + - id: 11 + description: Right Bumper + axisType: 2 + inputType: 7 inputAction: - id: 6 - description: Trigger - axisConstraint: 3 - keyCode: 0 + id: 0 + description: None + axisConstraint: 0 + keyCode: 335 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 9 - description: Trigger Pressed (Select) + - id: 12 + description: A axisType: 2 - inputType: 25 + inputType: 7 inputAction: id: 1 description: Select axisConstraint: 2 - keyCode: 0 + keyCode: 330 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 10 - description: Trigger Touched + - id: 13 + description: B axisType: 2 - inputType: 11 + inputType: 7 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 331 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 11 - description: Menu Pressed + - id: 14 + description: X axisType: 2 - inputType: 27 + inputType: 7 inputAction: - id: 2 - description: Menu - axisConstraint: 2 - keyCode: 0 + id: 0 + description: None + axisConstraint: 0 + keyCode: 332 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 2 - description: WMR Controller Right + - id: 15 + description: Y + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 333 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 1 + description: Windows Mixed Reality Motion Controller Left controllerType: reference: Microsoft.MixedReality.Toolkit.Internal.Devices.WindowsMixedReality.WindowsMixedRealityController, Microsoft.MixedReality.Toolkit - handedness: 2 + handedness: 1 useDefaultModel: 0 overrideModel: {fileID: 0} useCustomInteractionMappings: 0 @@ -222,34 +274,34 @@ MonoBehaviour: invertYAxis: 0 - id: 2 description: Grip Press - axisType: 2 - inputType: 7 + axisType: 3 + inputType: 13 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 7 + description: Grip Press + axisConstraint: 3 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 3 - description: Touchpad Position - axisType: 4 - inputType: 21 + description: Trigger Position + axisType: 3 + inputType: 10 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 6 + description: Trigger + axisConstraint: 3 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 4 - description: Touchpad Touch + description: Trigger Touched axisType: 2 - inputType: 22 + inputType: 11 inputAction: id: 0 description: None @@ -260,35 +312,35 @@ MonoBehaviour: invertXAxis: 0 invertYAxis: 0 - id: 5 - description: Touchpad Press + description: Trigger Press (Select) axisType: 2 - inputType: 24 + inputType: 25 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 1 + description: Select + axisConstraint: 2 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 6 - description: Thumbstick Position + description: Touchpad Position axisType: 4 - inputType: 17 + inputType: 21 inputAction: - id: 5 - description: Teleport - axisConstraint: 4 + id: 0 + description: None + axisConstraint: 0 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 7 - description: Thumbstick Press + description: Touchpad Touch axisType: 2 - inputType: 18 + inputType: 22 inputAction: id: 0 description: None @@ -299,9 +351,9 @@ MonoBehaviour: invertXAxis: 0 invertYAxis: 0 - id: 8 - description: Trigger Position - axisType: 3 - inputType: 10 + description: Touchpad Press + axisType: 2 + inputType: 24 inputAction: id: 0 description: None @@ -312,12 +364,12 @@ MonoBehaviour: invertXAxis: 0 invertYAxis: 0 - id: 9 - description: Trigger Pressed (Select) + description: Menu Press axisType: 2 - inputType: 25 + inputType: 27 inputAction: - id: 1 - description: Select + id: 2 + description: Menu axisConstraint: 2 keyCode: 0 axisCodeX: @@ -325,40 +377,40 @@ MonoBehaviour: invertXAxis: 0 invertYAxis: 0 - id: 10 - description: Trigger Touched - axisType: 2 - inputType: 11 + description: Thumbstick Position + axisType: 4 + inputType: 17 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 5 + description: Teleport Direction + axisConstraint: 4 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 11 - description: Menu Pressed + description: Thumbstick Press axisType: 2 - inputType: 27 + inputType: 18 inputAction: - id: 2 - description: Menu - axisConstraint: 2 + id: 0 + description: None + axisConstraint: 0 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 3 - description: Generic OVR Controller Left + - id: 2 + description: Windows Mixed Reality Motion Controller Right controllerType: - reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.GenericOpenVRController, + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.WindowsMixedReality.WindowsMixedRealityController, Microsoft.MixedReality.Toolkit - handedness: 1 + handedness: 2 useDefaultModel: 0 overrideModel: {fileID: 0} - useCustomInteractionMappings: 1 + useCustomInteractionMappings: 0 interactions: - id: 0 description: Spatial Pointer @@ -374,33 +426,46 @@ MonoBehaviour: invertXAxis: 0 invertYAxis: 0 - id: 1 - description: Trigger Position - axisType: 3 - inputType: 10 + description: Spatial Grip + axisType: 7 + inputType: 14 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 3 + description: Grip Pose + axisConstraint: 7 keyCode: 0 - axisCodeX: AXIS_9 + axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 2 - description: Trigger Press (Select) - axisType: 2 + description: Grip Press + axisType: 3 inputType: 13 inputAction: - id: 1 - description: Select - axisConstraint: 2 - keyCode: 344 + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 3 - description: Trigger Touch + description: Trigger Position + axisType: 3 + inputType: 10 + inputAction: + id: 6 + description: Trigger + axisConstraint: 3 + keyCode: 0 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 4 + description: Trigger Touched axisType: 2 inputType: 11 inputAction: @@ -408,123 +473,110 @@ MonoBehaviour: description: None axisConstraint: 0 keyCode: 0 - axisCodeX: AXIS_9 + axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 4 - description: Grip Trigger Position - axisType: 3 - inputType: 10 + - id: 5 + description: Trigger Press (Select) + axisType: 2 + inputType: 25 inputAction: - id: 6 - description: Trigger - axisConstraint: 3 + id: 1 + description: Select + axisConstraint: 2 keyCode: 0 - axisCodeX: AXIS_11 + axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 5 - description: Trackpad-Thumbstick Position + - id: 6 + description: Touchpad Position axisType: 4 inputType: 21 - inputAction: - id: 5 - description: Teleport Direction - axisConstraint: 4 - keyCode: 0 - axisCodeX: AXIS_1 - axisCodeY: AXIS_2 - invertXAxis: 0 - invertYAxis: 1 - - id: 6 - description: Trackpad-Thumbstick Touch - axisType: 2 - inputType: 22 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 346 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 7 - description: Trackpad-Thumbstick Press + description: Touchpad Touch axisType: 2 - inputType: 24 + inputType: 22 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 338 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 8 - description: Unity Button Id 2 + description: Touchpad Press axisType: 2 - inputType: 7 + inputType: 24 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 332 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 9 - description: Unity Button Id 3 + description: Menu Press axisType: 2 - inputType: 7 + inputType: 27 inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 333 + id: 2 + description: Menu + axisConstraint: 2 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 10 - description: WMR Touchpad Touch - axisType: 2 - inputType: 22 + description: Thumbstick Position + axisType: 4 + inputType: 17 inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 348 + id: 5 + description: Teleport Direction + axisConstraint: 4 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 11 - description: WMR Touchpad Position - axisType: 4 - inputType: 21 + description: Thumbstick Press + axisType: 2 + inputType: 18 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: AXIS_17 - axisCodeY: AXIS_18 + axisCodeX: + axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 4 - description: Generic OVR Controller Right + - id: 3 + description: Windows Mixed Reality Hand Gestures controllerType: - reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.GenericOpenVRController, + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.WindowsMixedReality.WindowsMixedRealityController, Microsoft.MixedReality.Toolkit - handedness: 2 + handedness: 0 useDefaultModel: 0 overrideModel: {fileID: 0} - useCustomInteractionMappings: 1 + useCustomInteractionMappings: 0 interactions: - id: 0 description: Spatial Pointer @@ -540,150 +592,150 @@ MonoBehaviour: invertXAxis: 0 invertYAxis: 0 - id: 1 - description: Trigger Position - axisType: 3 - inputType: 10 + description: Spatial Grip + axisType: 7 + inputType: 14 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 3 + description: Grip Pose + axisConstraint: 7 keyCode: 0 - axisCodeX: AXIS_10 + axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 2 - description: Trigger Press (Select) + description: Grip Press axisType: 2 - inputType: 13 + inputType: 7 inputAction: - id: 1 - description: Select - axisConstraint: 2 - keyCode: 345 + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 3 - description: Trigger Touch - axisType: 2 - inputType: 11 + description: Trigger Position + axisType: 3 + inputType: 10 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: AXIS_10 + axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 4 - description: Grip Trigger Position - axisType: 3 - inputType: 10 + description: Trigger Touched + axisType: 2 + inputType: 11 inputAction: - id: 6 - description: Trigger - axisConstraint: 3 + id: 0 + description: None + axisConstraint: 0 keyCode: 0 - axisCodeX: AXIS_12 + axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 5 - description: Trackpad-Thumbstick Position - axisType: 4 - inputType: 21 + description: Trigger Press (Select) + axisType: 2 + inputType: 25 inputAction: - id: 5 - description: Teleport Direction - axisConstraint: 4 + id: 1 + description: Select + axisConstraint: 2 keyCode: 0 - axisCodeX: AXIS_4 - axisCodeY: AXIS_5 + axisCodeX: + axisCodeY: invertXAxis: 0 - invertYAxis: 1 + invertYAxis: 0 - id: 6 - description: Trackpad-Thumbstick Touch - axisType: 2 - inputType: 22 + description: Touchpad Position + axisType: 4 + inputType: 21 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 347 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 7 - description: Trackpad-Thumbstick Press + description: Touchpad Touch axisType: 2 - inputType: 24 + inputType: 22 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 339 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 8 - description: Unity Button Id 0 + description: Touchpad Press axisType: 2 - inputType: 7 + inputType: 24 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 330 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 9 - description: Unity Button Id 1 + description: Menu Press axisType: 2 - inputType: 7 + inputType: 27 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 331 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 10 - description: WMR Touchpad Touch - axisType: 2 - inputType: 22 + description: Thumbstick Position + axisType: 4 + inputType: 17 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 349 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 11 - description: WMR Touchpad Position - axisType: 4 - inputType: 21 + description: Thumbstick Press + axisType: 2 + inputType: 18 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: AXIS_19 - axisCodeY: AXIS_20 + axisCodeX: + axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 5 - description: OVR WMR Controller Left + - id: 4 + description: Open VR Motion Controller Left controllerType: reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.WindowsMixedRealityOpenVRMotionController, Microsoft.MixedReality.Toolkit @@ -710,15 +762,28 @@ MonoBehaviour: axisType: 7 inputType: 14 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 3 + description: Grip Pose + axisConstraint: 7 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 2 + description: Grip Press + axisType: 3 + inputType: 13 + inputAction: + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_11 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 3 description: Trigger Position axisType: 3 inputType: 10 @@ -731,33 +796,33 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 3 + - id: 4 description: Trigger Press (Select) axisType: 2 inputType: 13 inputAction: - id: 1 - description: Select - axisConstraint: 2 + id: 0 + description: None + axisConstraint: 0 keyCode: 344 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 4 - description: Grip Button + - id: 5 + description: Trigger Touch axisType: 3 - inputType: 7 + inputType: 11 inputAction: - id: 7 - description: Grip Press - axisConstraint: 3 + id: 1 + description: Select + axisConstraint: 2 keyCode: 0 - axisCodeX: AXIS_11 + axisCodeX: AXIS_9 axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 5 + - id: 6 description: Touchpad Position axisType: 4 inputType: 21 @@ -770,7 +835,7 @@ MonoBehaviour: axisCodeY: AXIS_18 invertXAxis: 0 invertYAxis: 0 - - id: 6 + - id: 7 description: Touchpad Touch axisType: 2 inputType: 22 @@ -783,7 +848,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 7 + - id: 8 description: Touchpad Press axisType: 2 inputType: 24 @@ -796,8 +861,8 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 8 - description: Menu Button + - id: 9 + description: Menu Press axisType: 2 inputType: 7 inputAction: @@ -809,7 +874,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 9 + - id: 10 description: Thumbstick Position axisType: 4 inputType: 17 @@ -822,7 +887,7 @@ MonoBehaviour: axisCodeY: AXIS_2 invertXAxis: 0 invertYAxis: 1 - - id: 10 + - id: 11 description: Thumbstick Click axisType: 2 inputType: 7 @@ -835,8 +900,8 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 6 - description: OVR WMR Controller Right + - id: 5 + description: Open VR Motion Controller Right controllerType: reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.WindowsMixedRealityOpenVRMotionController, Microsoft.MixedReality.Toolkit @@ -863,15 +928,28 @@ MonoBehaviour: axisType: 7 inputType: 14 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 3 + description: Grip Pose + axisConstraint: 7 keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 2 + description: Grip Press + axisType: 3 + inputType: 7 + inputAction: + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_12 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 3 description: Trigger Position axisType: 3 inputType: 10 @@ -884,33 +962,33 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 3 + - id: 4 description: Trigger Press (Select) axisType: 2 inputType: 13 inputAction: - id: 1 - description: Select - axisConstraint: 2 + id: 0 + description: None + axisConstraint: 0 keyCode: 345 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 4 - description: Grip Button + - id: 5 + description: Trigger Touch axisType: 3 - inputType: 7 + inputType: 11 inputAction: - id: 7 - description: Grip Press - axisConstraint: 3 + id: 1 + description: Select + axisConstraint: 2 keyCode: 0 - axisCodeX: AXIS_12 + axisCodeX: AXIS_10 axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 5 + - id: 6 description: Touchpad Position axisType: 4 inputType: 21 @@ -923,7 +1001,7 @@ MonoBehaviour: axisCodeY: AXIS_20 invertXAxis: 0 invertYAxis: 0 - - id: 6 + - id: 7 description: Touchpad Touch axisType: 2 inputType: 22 @@ -936,7 +1014,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 7 + - id: 8 description: Touchpad Press axisType: 2 inputType: 24 @@ -949,8 +1027,8 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 8 - description: Menu Button + - id: 9 + description: Menu Press axisType: 2 inputType: 7 inputAction: @@ -962,7 +1040,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 9 + - id: 10 description: Thumbstick Position axisType: 4 inputType: 17 @@ -975,7 +1053,7 @@ MonoBehaviour: axisCodeY: AXIS_5 invertXAxis: 0 invertYAxis: 1 - - id: 10 + - id: 11 description: Thumbstick Click axisType: 2 inputType: 7 @@ -988,230 +1066,266 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 7 - description: Xbox Controller + - id: 6 + description: Vive Wand Controller Left controllerType: - reference: Microsoft.MixedReality.Toolkit.Internal.Devices.UnityInput.XboxController, + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.ViveWandController, Microsoft.MixedReality.Toolkit - handedness: 0 + handedness: 1 useDefaultModel: 0 overrideModel: {fileID: 0} useCustomInteractionMappings: 0 interactions: - id: 0 - description: Left Thumbstick - axisType: 4 - inputType: 17 + description: Spatial Pointer + axisType: 7 + inputType: 3 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 4 + description: Pointer Pose + axisConstraint: 7 keyCode: 0 - axisCodeX: AXIS_1 - axisCodeY: AXIS_2 - invertXAxis: 0 - invertYAxis: 1 - - id: 0 - description: Left Thumbstick Click - axisType: 2 - inputType: 7 - inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 338 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: Right Thumbstick - axisType: 4 - inputType: 17 + - id: 1 + description: Trigger Position + axisType: 3 + inputType: 10 inputAction: - id: 5 - description: Teleport Direction - axisConstraint: 4 + id: 6 + description: Trigger + axisConstraint: 3 keyCode: 0 - axisCodeX: AXIS_4 - axisCodeY: AXIS_5 + axisCodeX: AXIS_9 + axisCodeY: invertXAxis: 0 - invertYAxis: 1 - - id: 0 - description: Right Thumbstick Click + invertYAxis: 0 + - id: 2 + description: Trigger Press axisType: 2 - inputType: 7 + inputType: 13 inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 339 + id: 1 + description: Select + axisConstraint: 2 + keyCode: 344 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: D-Pad - axisType: 4 - inputType: 49 + - id: 3 + description: Trigger Touch + axisType: 2 + inputType: 11 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: AXIS_6 - axisCodeY: AXIS_7 + axisCodeX: AXIS_9 + axisCodeY: invertXAxis: 0 - invertYAxis: 1 - - id: 0 - description: Shared Trigger + invertYAxis: 0 + - id: 4 + description: Grip Press axisType: 3 inputType: 10 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 7 + description: Grip Press + axisConstraint: 3 keyCode: 0 - axisCodeX: AXIS_3 + axisCodeX: AXIS_11 axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: Left Trigger - axisType: 3 - inputType: 10 + - id: 5 + description: Trackpad Position + axisType: 4 + inputType: 21 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: AXIS_9 - axisCodeY: + axisCodeX: AXIS_1 + axisCodeY: AXIS_2 invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: Right Trigger - axisType: 3 - inputType: 10 + - id: 6 + description: Trackpad Touch + axisType: 2 + inputType: 22 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 - axisCodeX: AXIS_10 + keyCode: 346 + axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: View + - id: 7 + description: Trackpad Press axisType: 2 - inputType: 7 + inputType: 24 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 336 + keyCode: 338 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: Menu + - id: 8 + description: Menu Button axisType: 2 inputType: 7 inputAction: id: 2 description: Menu axisConstraint: 2 - keyCode: 337 + keyCode: 332 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 + - id: 7 + description: Vive Wand Controller Right + controllerType: + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.ViveWandController, + Microsoft.MixedReality.Toolkit + handedness: 2 + useDefaultModel: 0 + overrideModel: {fileID: 0} + useCustomInteractionMappings: 0 + interactions: - id: 0 - description: Left Bumper - axisType: 2 - inputType: 7 + description: Spatial Pointer + axisType: 7 + inputType: 3 inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 334 + id: 4 + description: Pointer Pose + axisConstraint: 7 + keyCode: 0 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: Right Bumper - axisType: 2 - inputType: 7 + - id: 1 + description: Trigger Position + axisType: 3 + inputType: 10 inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 335 - axisCodeX: + id: 6 + description: Trigger + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_10 axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: A + - id: 2 + description: Trigger Press axisType: 2 - inputType: 7 + inputType: 13 inputAction: id: 1 description: Select axisConstraint: 2 - keyCode: 330 + keyCode: 345 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: B + - id: 3 + description: Trigger Touch axisType: 2 - inputType: 7 + inputType: 11 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 331 - axisCodeX: + keyCode: 0 + axisCodeX: AXIS_10 axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: X + - id: 4 + description: Grip Press + axisType: 3 + inputType: 10 + inputAction: + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_12 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 5 + description: Trackpad Position + axisType: 4 + inputType: 21 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_4 + axisCodeY: AXIS_5 + invertXAxis: 0 + invertYAxis: 0 + - id: 6 + description: Trackpad Touch axisType: 2 - inputType: 7 + inputType: 22 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 332 + keyCode: 347 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 0 - description: Y + - id: 7 + description: Trackpad Press axisType: 2 - inputType: 7 + inputType: 24 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 333 + keyCode: 339 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 8 + description: Menu Button + axisType: 2 + inputType: 7 + inputAction: + id: 2 + description: Menu + axisConstraint: 2 + keyCode: 330 axisCodeX: axisCodeY: invertXAxis: 0 invertYAxis: 0 - id: 8 - description: WMR Hand No Handedness + description: Oculus Touch Controller Left controllerType: - reference: Microsoft.MixedReality.Toolkit.Internal.Devices.WindowsMixedReality.WindowsMixedRealityController, + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.OculusTouchController, Microsoft.MixedReality.Toolkit - handedness: 0 + handedness: 1 useDefaultModel: 0 overrideModel: {fileID: 0} useCustomInteractionMappings: 0 @@ -1221,142 +1335,818 @@ MonoBehaviour: axisType: 7 inputType: 3 inputAction: - id: 0 - description: None - axisConstraint: 0 + id: 4 + description: Pointer Pose + axisConstraint: 7 keyCode: 0 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - id: 1 - description: Spatial Grip - axisType: 7 - inputType: 14 + description: Axis1D.PrimaryIndexTrigger + axisType: 3 + inputType: 10 + inputAction: + id: 6 + description: Trigger + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_9 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 2 + description: Axis1D.PrimaryIndexTrigger Touch + axisType: 2 + inputType: 11 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 344 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 2 - description: Grip Press + - id: 3 + description: Axis1D.PrimaryIndexTrigger Near Touch axisType: 2 - inputType: 7 + inputType: 12 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: + axisCodeX: AXIS_13 axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 3 - description: Touchpad Position + - id: 4 + description: Axis1D.PrimaryIndexTrigger Press + axisType: 2 + inputType: 13 + inputAction: + id: 1 + description: Select + axisConstraint: 2 + keyCode: 0 + axisCodeX: AXIS_9 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 5 + description: Axis1D.PrimaryHandTrigger Press + axisType: 3 + inputType: 10 + inputAction: + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_11 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 6 + description: Axis2D.PrimaryThumbstick axisType: 4 - inputType: 21 + inputType: 17 + inputAction: + id: 5 + description: Teleport Direction + axisConstraint: 4 + keyCode: 0 + axisCodeX: AXIS_1 + axisCodeY: AXIS_2 + invertXAxis: 0 + invertYAxis: 0 + - id: 7 + description: Button.PrimaryThumbstick Touch + axisType: 2 + inputType: 19 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 346 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 4 - description: Touchpad Touch + - id: 8 + description: Button.PrimaryThumbstick Near Touch axisType: 2 - inputType: 22 + inputType: 31 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 + axisCodeX: AXIS_15 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 9 + description: Button.PrimaryThumbstick Press + axisType: 2 + inputType: 18 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 338 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 5 - description: Touchpad Press + - id: 10 + description: Button.Three Press axisType: 2 - inputType: 24 + inputType: 7 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 332 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 6 - description: Thumbstick Position - axisType: 4 - inputType: 17 + - id: 11 + description: Button.Four Press + axisType: 2 + inputType: 7 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 333 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 7 - description: Thumbstick Press + - id: 12 + description: Button.Start Press axisType: 2 - inputType: 18 + inputType: 7 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 337 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 8 - description: Trigger Position - axisType: 3 - inputType: 10 + - id: 13 + description: Button.Three Touch + axisType: 2 + inputType: 7 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 342 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 9 - description: Trigger Pressed (Select) + - id: 14 + description: Button.Four Touch axisType: 2 - inputType: 25 + inputType: 7 inputAction: - id: 1 - description: Select - axisConstraint: 2 - keyCode: 0 + id: 0 + description: None + axisConstraint: 0 + keyCode: 343 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 10 - description: Trigger Touched + - id: 15 + description: Touch.PrimaryThumbRest Touch axisType: 2 - inputType: 11 + inputType: 30 inputAction: id: 0 description: None axisConstraint: 0 - keyCode: 0 + keyCode: 348 axisCodeX: axisCodeY: + invertXAxis: 0 invertYAxis: 0 - - id: 11 - description: Menu Pressed + - id: 16 + description: Touch.PrimaryThumbRest Near Touch axisType: 2 - inputType: 27 + inputType: 31 inputAction: id: 0 description: None axisConstraint: 0 keyCode: 0 - axisCodeX: + axisCodeX: AXIS_17 axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 9 + description: Oculus Touch Controller Right + controllerType: + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.OculusTouchController, + Microsoft.MixedReality.Toolkit + handedness: 2 + useDefaultModel: 0 + overrideModel: {fileID: 0} + useCustomInteractionMappings: 0 + interactions: + - id: 0 + description: Spatial Pointer + axisType: 7 + inputType: 3 + inputAction: + id: 4 + description: Pointer Pose + axisConstraint: 7 + keyCode: 0 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 1 + description: Axis1D.SecondaryIndexTrigger + axisType: 3 + inputType: 10 + inputAction: + id: 6 + description: Trigger + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_10 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 2 + description: Axis1D.SecondaryIndexTrigger Touch + axisType: 2 + inputType: 11 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 345 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 3 + description: Axis1D.SecondaryIndexTrigger Near Touch + axisType: 2 + inputType: 12 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_14 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 4 + description: Axis1D.SecondaryIndexTrigger Press + axisType: 2 + inputType: 13 + inputAction: + id: 1 + description: Select + axisConstraint: 2 + keyCode: 0 + axisCodeX: AXIS_10 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 5 + description: Axis1D.SecondaryHandTrigger Press + axisType: 3 + inputType: 10 + inputAction: + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_12 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 6 + description: Axis2D.SecondaryThumbstick + axisType: 4 + inputType: 17 + inputAction: + id: 5 + description: Teleport Direction + axisConstraint: 4 + keyCode: 0 + axisCodeX: AXIS_4 + axisCodeY: AXIS_5 + invertXAxis: 0 + invertYAxis: 0 + - id: 7 + description: Button.SecondaryThumbstick Touch + axisType: 2 + inputType: 19 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 347 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 8 + description: Button.SecondaryThumbstick Near Touch + axisType: 2 + inputType: 31 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_16 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 9 + description: Button.SecondaryThumbstick Press + axisType: 2 + inputType: 18 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 339 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 10 + description: Button.One Press + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 330 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 11 + description: Button.Two Press + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 331 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 12 + description: Button.One Touch + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 340 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 13 + description: Button.Two Touch + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 341 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 14 + description: Touch.SecondaryThumbRest Touch + axisType: 2 + inputType: 30 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 349 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 15 + description: Touch.SecondaryThumbRest Near Touch + axisType: 2 + inputType: 31 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_18 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 10 + description: Oculus Remote Controller + controllerType: + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.OculusRemoteController, + Microsoft.MixedReality.Toolkit + handedness: 0 + useDefaultModel: 0 + overrideModel: {fileID: 0} + useCustomInteractionMappings: 0 + interactions: + - id: 0 + description: D-Pad Position + axisType: 4 + inputType: 49 + inputAction: + id: 5 + description: Teleport Direction + axisConstraint: 4 + keyCode: 0 + axisCodeX: AXIS_5 + axisCodeY: AXIS_6 + invertXAxis: 0 + invertYAxis: 0 + - id: 1 + description: Button.One + axisType: 2 + inputType: 7 + inputAction: + id: 1 + description: Select + axisConstraint: 2 + keyCode: 330 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 2 + description: Button.Two + axisType: 2 + inputType: 7 + inputAction: + id: 2 + description: Menu + axisConstraint: 2 + keyCode: 331 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 11 + description: Generic OpenVR Controller Left + controllerType: + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.GenericOpenVRController, + Microsoft.MixedReality.Toolkit + handedness: 1 + useDefaultModel: 0 + overrideModel: {fileID: 0} + useCustomInteractionMappings: 1 + interactions: + - id: 0 + description: Spatial Pointer + axisType: 7 + inputType: 3 + inputAction: + id: 4 + description: Pointer Pose + axisConstraint: 7 + keyCode: 0 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 1 + description: Trigger Position + axisType: 3 + inputType: 10 + inputAction: + id: 6 + description: Trigger + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_9 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 2 + description: Trigger Press (Select) + axisType: 2 + inputType: 13 + inputAction: + id: 1 + description: Select + axisConstraint: 2 + keyCode: 344 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 3 + description: Trigger Touch + axisType: 2 + inputType: 11 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_9 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 4 + description: Grip Trigger Position + axisType: 3 + inputType: 10 + inputAction: + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_11 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 5 + description: Trackpad-Thumbstick Position + axisType: 4 + inputType: 21 + inputAction: + id: 5 + description: Teleport Direction + axisConstraint: 4 + keyCode: 0 + axisCodeX: AXIS_1 + axisCodeY: AXIS_2 + invertXAxis: 0 + invertYAxis: 1 + - id: 6 + description: Trackpad-Thumbstick Touch + axisType: 2 + inputType: 22 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 346 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 7 + description: Trackpad-Thumbstick Press + axisType: 2 + inputType: 24 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 338 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 8 + description: Unity Button Id 2 + axisType: 2 + inputType: 7 + inputAction: + id: 2 + description: Menu + axisConstraint: 2 + keyCode: 332 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 9 + description: Unity Button Id 3 + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 333 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 10 + description: WMR Touchpad Touch + axisType: 2 + inputType: 22 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 348 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 11 + description: WMR Touchpad Position + axisType: 4 + inputType: 21 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_17 + axisCodeY: AXIS_18 + invertXAxis: 0 + invertYAxis: 0 + - id: 11 + description: Generic OpenVR Controller Right + controllerType: + reference: Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR.GenericOpenVRController, + Microsoft.MixedReality.Toolkit + handedness: 2 + useDefaultModel: 0 + overrideModel: {fileID: 0} + useCustomInteractionMappings: 1 + interactions: + - id: 0 + description: Spatial Pointer + axisType: 7 + inputType: 3 + inputAction: + id: 4 + description: Pointer Pose + axisConstraint: 7 + keyCode: 0 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 1 + description: Trigger Position + axisType: 3 + inputType: 10 + inputAction: + id: 6 + description: Trigger + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_10 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 2 + description: Trigger Press (Select) + axisType: 2 + inputType: 13 + inputAction: + id: 1 + description: Select + axisConstraint: 2 + keyCode: 345 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 3 + description: Trigger Touch + axisType: 2 + inputType: 11 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_10 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 4 + description: Grip Trigger Position + axisType: 3 + inputType: 10 + inputAction: + id: 7 + description: Grip Press + axisConstraint: 3 + keyCode: 0 + axisCodeX: AXIS_12 + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 5 + description: Trackpad-Thumbstick Position + axisType: 4 + inputType: 21 + inputAction: + id: 5 + description: Teleport Direction + axisConstraint: 4 + keyCode: 0 + axisCodeX: AXIS_4 + axisCodeY: AXIS_5 + invertXAxis: 0 + invertYAxis: 1 + - id: 6 + description: Trackpad-Thumbstick Touch + axisType: 2 + inputType: 22 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 347 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 7 + description: Trackpad-Thumbstick Press + axisType: 2 + inputType: 24 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 339 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 8 + description: Unity Button Id 0 + axisType: 2 + inputType: 7 + inputAction: + id: 2 + description: Menu + axisConstraint: 2 + keyCode: 330 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 9 + description: Unity Button Id 1 + axisType: 2 + inputType: 7 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 331 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 10 + description: WMR Touchpad Touch + axisType: 2 + inputType: 22 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 349 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 11 + description: WMR Touchpad Position + axisType: 4 + inputType: 21 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: AXIS_19 + axisCodeY: AXIS_20 + invertXAxis: 0 invertYAxis: 0 diff --git a/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerConfigurationProfile.asset.meta b/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset.meta similarity index 79% rename from Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerConfigurationProfile.asset.meta rename to Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset.meta index 2912d94346c..0543e9d241d 100644 --- a/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerConfigurationProfile.asset.meta +++ b/Assets/MixedRealityToolkit-SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3b591b9f56584e888f557aa29796cbf8 +guid: 39ded1fd0711a0c448413d0e1ec4f7f3 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/ControllerMappingLibrary.cs b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/ControllerMappingLibrary.cs index 385168100f4..76db529e039 100644 --- a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/ControllerMappingLibrary.cs +++ b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/ControllerMappingLibrary.cs @@ -2,7 +2,10 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. #if UNITY_EDITOR +using Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities; using Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities.Editor; +using UnityEditor; +using UnityEngine; #endif namespace Microsoft.MixedReality.Toolkit.Internal.Definitions.Devices @@ -12,8 +15,6 @@ namespace Microsoft.MixedReality.Toolkit.Internal.Definitions.Devices /// public static class ControllerMappingLibrary { - #region Controller axis mapping configuration - #region Constants /// @@ -185,10 +186,10 @@ public static class ControllerMappingLibrary #endregion Constants - #region InputAxisConfig - #if UNITY_EDITOR + #region InputAxisConfig + /// /// Get the InputManagerAxis data needed to configure the Input Mappings for a controller /// @@ -224,10 +225,628 @@ public static class ControllerMappingLibrary new InputManagerAxis { Name = AXIS_27, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 27 } }; -#endif + #endregion InputAxisConfig + + #region Controller Image Resources + + private static Texture2D genericControllerWhiteScaled; + + public static Texture2D GenericControllerWhiteScaled + { + get + { + if (genericControllerWhiteScaled == null) + { + genericControllerWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_white_scaled.png", typeof(Texture2D)); + } + + return genericControllerWhiteScaled; + } + } + + private static Texture2D genericControllerBlackScaled; + + public static Texture2D GenericControllerBlackScaled + { + get + { + if (genericControllerBlackScaled == null) + { + genericControllerBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_black_scaled.png", typeof(Texture2D)); + } + + return genericControllerBlackScaled; + } + } + + private static Texture2D xboxControllerWhite; + + public static Texture2D XboxControllerWhite + { + get + { + if (xboxControllerWhite == null) + { + xboxControllerWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/XboxController_white.png", typeof(Texture2D)); + } + + return xboxControllerWhite; + } + } - #endregion + private static Texture2D xboxControllerWhiteScaled; + + public static Texture2D XboxControllerWhiteScaled + { + get + { + if (xboxControllerWhiteScaled == null) + { + xboxControllerWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/XboxController_white_scaled.png", typeof(Texture2D)); + } + + return xboxControllerWhiteScaled; + } + } + + private static Texture2D xboxControllerBlack; + + public static Texture2D XboxControllerBlack + { + get + { + if (xboxControllerBlack == null) + { + xboxControllerBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/XboxController_black.png", typeof(Texture2D)); + } + + return xboxControllerBlack; + } + } + + private static Texture2D xboxControllerBlackScaled; + + public static Texture2D XboxControllerBlackScaled + { + get + { + if (xboxControllerBlackScaled == null) + { + xboxControllerBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/XboxController_black_scaled.png", typeof(Texture2D)); + } + + return xboxControllerBlackScaled; + } + } + + private static Texture2D oculusRemoteControllerWhite; + + public static Texture2D OculusRemoteControllerWhite + { + get + { + if (oculusRemoteControllerWhite == null) + { + oculusRemoteControllerWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusRemoteController_white.png", typeof(Texture2D)); + } + + return oculusRemoteControllerWhite; + } + } + + private static Texture2D oculusRemoteControllerWhiteScaled; + + public static Texture2D OculusRemoteControllerWhiteScaled + { + get + { + if (oculusRemoteControllerWhiteScaled == null) + { + oculusRemoteControllerWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusRemoteController_white_scaled.png", typeof(Texture2D)); + } + + return oculusRemoteControllerWhiteScaled; + } + } + + private static Texture2D oculusRemoteControllerBlack; + + public static Texture2D OculusRemoteControllerBlack + { + get + { + if (oculusRemoteControllerBlack == null) + { + oculusRemoteControllerBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusRemoteController_black.png", typeof(Texture2D)); + } + + return oculusRemoteControllerBlack; + } + } + + private static Texture2D oculusRemoteControllerBlackScaled; + + public static Texture2D OculusRemoteControllerBlackScaled + { + get + { + if (oculusRemoteControllerBlackScaled == null) + { + oculusRemoteControllerBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusRemoteController_black_scaled.png", typeof(Texture2D)); + } + + return oculusRemoteControllerBlackScaled; + } + } + + private static Texture2D wmrControllerLeftWhite; + + public static Texture2D WmrControllerLeftWhite + { + get + { + if (wmrControllerLeftWhite == null) + { + wmrControllerLeftWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white.png", typeof(Texture2D)); + } + + return wmrControllerLeftWhite; + } + } + + private static Texture2D wmrControllerLeftWhiteScaled; + + public static Texture2D WmrControllerLeftWhiteScaled + { + get + { + if (wmrControllerLeftWhiteScaled == null) + { + wmrControllerLeftWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white_scaled.png", typeof(Texture2D)); + } + + return wmrControllerLeftWhiteScaled; + } + } + + private static Texture2D wmrControllerLeftBlack; + + public static Texture2D WmrControllerLeftBlack + { + get + { + if (wmrControllerLeftBlack == null) + { + wmrControllerLeftBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black.png", typeof(Texture2D)); + } + + return wmrControllerLeftBlack; + } + } + + private static Texture2D wmrControllerLeftBlackScaled; + + public static Texture2D WmrControllerLeftBlackScaled + { + get + { + if (wmrControllerLeftBlackScaled == null) + { + wmrControllerLeftBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black_scaled.png", typeof(Texture2D)); + } + + return wmrControllerLeftBlackScaled; + } + } + + private static Texture2D wmrControllerRightWhite; + + public static Texture2D WmrControllerRightWhite + { + get + { + if (wmrControllerRightWhite == null) + { + wmrControllerRightWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white.png", typeof(Texture2D)); + } + + return wmrControllerRightWhite; + } + } + + private static Texture2D wmrControllerRightWhiteScaled; + + public static Texture2D WmrControllerRightWhiteScaled + { + get + { + if (wmrControllerRightWhiteScaled == null) + { + wmrControllerRightWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white_scaled.png", typeof(Texture2D)); + } + + return wmrControllerRightWhiteScaled; + } + } + + private static Texture2D wmrControllerRightBlack; + + public static Texture2D WmrControllerRightBlack + { + get + { + if (wmrControllerRightBlack == null) + { + wmrControllerRightBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black.png", typeof(Texture2D)); + } - #endregion Controller axis mapping configuration + return wmrControllerRightBlack; + } + } + + private static Texture2D wmrControllerRightBlackScaled; + + public static Texture2D WmrControllerRightBlackScaled + { + get + { + if (wmrControllerRightBlackScaled == null) + { + wmrControllerRightBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black_scaled.png", typeof(Texture2D)); + } + + return wmrControllerRightBlackScaled; + } + } + + private static Texture2D touchControllerLeftWhite; + + public static Texture2D TouchControllerLeftWhite + { + get + { + if (touchControllerLeftWhite == null) + { + touchControllerLeftWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_left_white.png", typeof(Texture2D)); + } + + return touchControllerLeftWhite; + } + } + + private static Texture2D touchControllerLeftWhiteScaled; + + public static Texture2D TouchControllerLeftWhiteScaled + { + get + { + if (touchControllerLeftWhiteScaled == null) + { + touchControllerLeftWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_left_white_scaled.png", typeof(Texture2D)); + } + + return touchControllerLeftWhiteScaled; + } + } + + private static Texture2D touchControllerLeftBlack; + + public static Texture2D TouchControllerLeftBlack + { + get + { + if (touchControllerLeftBlack == null) + { + touchControllerLeftBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_left_black.png", typeof(Texture2D)); + } + + return touchControllerLeftBlack; + } + } + + private static Texture2D touchControllerLeftBlackScaled; + + public static Texture2D TouchControllerLeftBlackScaled + { + get + { + if (touchControllerLeftBlackScaled == null) + { + touchControllerLeftBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_left_black_scaled.png", typeof(Texture2D)); + } + + return touchControllerLeftBlackScaled; + } + } + + private static Texture2D touchControllerRightWhite; + + public static Texture2D TouchControllerRightWhite + { + get + { + if (touchControllerRightWhite == null) + { + touchControllerRightWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_right_white.png", typeof(Texture2D)); + } + + return touchControllerRightWhite; + } + } + + private static Texture2D touchControllerRightWhiteScaled; + + public static Texture2D TouchControllerRightWhiteScaled + { + get + { + if (touchControllerRightWhiteScaled == null) + { + touchControllerRightWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_right_white_scaled.png", typeof(Texture2D)); + } + + return touchControllerRightWhiteScaled; + } + } + + private static Texture2D touchControllerRightBlack; + + public static Texture2D TouchControllerRightBlack + { + get + { + if (touchControllerRightBlack == null) + { + touchControllerRightBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_right_black.png", typeof(Texture2D)); + } + + return touchControllerRightBlack; + } + } + + private static Texture2D touchControllerRightBlackScaled; + + public static Texture2D TouchControllerRightBlackScaled + { + get + { + if (touchControllerRightBlackScaled == null) + { + touchControllerRightBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/OculusControllersTouch_right_black_scaled.png", typeof(Texture2D)); + } + + return touchControllerRightBlackScaled; + } + } + + private static Texture2D viveWandControllerLeftWhite; + + public static Texture2D ViveWandControllerLeftWhite + { + get + { + if (viveWandControllerLeftWhite == null) + { + viveWandControllerLeftWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_left_white.png", typeof(Texture2D)); + } + + return viveWandControllerLeftWhite; + } + } + + private static Texture2D viveWandControllerLeftWhiteScaled; + + public static Texture2D ViveWandControllerLeftWhiteScaled + { + get + { + if (viveWandControllerLeftWhiteScaled == null) + { + viveWandControllerLeftWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_left_white_scaled.png", typeof(Texture2D)); + } + + return viveWandControllerLeftWhiteScaled; + } + } + + private static Texture2D viveWandControllerLeftBlack; + + public static Texture2D ViveWandControllerLeftBlack + { + get + { + if (viveWandControllerLeftBlack == null) + { + viveWandControllerLeftBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_left_black.png", typeof(Texture2D)); + } + + return viveWandControllerLeftBlack; + } + } + + private static Texture2D viveWandControllerLeftBlackScaled; + + public static Texture2D ViveWandControllerLeftBlackScaled + { + get + { + if (viveWandControllerLeftBlackScaled == null) + { + viveWandControllerLeftBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_left_black_scaled.png", typeof(Texture2D)); + } + + return viveWandControllerLeftBlackScaled; + } + } + + private static Texture2D viveWandControllerRightWhite; + + public static Texture2D ViveWandControllerRightWhite + { + get + { + if (viveWandControllerRightWhite == null) + { + viveWandControllerRightWhite = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_right_white.png", typeof(Texture2D)); + } + + return viveWandControllerRightWhite; + } + } + + private static Texture2D viveWandControllerRightWhiteScaled; + + public static Texture2D ViveWandControllerRightWhiteScaled + { + get + { + if (viveWandControllerRightWhiteScaled == null) + { + viveWandControllerRightWhiteScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_right_white_scaled.png", typeof(Texture2D)); + } + + return viveWandControllerRightWhiteScaled; + } + } + + private static Texture2D viveWandControllerRightBlack; + + public static Texture2D ViveWandControllerRightBlack + { + get + { + if (viveWandControllerRightBlack == null) + { + viveWandControllerRightBlack = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_right_black.png", typeof(Texture2D)); + } + + return viveWandControllerRightBlack; + } + } + + private static Texture2D viveWandControllerRightBlackScaled; + + public static Texture2D ViveWandControllerRightBlackScaled + { + get + { + if (viveWandControllerRightBlackScaled == null) + { + viveWandControllerRightBlackScaled = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/MixedRealityToolkit/_Core/Resources/Textures/ViveWandController_right_black_scaled.png", typeof(Texture2D)); + } + + return viveWandControllerRightBlackScaled; + } + } + + #endregion Controller Image Resources + + public static Texture2D GetControllerTexture(SupportedControllerType currentControllerType, Handedness handedness) + { + switch (currentControllerType) + { + case SupportedControllerType.ViveWand: + if (handedness == Handedness.Left) + { + return EditorGUIUtility.isProSkin ? ViveWandControllerLeftWhite : ViveWandControllerLeftBlack; + } + else if (handedness == Handedness.Right) + { + return EditorGUIUtility.isProSkin ? ViveWandControllerRightWhite : ViveWandControllerRightBlack; + } + + break; + case SupportedControllerType.OculusTouch: + if (handedness == Handedness.Left) + { + return EditorGUIUtility.isProSkin ? TouchControllerLeftWhite : TouchControllerLeftBlack; + } + else if (handedness == Handedness.Right) + { + return EditorGUIUtility.isProSkin ? TouchControllerRightWhite : TouchControllerRightBlack; + } + + break; + case SupportedControllerType.OculusRemote: + return EditorGUIUtility.isProSkin ? OculusRemoteControllerWhite : OculusRemoteControllerBlack; + case SupportedControllerType.WindowsMixedReality: + if (handedness == Handedness.Left) + { + return EditorGUIUtility.isProSkin ? WmrControllerLeftWhite : WmrControllerLeftBlack; + } + else if (handedness == Handedness.Right) + { + return EditorGUIUtility.isProSkin ? WmrControllerRightWhite : WmrControllerRightBlack; + } + else + { + // TODO Add HoloLens Image + return null; + } + case SupportedControllerType.Xbox: + return EditorGUIUtility.isProSkin ? XboxControllerWhite : XboxControllerBlack; + } + + return null; + } + + public static Texture2D GetControllerTextureScaled(SupportedControllerType currentControllerType, Handedness handedness) + { + Texture2D texture = null; + switch (currentControllerType) + { + case SupportedControllerType.ViveWand: + if (handedness == Handedness.Left) + { + texture = EditorGUIUtility.isProSkin ? ViveWandControllerLeftWhiteScaled : ViveWandControllerLeftBlackScaled; + } + else if (handedness == Handedness.Right) + { + texture = EditorGUIUtility.isProSkin ? ViveWandControllerRightWhiteScaled : ViveWandControllerRightBlackScaled; + } + + break; + case SupportedControllerType.OculusTouch: + if (handedness == Handedness.Left) + { + texture = EditorGUIUtility.isProSkin ? TouchControllerLeftWhiteScaled : TouchControllerLeftBlackScaled; + } + else if (handedness == Handedness.Right) + { + texture = EditorGUIUtility.isProSkin ? TouchControllerRightWhiteScaled : TouchControllerRightBlackScaled; + } + + break; + case SupportedControllerType.OculusRemote: + texture = EditorGUIUtility.isProSkin ? OculusRemoteControllerWhiteScaled : OculusRemoteControllerBlackScaled; + break; + case SupportedControllerType.WindowsMixedReality: + if (handedness == Handedness.Left) + { + texture = EditorGUIUtility.isProSkin ? WmrControllerLeftWhiteScaled : WmrControllerLeftBlackScaled; + } + else if (handedness == Handedness.Right) + { + texture = EditorGUIUtility.isProSkin ? WmrControllerRightWhiteScaled : WmrControllerRightBlackScaled; + } + else + { + // TODO Add HoloLens Image + } + + break; + case SupportedControllerType.Xbox: + texture = EditorGUIUtility.isProSkin ? XboxControllerWhiteScaled : XboxControllerBlackScaled; + break; + } + + if (texture == null) + { + texture = EditorGUIUtility.isProSkin ? GenericControllerWhiteScaled : GenericControllerBlackScaled; + } + + return texture; + } +#endif // UNITY_EDITOR } } \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMapping.cs b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMapping.cs index d3589fa957e..e24c998035c 100644 --- a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMapping.cs +++ b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMapping.cs @@ -6,8 +6,10 @@ using Microsoft.MixedReality.Toolkit.Internal.Devices; using Microsoft.MixedReality.Toolkit.Internal.Interfaces.Devices; using System; +using System.Runtime.CompilerServices; using UnityEngine; +[assembly: InternalsVisibleTo("Microsoft.MixedReality.Toolkit.Internal.Inspectors")] namespace Microsoft.MixedReality.Toolkit.Internal.Definitions.Devices { /// @@ -16,14 +18,14 @@ namespace Microsoft.MixedReality.Toolkit.Internal.Definitions.Devices [Serializable] public struct MixedRealityControllerMapping { - public MixedRealityControllerMapping(uint id, string description, IMixedRealityController controllerType, Handedness handedness, GameObject overrideModel) : this() + public MixedRealityControllerMapping(uint id, string description, Type controllerType, Handedness handedness = Handedness.None, bool useCustomInteractionMappings = false, GameObject overrideModel = null) : this() { this.id = id; this.description = description; - this.controllerType = new SystemType(controllerType.GetType()); + this.controllerType = new SystemType(controllerType); this.handedness = handedness; this.overrideModel = overrideModel; - useCustomInteractionMappings = false; + this.useCustomInteractionMappings = useCustomInteractionMappings; interactions = null; useDefaultModel = false; } @@ -70,11 +72,7 @@ public MixedRealityControllerMapping(uint id, string description, IMixedRealityC /// /// User the controller model loader provided by the SDK, or provide override models. /// - public bool UseDefaultModel - { - get { return useDefaultModel; } - private set { useDefaultModel = value; } - } + public bool UseDefaultModel => useDefaultModel; /// /// The controller model prefab to be rendered. @@ -92,7 +90,7 @@ public bool UseDefaultModel /// /// Is this controller mapping using custom interactions? /// - public bool UseCustomInteractionMappings => useCustomInteractionMappings; + public bool HasCustomInteractionMappings => useCustomInteractionMappings; /// /// Details the list of available buttons / interactions available from the device. @@ -106,11 +104,11 @@ public bool UseDefaultModel /// /// Sets the default interaction mapping based on the current controller type. /// - public void SetDefaultInteractionMapping() + internal void SetDefaultInteractionMapping(bool overwrite = false) { var detectedController = Activator.CreateInstance(controllerType, TrackingState.NotTracked, handedness, null, null) as BaseController; - if (detectedController != null) + if (detectedController != null && (interactions == null || interactions.Length == 0 || overwrite)) { switch (handedness) { @@ -126,5 +124,23 @@ public void SetDefaultInteractionMapping() } } } + + /// + /// Synchronizes the Input Actions of the same physical controller of a different concrete type. + /// + /// + internal void SynchronizeInputActions(MixedRealityInteractionMapping[] otherControllerMapping) + { + if (otherControllerMapping.Length != interactions.Length) + { + Debug.LogError("Controller Input Actions must be the same length!"); + return; + } + + for (int i = 0; i < interactions.Length; i++) + { + interactions[i].MixedRealityInputAction = otherControllerMapping[i].MixedRealityInputAction; + } + } } } \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMappingProfile.cs b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMappingProfile.cs index b279b08cae1..307f10d8d48 100644 --- a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMappingProfile.cs +++ b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityControllerMappingProfile.cs @@ -2,6 +2,9 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities; +using Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR; +using Microsoft.MixedReality.Toolkit.Internal.Devices.UnityInput; +using Microsoft.MixedReality.Toolkit.Internal.Devices.WindowsMixedReality; using System; using UnityEngine; @@ -64,7 +67,22 @@ public GameObject GlobalRightHandModel [SerializeField] [Tooltip("The list of controller templates your application can use.")] - private MixedRealityControllerMapping[] mixedRealityControllerMappingProfiles = new MixedRealityControllerMapping[0]; + private MixedRealityControllerMapping[] mixedRealityControllerMappingProfiles = + { + new MixedRealityControllerMapping(0, "Xbox Controller", typeof(XboxController)), + new MixedRealityControllerMapping(1, "Windows Mixed Reality Motion Controller Left", typeof(WindowsMixedRealityController), Handedness.Left), + new MixedRealityControllerMapping(2, "Windows Mixed Reality Motion Controller Right", typeof(WindowsMixedRealityController), Handedness.Right), + new MixedRealityControllerMapping(3, "Open VR Motion Controller Left", typeof(WindowsMixedRealityOpenVRMotionController), Handedness.Left), + new MixedRealityControllerMapping(4, "Open VR Motion Controller Right", typeof(WindowsMixedRealityOpenVRMotionController), Handedness.Right), + new MixedRealityControllerMapping(5, "Windows Mixed Reality Hand Gestures", typeof(WindowsMixedRealityController)), + new MixedRealityControllerMapping(6, "Vive Wand Controller Left", typeof(ViveWandController), Handedness.Left), + new MixedRealityControllerMapping(7, "Vive Wand Controller Right", typeof(ViveWandController), Handedness.Right), + new MixedRealityControllerMapping(8, "Oculus Touch Controller Left", typeof(OculusTouchController), Handedness.Left), + new MixedRealityControllerMapping(9, "Oculus Touch Controller Right", typeof(OculusTouchController), Handedness.Right), + new MixedRealityControllerMapping(10, "Oculus Remote Controller", typeof(OculusRemoteController)), + new MixedRealityControllerMapping(11, "Generic OpenVR Controller Left", typeof(GenericOpenVRController), Handedness.Left, true), + new MixedRealityControllerMapping(12, "Generic OpenVR Controller Right", typeof(GenericOpenVRController), Handedness.Right, true), + }; public MixedRealityControllerMapping[] MixedRealityControllerMappingProfiles => mixedRealityControllerMappingProfiles; @@ -87,5 +105,13 @@ public GameObject GetControllerModelOverride(Type controllerType, Handedness han return null; } + + private void Awake() + { + for (int i = 0; i < mixedRealityControllerMappingProfiles.Length; i++) + { + mixedRealityControllerMappingProfiles[i].SetDefaultInteractionMapping(); + } + } } } \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityInteractionMapping.cs b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityInteractionMapping.cs index 51b47aad4dd..3da5440d531 100644 --- a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityInteractionMapping.cs +++ b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/MixedRealityInteractionMapping.cs @@ -156,7 +156,11 @@ public MixedRealityInteractionMapping(uint id, string description, AxisType axis /// /// Action to be raised to the Input Manager when the input data has changed. /// - public MixedRealityInputAction MixedRealityInputAction => inputAction; + public MixedRealityInputAction MixedRealityInputAction + { + get { return inputAction; } + internal set { inputAction = value; } + } [SerializeField] [Tooltip("Optional KeyCode value to get input from Unity's old input system.")] diff --git a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/SupportedControllerType.cs b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/SupportedControllerType.cs index 2b1285fb305..aef46f5084c 100644 --- a/Assets/MixedRealityToolkit/_Core/Definitions/Devices/SupportedControllerType.cs +++ b/Assets/MixedRealityToolkit/_Core/Definitions/Devices/SupportedControllerType.cs @@ -16,7 +16,7 @@ public enum SupportedControllerType OculusTouch, OculusRemote, WindowsMixedReality, - GenericUnityDevice, - XboxController + GenericUnity, + Xbox } } diff --git a/Assets/MixedRealityToolkit/_Core/Definitions/Utilities/Editor/InvertAxesEnum.cs b/Assets/MixedRealityToolkit/_Core/Definitions/Utilities/Editor/InvertAxesEnum.cs deleted file mode 100644 index 956bec2fd7a..00000000000 --- a/Assets/MixedRealityToolkit/_Core/Definitions/Utilities/Editor/InvertAxesEnum.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See LICENSE in the project root for license information. - -namespace Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities.Editor -{ - /// - /// Used for the editor enum flag field. - /// - public enum InvertAxesEnum - { - Nothing = 0, - X = 1, - Y = 2, - Both = ~0 - } -} diff --git a/Assets/MixedRealityToolkit/_Core/Devices/MixedReality/WindowsMixedRealityController.cs b/Assets/MixedRealityToolkit/_Core/Devices/MixedReality/WindowsMixedRealityController.cs index 0cd505cba2d..e28b6ab1244 100644 --- a/Assets/MixedRealityToolkit/_Core/Devices/MixedReality/WindowsMixedRealityController.cs +++ b/Assets/MixedRealityToolkit/_Core/Devices/MixedReality/WindowsMixedRealityController.cs @@ -39,18 +39,24 @@ public WindowsMixedRealityController(TrackingState trackingState, Handedness con { new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), new MixedRealityInteractionMapping(1, "Spatial Grip", AxisType.SixDof, DeviceInputType.SpatialGrip, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(2, "Grip Press", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(3, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(4, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(5, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(6, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(7, "Thumbstick Press", AxisType.Digital, DeviceInputType.ThumbStickPress, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(8, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(9, "Trigger Pressed (Select)", AxisType.Digital, DeviceInputType.Select, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(10, "Trigger Touched", AxisType.Digital, DeviceInputType.TriggerTouch, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(11, "Menu Pressed", AxisType.Digital, DeviceInputType.Menu, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(2, "Grip Press", AxisType.SingleAxis, DeviceInputType.TriggerPress, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(3, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(4, "Trigger Touched", AxisType.Digital, DeviceInputType.TriggerTouch, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(5, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.Select, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(6, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(7, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(8, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(9, "Menu Press", AxisType.Digital, DeviceInputType.Menu, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(10, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(11, "Thumbstick Press", AxisType.Digital, DeviceInputType.ThumbStickPress, MixedRealityInputAction.None), }; + /// + public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => DefaultInteractions; + + /// + public override MixedRealityInteractionMapping[] DefaultRightHandedInteractions => DefaultInteractions; + /// public override void SetupDefaultInteractions(Handedness controllerHandedness) { @@ -111,7 +117,6 @@ public void UpdateController(InteractionSourceState interactionSourceState) UpdateTriggerData(interactionSourceState, Interactions[i]); break; case DeviceInputType.SpatialGrip: - case DeviceInputType.ButtonPress: UpdateGripData(interactionSourceState, Interactions[i]); break; case DeviceInputType.ThumbStick: @@ -260,26 +265,6 @@ private void UpdateGripData(InteractionSourceState interactionSourceState, Mixed } } break; - case AxisType.Digital: - { - //Update the interaction data source - interactionMapping.BoolData = interactionSourceState.grasped; - - // If our value changed raise it. - if (interactionMapping.Changed) - { - // Raise input system Event if it enabled - if (interactionSourceState.grasped) - { - InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); - } - else - { - InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); - } - } - } - break; } } @@ -403,6 +388,24 @@ private void UpdateTriggerData(InteractionSourceState interactionSourceState, Mi switch (interactionMapping.InputType) { case DeviceInputType.TriggerPress: + //Update the interaction data source + interactionMapping.BoolData = interactionSourceState.grasped; + + // If our value changed raise it. + if (interactionMapping.Changed) + { + // Raise input system Event if it enabled + if (interactionSourceState.grasped) + { + InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); + } + else + { + InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); + } + } + + break; case DeviceInputType.Select: { // Update the interaction data source diff --git a/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/GenericOpenVRController.cs b/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/GenericOpenVRController.cs index 45817ff8efc..f7c10889711 100644 --- a/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/GenericOpenVRController.cs +++ b/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/GenericOpenVRController.cs @@ -59,7 +59,7 @@ public GenericOpenVRController(TrackingState trackingState, Handedness controlle // Oculus Touch Controller - Axis2D.PrimaryThumbstick // Valve Knuckles Controller - Left Controller Trackpad // Windows Mixed Reality Controller - Left Thumbstick Position - new MixedRealityInteractionMapping(5, "Trackpad-Thumbstick Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, true), + new MixedRealityInteractionMapping(5, "Trackpad-Thumbstick Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, false, true), // HTC Vive Controller - Left Controller Trackpad (2) // Oculus Touch Controller - Button.PrimaryThumbstick // Valve Knuckles Controller - Left Controller Trackpad @@ -109,7 +109,7 @@ public GenericOpenVRController(TrackingState trackingState, Handedness controlle // Oculus Touch Controller - Axis2D.PrimaryThumbstick // Valve Knuckles Controller - Right Controller Trackpad // Windows Mixed Reality Controller - Right Thumbstick Position - new MixedRealityInteractionMapping(5, "Trackpad-Thumbstick Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, true), + new MixedRealityInteractionMapping(5, "Trackpad-Thumbstick Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, false, true), // HTC Vive Controller - Right Controller Trackpad (2) // Oculus Touch Controller - Button.SecondaryThumbstick // Valve Knuckles Controller - Right Controller Trackpad diff --git a/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/OculusRemoteController.cs b/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/OculusRemoteController.cs index f2e350a181f..06d79d60f9c 100644 --- a/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/OculusRemoteController.cs +++ b/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/OculusRemoteController.cs @@ -26,8 +26,8 @@ public OculusRemoteController(TrackingState trackingState, Handedness controller public override MixedRealityInteractionMapping[] DefaultInteractions => new[] { new MixedRealityInteractionMapping(0, "D-Pad Position", AxisType.DualAxis, DeviceInputType.DirectionalPad, ControllerMappingLibrary.AXIS_5, ControllerMappingLibrary.AXIS_6), - new MixedRealityInteractionMapping(1, "Button.One", AxisType.DualAxis, DeviceInputType.ButtonPress,KeyCode.JoystickButton0), - new MixedRealityInteractionMapping(2, "Button.Two", AxisType.DualAxis, DeviceInputType.ButtonPress,KeyCode.JoystickButton1), + new MixedRealityInteractionMapping(1, "Button.One", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + new MixedRealityInteractionMapping(2, "Button.Two", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton1), }; /// diff --git a/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/WindowsMixedRealityOpenVRMotionController.cs b/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/WindowsMixedRealityOpenVRMotionController.cs index 0e93a95a74e..c0a6d606d2d 100644 --- a/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/WindowsMixedRealityOpenVRMotionController.cs +++ b/Assets/MixedRealityToolkit/_Core/Devices/OpenVR/WindowsMixedRealityOpenVRMotionController.cs @@ -32,15 +32,16 @@ public WindowsMixedRealityOpenVRMotionController(TrackingState trackingState, Ha { new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), new MixedRealityInteractionMapping(1, "Spatial Grip", AxisType.SixDof, DeviceInputType.SpatialGrip, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(2, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), - new MixedRealityInteractionMapping(3, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14), - new MixedRealityInteractionMapping(4, "Grip Button", AxisType.SingleAxis, DeviceInputType.ButtonPress, ControllerMappingLibrary.AXIS_11), - new MixedRealityInteractionMapping(5, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_17, ControllerMappingLibrary.AXIS_18), - new MixedRealityInteractionMapping(6, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton16), - new MixedRealityInteractionMapping(7, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton8), - new MixedRealityInteractionMapping(8, "Menu Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), - new MixedRealityInteractionMapping(9, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, true), - new MixedRealityInteractionMapping(10, "Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton8), + new MixedRealityInteractionMapping(2, "Grip Press", AxisType.SingleAxis, DeviceInputType.TriggerPress, ControllerMappingLibrary.AXIS_11), + new MixedRealityInteractionMapping(3, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(4, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14), + new MixedRealityInteractionMapping(5, "Trigger Touch", AxisType.SingleAxis, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(6, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_17, ControllerMappingLibrary.AXIS_18), + new MixedRealityInteractionMapping(7, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton16), + new MixedRealityInteractionMapping(8, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton8), + new MixedRealityInteractionMapping(9, "Menu Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + new MixedRealityInteractionMapping(10, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, false, true), + new MixedRealityInteractionMapping(11, "Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton8), }; /// @@ -48,15 +49,16 @@ public WindowsMixedRealityOpenVRMotionController(TrackingState trackingState, Ha { new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), new MixedRealityInteractionMapping(1, "Spatial Grip", AxisType.SixDof, DeviceInputType.SpatialGrip, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(2, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), - new MixedRealityInteractionMapping(3, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton15), - new MixedRealityInteractionMapping(4, "Grip Button", AxisType.SingleAxis, DeviceInputType.ButtonPress, ControllerMappingLibrary.AXIS_12), - new MixedRealityInteractionMapping(5, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_19, ControllerMappingLibrary.AXIS_20), - new MixedRealityInteractionMapping(6, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton17), - new MixedRealityInteractionMapping(7, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton9), - new MixedRealityInteractionMapping(8, "Menu Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton2), - new MixedRealityInteractionMapping(9, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, true), - new MixedRealityInteractionMapping(10, "Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton9), + new MixedRealityInteractionMapping(2, "Grip Press", AxisType.SingleAxis, DeviceInputType.ButtonPress, ControllerMappingLibrary.AXIS_12), + new MixedRealityInteractionMapping(3, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(4, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton15), + new MixedRealityInteractionMapping(5, "Trigger Touch", AxisType.SingleAxis, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(6, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_19, ControllerMappingLibrary.AXIS_20), + new MixedRealityInteractionMapping(7, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton17), + new MixedRealityInteractionMapping(8, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton9), + new MixedRealityInteractionMapping(9, "Menu Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton2), + new MixedRealityInteractionMapping(10, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, false, true), + new MixedRealityInteractionMapping(11, "Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton9), }; /// diff --git a/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/GenericUnityController.cs b/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/GenericUnityController.cs index e1672c3adb9..4713986b3b5 100644 --- a/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/GenericUnityController.cs +++ b/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/GenericUnityController.cs @@ -129,6 +129,7 @@ protected void UpdateSingleAxisData(MixedRealityInteractionMapping interactionMa // Update the interaction data source interactionMapping.BoolData = singleAxisValue.Equals(1); break; + case DeviceInputType.TriggerTouch: case DeviceInputType.TriggerNearTouch: case DeviceInputType.ThumbNearTouch: case DeviceInputType.IndexFingerNearTouch: diff --git a/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/UnityDeviceManager.cs b/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/UnityDeviceManager.cs index 81985e741a2..1b77c0e4467 100644 --- a/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/UnityDeviceManager.cs +++ b/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/UnityDeviceManager.cs @@ -134,10 +134,10 @@ protected virtual GenericUnityController GetOrAddController(string joystickName) { default: return null; - case SupportedControllerType.GenericUnityDevice: + case SupportedControllerType.GenericUnity: controllerType = typeof(GenericUnityController); break; - case SupportedControllerType.XboxController: + case SupportedControllerType.Xbox: controllerType = typeof(XboxController); break; } @@ -181,11 +181,11 @@ protected virtual SupportedControllerType GetCurrentControllerType(string joysti joystickName.Contains("Xbox Bluetooth Gamepad") || joystickName.Contains("Xbox Wireless Controller")) { - return SupportedControllerType.XboxController; + return SupportedControllerType.Xbox; } Debug.Log($"{joystickName} does not have a defined controller type, falling back to generic controller type"); - return SupportedControllerType.GenericUnityDevice; + return SupportedControllerType.GenericUnity; } } } diff --git a/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/XboxController.cs b/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/XboxController.cs index 27b8bff91dd..16ea0cbd5b0 100644 --- a/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/XboxController.cs +++ b/Assets/MixedRealityToolkit/_Core/Devices/UnityInput/XboxController.cs @@ -30,11 +30,11 @@ public XboxController(TrackingState trackingState, Handedness controllerHandedne /// public override MixedRealityInteractionMapping[] DefaultInteractions => new[] { - new MixedRealityInteractionMapping(0, "Left Thumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, true), + new MixedRealityInteractionMapping(0, "Left Thumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, false, true), new MixedRealityInteractionMapping(1, "Left Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton8), - new MixedRealityInteractionMapping(2, "Right Thumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, true), + new MixedRealityInteractionMapping(2, "Right Thumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, false, true), new MixedRealityInteractionMapping(3, "Right Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton9), - new MixedRealityInteractionMapping(4, "D-Pad", AxisType.DualAxis, DeviceInputType.DirectionalPad, ControllerMappingLibrary.AXIS_6, ControllerMappingLibrary.AXIS_7, true), + new MixedRealityInteractionMapping(4, "D-Pad", AxisType.DualAxis, DeviceInputType.DirectionalPad, ControllerMappingLibrary.AXIS_6, ControllerMappingLibrary.AXIS_7, false, true), new MixedRealityInteractionMapping(5, "Shared Trigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_3), new MixedRealityInteractionMapping(6, "Left Trigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), new MixedRealityInteractionMapping(7, "Right Trigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), diff --git a/Assets/MixedRealityToolkit/_Core/Extensions/StringExtensions.cs b/Assets/MixedRealityToolkit/_Core/Extensions/StringExtensions.cs index 27af4d1f50e..544286461ff 100644 --- a/Assets/MixedRealityToolkit/_Core/Extensions/StringExtensions.cs +++ b/Assets/MixedRealityToolkit/_Core/Extensions/StringExtensions.cs @@ -32,5 +32,40 @@ public static string DecodeFrom64(this string encodedData) byte[] encodedDataAsBytes = Convert.FromBase64String(encodedData); return Encoding.ASCII.GetString(encodedDataAsBytes); } + + /// + /// Capitalize the first character and add a space before + /// each capitalized letter (except the first character). + /// + /// + public static string ToProperCase(this string value) + { + // If there are 0 or 1 characters, just return the string. + if (value == null) { return value; } + if (value.Length < 2) { return value.ToUpper(); } + + // Start with the first character. + string result = value.Substring(0, 1).ToUpper(); + + // Add the remaining characters. + for (int i = 1; i < value.Length; i++) + { + var wasLastCharacterUpper = false; + + if (i < value.Length) + { + wasLastCharacterUpper = char.IsUpper(value[i - 1]); + } + + if (char.IsUpper(value[i]) && !wasLastCharacterUpper) + { + result += " "; + } + + result += value[i]; + } + + return result; + } } } diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/ControllerPopupWindow.cs b/Assets/MixedRealityToolkit/_Core/Inspectors/ControllerPopupWindow.cs new file mode 100644 index 00000000000..6584c387876 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/ControllerPopupWindow.cs @@ -0,0 +1,755 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using Microsoft.MixedReality.Toolkit.Inspectors.Data; +using Microsoft.MixedReality.Toolkit.Inspectors.Utilities; +using Microsoft.MixedReality.Toolkit.Internal.Definitions.Devices; +using Microsoft.MixedReality.Toolkit.Internal.Definitions.InputSystem; +using Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities; +using Microsoft.MixedReality.Toolkit.Internal.Managers; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace Microsoft.MixedReality.Toolkit.Inspectors +{ + public class ControllerPopupWindow : EditorWindow + { + private const string EditorWindowOptionsPath = "/MixedRealityToolkit/_Core/Inspectors/Data/EditorWindowOptions.json"; + private const float InputActionLabelWidth = 128f; + + /// + /// Used to enable editing the input axis label positions on controllers + /// + private static readonly bool EnableWysiwyg = false; + + private static readonly GUIContent InteractionAddButtonContent = new GUIContent("+ Add a New Interaction Mapping"); + private static readonly GUIContent InteractionMinusButtonContent = new GUIContent("-", "Remove Interaction Mapping"); + private static readonly GUIContent AxisTypeContent = new GUIContent("Axis Type", "The axis type of the button, e.g. Analogue, Digital, etc."); + private static readonly GUIContent ControllerInputTypeContent = new GUIContent("Input Type", "The primary action of the input as defined by the controller SDK."); + private static readonly GUIContent ActionContent = new GUIContent("Action", "Action to be raised to the Input Manager when the input data has changed."); + private static readonly GUIContent KeyCodeContent = new GUIContent("KeyCode", "Unity Input KeyCode id to listen for."); + private static readonly GUIContent XAxisContent = new GUIContent("X Axis", "Horizontal Axis to listen for."); + private static readonly GUIContent YAxisContent = new GUIContent("Y Axis", "Vertical Axis to listen for."); + private static readonly GUIContent InvertContent = new GUIContent("Invert", "Should an Axis be inverted?"); + private static readonly GUIContent[] InvertAxisContent = + { + new GUIContent("None"), + new GUIContent("X"), + new GUIContent("Y"), + new GUIContent("Both") + }; + + private static readonly int[] InvertAxisValues = { 0, 1, 2, 3 }; + + private static readonly Vector2 InputActionLabelPosition = new Vector2(256f, 0f); + private static readonly Vector2 InputActionDropdownPosition = new Vector2(88f, 0f); + private static readonly Vector2 InputActionFlipTogglePosition = new Vector2(-24f, 0f); + private static readonly Vector2 HorizontalSpace = new Vector2(8f, 0f); + + private static readonly Rect ControllerRectPosition = new Rect(new Vector2(128f, 0f), new Vector2(512f, 512f)); + + private static ControllerPopupWindow window; + private static ControllerInputActionOptions controllerInputActionOptions; + + private static GUIContent[] axisLabels; + private static int[] actionIds; + private static GUIContent[] actionLabels; + private static int[] rawActionIds; + private static GUIContent[] rawActionLabels; + private static int[] digitalActionIds; + private static GUIContent[] digitalActionLabels; + private static int[] singleAxisActionIds; + private static GUIContent[] singleAxisActionLabels; + private static int[] dualAxisActionIds; + private static GUIContent[] dualAxisActionLabels; + private static int[] threeDofPositionActionIds; + private static GUIContent[] threeDofPositionActionLabels; + private static int[] threeDofRotationActionIds; + private static GUIContent[] threeDofRotationActionLabels; + private static int[] sixDofActionIds; + private static GUIContent[] sixDofActionLabels; + private static bool[] isMouseInRects; + + private static bool editInputActionPositions; + + private static float defaultLabelWidth; + private static float defaultFieldWidth; + + private static Vector2 horizontalScrollPosition; + + private SerializedProperty currentInteractionList; + + private ControllerPopupWindow thisWindow; + + private Handedness currentHandedness; + private SupportedControllerType currentControllerType; + + private Vector2 mouseDragOffset; + private GUIStyle flippedLabelStyle; + private Texture2D currentControllerTexture; + private ControllerInputActionOption currentControllerOption; + + private bool IsCustomController => currentControllerType == SupportedControllerType.GenericOpenVR || + currentControllerType == SupportedControllerType.GenericUnity; + + private void OnFocus() + { + currentControllerTexture = ControllerMappingLibrary.GetControllerTexture(currentControllerType, currentHandedness); + + #region Interaction Constraint Setup + + actionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + axisLabels = ControllerMappingLibrary.UnityInputManagerAxes + .Select(axis => new GUIContent(axis.Name)) + .Prepend(new GUIContent("None")).ToArray(); + + actionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.None) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + actionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.None) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + rawActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Raw) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + rawActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Raw) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + digitalActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Digital) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + digitalActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Digital) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + singleAxisActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SingleAxis) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + singleAxisActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SingleAxis) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + dualAxisActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.DualAxis) + .Select(action => (int)action.Id).Prepend(0).ToArray(); + + dualAxisActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.DualAxis) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + threeDofPositionActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofPosition) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + threeDofPositionActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofPosition) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + threeDofRotationActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofRotation) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + threeDofRotationActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofRotation) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + sixDofActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SixDof) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + sixDofActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SixDof) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + #endregion Interaction Constraint Setup + } + + public static void Show(SupportedControllerType controllerType, SerializedProperty interactionsList, Handedness handedness = Handedness.None) + { + window = (ControllerPopupWindow)GetWindow(typeof(ControllerPopupWindow)); + window.Close(); + window = (ControllerPopupWindow)CreateInstance(typeof(ControllerPopupWindow)); + window.thisWindow = window; + var handednessTitleText = handedness != Handedness.None ? $"{handedness} Hand " : string.Empty; + window.titleContent = new GUIContent($"{controllerType} {handednessTitleText}Input Action Assignment"); + window.currentControllerType = controllerType; + window.currentHandedness = handedness; + window.currentInteractionList = interactionsList; + isMouseInRects = new bool[interactionsList.arraySize]; + + if (!File.Exists($"{Application.dataPath}{EditorWindowOptionsPath}")) + { + var empty = new ControllerInputActionOptions + { + Controllers = new List + { + new ControllerInputActionOption + { + Controller = SupportedControllerType.None, + Handedness = Handedness.None, + InputLabelPositions = new[] {new Vector2(0, 0)}, + IsLabelFlipped = new []{false} + } + } + }; + + File.WriteAllText($"{Application.dataPath}{EditorWindowOptionsPath}", JsonUtility.ToJson(empty)); + AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); + } + else + { + controllerInputActionOptions = JsonUtility.FromJson(File.ReadAllText($"{Application.dataPath}{EditorWindowOptionsPath}")); + + if (controllerInputActionOptions.Controllers.Any(option => option.Controller == controllerType && option.Handedness == handedness)) + { + window.currentControllerOption = controllerInputActionOptions.Controllers.FirstOrDefault(option => option.Controller == controllerType && option.Handedness == handedness); + + if (window.currentControllerOption != null && window.currentControllerOption.IsLabelFlipped == null) + { + window.currentControllerOption.IsLabelFlipped = new bool[interactionsList.arraySize]; + } + } + } + + window.ShowUtility(); + var windowSize = new Vector2(controllerType == SupportedControllerType.GenericOpenVR || controllerType == SupportedControllerType.GenericUnity ? 896f : 768f, 512f); + window.maxSize = windowSize; + window.minSize = windowSize; + window.CenterOnMainWin(); + defaultLabelWidth = EditorGUIUtility.labelWidth; + defaultFieldWidth = EditorGUIUtility.fieldWidth; + } + + private void Update() + { + if (editInputActionPositions) + { + Repaint(); + } + } + + private void OnGUI() + { + if (flippedLabelStyle == null) + { + flippedLabelStyle = new GUIStyle("Label") + { + alignment = TextAnchor.UpperRight, + stretchWidth = true + }; + } + + if (!IsCustomController && currentControllerTexture != null) + { + GUILayout.BeginHorizontal(); + GUI.DrawTexture(ControllerRectPosition, currentControllerTexture); + GUILayout.EndHorizontal(); + } + + try + { + RenderInteractionList(currentInteractionList, IsCustomController); + } + catch (Exception) + { + thisWindow.Close(); + } + } + + private void RenderInteractionList(SerializedProperty interactionList, bool useCustomInteractionMapping) + { + if (interactionList == null) { throw new Exception(); } + + bool noInteractions = interactionList.arraySize == 0; + + if (currentControllerOption != null && (currentControllerOption.IsLabelFlipped == null || currentControllerOption.IsLabelFlipped.Length != interactionList.arraySize)) + { + currentControllerOption.IsLabelFlipped = new bool[interactionList.arraySize]; + } + + GUILayout.BeginVertical(); + + if (useCustomInteractionMapping) + { + horizontalScrollPosition = EditorGUILayout.BeginScrollView(horizontalScrollPosition, false, false, GUILayout.ExpandWidth(true), GUILayout.ExpandWidth(true)); + } + + if (useCustomInteractionMapping) + { + if (GUILayout.Button(InteractionAddButtonContent)) + { + interactionList.arraySize += 1; + var interaction = interactionList.GetArrayElementAtIndex(interactionList.arraySize - 1); + var axisType = interaction.FindPropertyRelative("axisType"); + axisType.enumValueIndex = 0; + var inputType = interaction.FindPropertyRelative("inputType"); + inputType.enumValueIndex = 0; + var action = interaction.FindPropertyRelative("inputAction"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + actionDescription.stringValue = "None"; + actionId.intValue = 0; + } + + if (noInteractions) + { + EditorGUILayout.HelpBox("Create an Interaction Mapping.", MessageType.Warning); + EditorGUILayout.EndScrollView(); + GUILayout.EndVertical(); + return; + } + } + else if (EnableWysiwyg) + { + EditorGUI.BeginChangeCheck(); + editInputActionPositions = EditorGUILayout.Toggle("Edit Input Action Positions", editInputActionPositions); + + if (EditorGUI.EndChangeCheck()) + { + if (!editInputActionPositions) + { + File.WriteAllText($"{Application.dataPath}{EditorWindowOptionsPath}", JsonUtility.ToJson(controllerInputActionOptions)); + } + else + { + if (!controllerInputActionOptions.Controllers.Any(option => option.Controller == currentControllerType && option.Handedness == currentHandedness)) + { + currentControllerOption = new ControllerInputActionOption + { + Controller = currentControllerType, + Handedness = currentHandedness, + InputLabelPositions = new Vector2[currentInteractionList.arraySize], + IsLabelFlipped = new bool[currentInteractionList.arraySize] + }; + + controllerInputActionOptions.Controllers.Add(currentControllerOption); + isMouseInRects = new bool[currentInteractionList.arraySize]; + + if (controllerInputActionOptions.Controllers.Any(option => option.Controller == SupportedControllerType.None)) + { + controllerInputActionOptions.Controllers.Remove( + controllerInputActionOptions.Controllers.Find(option => + option.Controller == SupportedControllerType.None)); + } + + File.WriteAllText($"{Application.dataPath}{EditorWindowOptionsPath}", JsonUtility.ToJson(controllerInputActionOptions)); + } + } + } + } + + GUILayout.BeginHorizontal(); + + if (useCustomInteractionMapping) + { + EditorGUILayout.LabelField("Id", GUILayout.Width(32f)); + EditorGUIUtility.labelWidth = 24f; + EditorGUIUtility.fieldWidth = 24f; + EditorGUILayout.LabelField(ControllerInputTypeContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(AxisTypeContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(ActionContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(KeyCodeContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(XAxisContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(YAxisContent, GUILayout.Width(InputActionLabelWidth)); + GUILayout.FlexibleSpace(); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(24f)); + + EditorGUIUtility.labelWidth = defaultLabelWidth; + EditorGUIUtility.fieldWidth = defaultFieldWidth; + } + + GUILayout.EndHorizontal(); + + for (int i = 0; i < interactionList.arraySize; i++) + { + EditorGUILayout.BeginHorizontal(); + SerializedProperty interaction = interactionList.GetArrayElementAtIndex(i); + + if (useCustomInteractionMapping) + { + EditorGUILayout.LabelField($"{i + 1}", GUILayout.Width(32f)); + var inputType = interaction.FindPropertyRelative("inputType"); + EditorGUILayout.PropertyField(inputType, GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + var axisType = interaction.FindPropertyRelative("axisType"); + EditorGUILayout.PropertyField(axisType, GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + var invertXAxis = interaction.FindPropertyRelative("invertXAxis"); + var invertYAxis = interaction.FindPropertyRelative("invertYAxis"); + var interactionAxisConstraint = interaction.FindPropertyRelative("axisType"); + + var action = interaction.FindPropertyRelative("inputAction"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + var actionConstraint = action.FindPropertyRelative("axisConstraint"); + + GUIContent[] labels; + int[] ids; + + switch ((AxisType)interactionAxisConstraint.intValue) + { + default: + case AxisType.None: + labels = actionLabels; + ids = actionIds; + break; + case AxisType.Raw: + labels = rawActionLabels; + ids = rawActionIds; + break; + case AxisType.Digital: + labels = digitalActionLabels; + ids = digitalActionIds; + break; + case AxisType.SingleAxis: + labels = singleAxisActionLabels; + ids = singleAxisActionIds; + break; + case AxisType.DualAxis: + labels = dualAxisActionLabels; + ids = dualAxisActionIds; + break; + case AxisType.ThreeDofPosition: + labels = threeDofPositionActionLabels; + ids = threeDofPositionActionIds; + break; + case AxisType.ThreeDofRotation: + labels = threeDofRotationActionLabels; + ids = threeDofRotationActionIds; + break; + case AxisType.SixDof: + labels = sixDofActionLabels; + ids = sixDofActionIds; + break; + } + + EditorGUI.BeginChangeCheck(); + actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, labels, ids, GUILayout.Width(InputActionLabelWidth)); + + if (EditorGUI.EndChangeCheck()) + { + var inputAction = actionId.intValue == 0 ? MixedRealityInputAction.None : MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; + actionDescription.stringValue = inputAction.Description; + actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; + } + + if ((AxisType)axisType.intValue == AxisType.Digital) + { + var keyCode = interaction.FindPropertyRelative("keyCode"); + EditorGUILayout.PropertyField(keyCode, GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + else + { + if ((AxisType)axisType.intValue == AxisType.DualAxis) + { + EditorGUIUtility.labelWidth = InputActionLabelWidth * 0.5f; + EditorGUIUtility.fieldWidth = InputActionLabelWidth * 0.5f; + + int currentAxisSetting = 0; + + if (invertXAxis.boolValue) + { + currentAxisSetting += 1; + } + + if (invertYAxis.boolValue) + { + currentAxisSetting += 2; + } + + EditorGUI.BeginChangeCheck(); + currentAxisSetting = EditorGUILayout.IntPopup(InvertContent, currentAxisSetting, InvertAxisContent, InvertAxisValues, GUILayout.Width(InputActionLabelWidth)); + + if (EditorGUI.EndChangeCheck()) + { + switch (currentAxisSetting) + { + case 0: + invertXAxis.boolValue = false; + invertYAxis.boolValue = false; + break; + case 1: + invertXAxis.boolValue = true; + invertYAxis.boolValue = false; + break; + case 2: + invertXAxis.boolValue = false; + invertYAxis.boolValue = true; + break; + case 3: + invertXAxis.boolValue = true; + invertYAxis.boolValue = true; + break; + } + } + + EditorGUIUtility.labelWidth = defaultLabelWidth; + EditorGUIUtility.fieldWidth = defaultFieldWidth; + } + else if ((AxisType)axisType.intValue == AxisType.SingleAxis) + { + invertXAxis.boolValue = EditorGUILayout.ToggleLeft("Invert X", invertXAxis.boolValue, GUILayout.Width(InputActionLabelWidth)); + EditorGUIUtility.labelWidth = defaultLabelWidth; + } + else + { + EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + } + + if ((AxisType)axisType.intValue == AxisType.SingleAxis || + (AxisType)axisType.intValue == AxisType.DualAxis) + { + var axisCodeX = interaction.FindPropertyRelative("axisCodeX"); + RenderAxisPopup(axisCodeX, InputActionLabelWidth); + } + else + { + EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + + if ((AxisType)axisType.intValue == AxisType.DualAxis) + { + var axisCodeY = interaction.FindPropertyRelative("axisCodeY"); + RenderAxisPopup(axisCodeY, InputActionLabelWidth); + } + else + { + EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + + if (GUILayout.Button(InteractionMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.ExpandWidth(true))) + { + interactionList.DeleteArrayElementAtIndex(i); + } + } + else + { + var interactionDescription = interaction.FindPropertyRelative("description"); + var interactionAxisConstraint = interaction.FindPropertyRelative("axisType"); + var action = interaction.FindPropertyRelative("inputAction"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + var actionConstraint = action.FindPropertyRelative("axisConstraint"); + + GUIContent[] labels; + int[] ids; + + switch ((AxisType)interactionAxisConstraint.intValue) + { + default: + case AxisType.None: + labels = actionLabels; + ids = actionIds; + break; + case AxisType.Raw: + labels = rawActionLabels; + ids = rawActionIds; + break; + case AxisType.Digital: + labels = digitalActionLabels; + ids = digitalActionIds; + break; + case AxisType.SingleAxis: + labels = singleAxisActionLabels; + ids = singleAxisActionIds; + break; + case AxisType.DualAxis: + labels = dualAxisActionLabels; + ids = dualAxisActionIds; + break; + case AxisType.ThreeDofPosition: + labels = threeDofPositionActionLabels; + ids = threeDofPositionActionIds; + break; + case AxisType.ThreeDofRotation: + labels = threeDofRotationActionLabels; + ids = threeDofRotationActionIds; + break; + case AxisType.SixDof: + labels = sixDofActionLabels; + ids = sixDofActionIds; + break; + } + + EditorGUI.BeginChangeCheck(); + + if (currentControllerOption == null || currentControllerTexture == null) + { + bool skip = false; + var description = interactionDescription.stringValue; + if (currentControllerType == SupportedControllerType.WindowsMixedReality && currentHandedness == Handedness.None) + { + if (description == "Grip Press" || + description == "Trigger Position" || + description == "Trigger Touched" || + description == "Touchpad Position" || + description == "Touchpad Touch" || + description == "Touchpad Press" || + description == "Menu Press" || + description == "Thumbstick Position" || + description == "Thumbstick Press" + ) + { + skip = true; + } + + if (description == "Trigger Press (Select)") + { + description = "Air Tap (Select)"; + } + } + + if (!skip) + { + actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, labels, ids, GUILayout.Width(80f)); + EditorGUILayout.LabelField(description, GUILayout.ExpandWidth(true)); + } + } + else + { + var rectPosition = currentControllerOption.InputLabelPositions[i]; + var rectSize = InputActionLabelPosition + InputActionDropdownPosition + new Vector2(currentControllerOption.IsLabelFlipped[i] ? 0f : 8f, EditorGUIUtility.singleLineHeight); + GUI.Box(new Rect(rectPosition, rectSize), GUIContent.none, EditorGUIUtility.isProSkin ? "ObjectPickerBackground" : "ObjectPickerResultsEven"); + var offset = currentControllerOption.IsLabelFlipped[i] ? InputActionLabelPosition : Vector2.zero; + var popupRect = new Rect(rectPosition + offset, new Vector2(InputActionDropdownPosition.x, EditorGUIUtility.singleLineHeight)); + + actionId.intValue = EditorGUI.IntPopup(popupRect, actionId.intValue, labels, ids); + offset = currentControllerOption.IsLabelFlipped[i] ? Vector2.zero : InputActionDropdownPosition; + var labelRect = new Rect(rectPosition + offset, new Vector2(InputActionLabelPosition.x, EditorGUIUtility.singleLineHeight)); + EditorGUI.LabelField(labelRect, interactionDescription.stringValue, currentControllerOption.IsLabelFlipped[i] ? flippedLabelStyle : EditorStyles.label); + + if (editInputActionPositions) + { + offset = currentControllerOption.IsLabelFlipped[i] ? InputActionLabelPosition + InputActionDropdownPosition + HorizontalSpace : InputActionFlipTogglePosition; + var toggleRect = new Rect(rectPosition + offset, new Vector2(-InputActionFlipTogglePosition.x, EditorGUIUtility.singleLineHeight)); + + EditorGUI.BeginChangeCheck(); + currentControllerOption.IsLabelFlipped[i] = EditorGUI.Toggle(toggleRect, currentControllerOption.IsLabelFlipped[i]); + + if (EditorGUI.EndChangeCheck()) + { + if (currentControllerOption.IsLabelFlipped[i]) + { + currentControllerOption.InputLabelPositions[i] -= InputActionLabelPosition; + } + else + { + currentControllerOption.InputLabelPositions[i] += InputActionLabelPosition; + } + } + + if (!isMouseInRects.Any(value => value) || isMouseInRects[i]) + { + if (Event.current.type == EventType.MouseDrag && labelRect.Contains(Event.current.mousePosition) && !isMouseInRects[i]) + { + isMouseInRects[i] = true; + mouseDragOffset = Event.current.mousePosition - currentControllerOption.InputLabelPositions[i]; + } + else if (Event.current.type == EventType.Repaint && isMouseInRects[i]) + { + currentControllerOption.InputLabelPositions[i] = Event.current.mousePosition - mouseDragOffset; + } + else if (Event.current.type == EventType.DragUpdated && isMouseInRects[i]) + { + currentControllerOption.InputLabelPositions[i] = Event.current.mousePosition - mouseDragOffset; + } + else if (Event.current.type == EventType.MouseUp && isMouseInRects[i]) + { + currentControllerOption.InputLabelPositions[i] = Event.current.mousePosition - mouseDragOffset; + mouseDragOffset = Vector2.zero; + isMouseInRects[i] = false; + } + } + } + } + + if (EditorGUI.EndChangeCheck()) + { + MixedRealityInputAction inputAction = actionId.intValue == 0 ? + MixedRealityInputAction.None : + MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; + actionId.intValue = (int)inputAction.Id; + actionDescription.stringValue = inputAction.Description; + actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; + interactionList.serializedObject.ApplyModifiedProperties(); + } + } + + EditorGUILayout.EndHorizontal(); + } + + if (useCustomInteractionMapping) + { + EditorGUILayout.EndScrollView(); + interactionList.serializedObject.ApplyModifiedProperties(); + } + + GUILayout.EndVertical(); + } + + private static void RenderAxisPopup(SerializedProperty axisCode, float customLabelWidth) + { + var axisId = -1; + + for (int j = 0; j < ControllerMappingLibrary.UnityInputManagerAxes.Length; j++) + { + if (ControllerMappingLibrary.UnityInputManagerAxes[j].Name == axisCode.stringValue) + { + axisId = j + 1; + break; + } + } + + EditorGUI.BeginChangeCheck(); + axisId = EditorGUILayout.IntPopup(GUIContent.none, axisId, axisLabels, null, GUILayout.Width(customLabelWidth)); + + if (EditorGUI.EndChangeCheck()) + { + if (axisId == 0) + { + axisCode.stringValue = string.Empty; + axisCode.serializedObject.ApplyModifiedProperties(); + } + else + { + for (int j = 0; j < ControllerMappingLibrary.UnityInputManagerAxes.Length; j++) + { + if (axisId - 1 == j) + { + axisCode.stringValue = ControllerMappingLibrary.UnityInputManagerAxes[j].Name; + axisCode.serializedObject.ApplyModifiedProperties(); + break; + } + } + } + } + } + } +} diff --git a/Assets/MixedRealityToolkit/_Core/Definitions/Utilities/Editor/InvertAxesEnum.cs.meta b/Assets/MixedRealityToolkit/_Core/Inspectors/ControllerPopupWindow.cs.meta similarity index 86% rename from Assets/MixedRealityToolkit/_Core/Definitions/Utilities/Editor/InvertAxesEnum.cs.meta rename to Assets/MixedRealityToolkit/_Core/Inspectors/ControllerPopupWindow.cs.meta index a411652608e..03ac2764836 100644 --- a/Assets/MixedRealityToolkit/_Core/Definitions/Utilities/Editor/InvertAxesEnum.cs.meta +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/ControllerPopupWindow.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 907780a97b8b4574eb98e821c423eca1 +guid: 66928ed4a53ad00429dd8597ce18a858 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Data.meta b/Assets/MixedRealityToolkit/_Core/Inspectors/Data.meta new file mode 100644 index 00000000000..0f838197232 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01081ff15c3de9a45834acf3cbf52c00 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOption.cs b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOption.cs new file mode 100644 index 00000000000..2e7c312bfce --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOption.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using Microsoft.MixedReality.Toolkit.Internal.Definitions.Devices; +using Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities; +using System; +using UnityEngine; + +namespace Microsoft.MixedReality.Toolkit.Inspectors.Data +{ + /// + /// Used to aid in layout of Controller Input Actions. + /// + [Serializable] + public class ControllerInputActionOption + { + public SupportedControllerType Controller; + public Handedness Handedness; + public Vector2[] InputLabelPositions; + public bool[] IsLabelFlipped; + } +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOption.cs.meta b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOption.cs.meta new file mode 100644 index 00000000000..d468ab288d8 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a1857d39eeeb034fb61982a68634e34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 961230b29c294bb780054c5d02eb6180, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOptions.cs b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOptions.cs new file mode 100644 index 00000000000..152f2d01728 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOptions.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; + +namespace Microsoft.MixedReality.Toolkit.Inspectors.Data +{ + /// + /// Used to aid in layout of Controller Input Actions. + /// + [Serializable] + public class ControllerInputActionOptions + { + public List Controllers; + } +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOptions.cs.meta b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOptions.cs.meta new file mode 100644 index 00000000000..3a3639663bc --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/ControllerInputActionOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9517fcc8e5ebbbb48a9f9b15d57752c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 961230b29c294bb780054c5d02eb6180, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Data/EditorWindowOptions.json b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/EditorWindowOptions.json new file mode 100644 index 00000000000..b5f63f30a7b --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/EditorWindowOptions.json @@ -0,0 +1 @@ +{"Controllers":[{"Controller":6,"Handedness":2,"InputLabelPositions":[{"x":291.0,"y":22.0},{"x":382.0,"y":348.0},{"x":-48.0,"y":283.0},{"x":486.0,"y":144.0},{"x":-84.0,"y":158.0},{"x":-82.0,"y":136.0},{"x":484.0,"y":190.0},{"x":484.0,"y":231.0},{"x":484.0,"y":211.0},{"x":-70.0,"y":241.0},{"x":-77.0,"y":191.0},{"x":-78.0,"y":211.0}],"IsLabelFlipped":[false,false,true,false,true,true,false,false,false,true,true,true]},{"Controller":6,"Handedness":1,"InputLabelPositions":[{"x":121.0,"y":21.0},{"x":404.0,"y":355.0},{"x":469.0,"y":283.0},{"x":-67.0,"y":145.0},{"x":500.0,"y":158.0},{"x":501.0,"y":137.0},{"x":-68.0,"y":182.0},{"x":-69.0,"y":205.0},{"x":-69.0,"y":226.0},{"x":488.0,"y":238.0},{"x":499.0,"y":190.0},{"x":499.0,"y":211.0}],"IsLabelFlipped":[true,false,false,true,false,false,true,true,true,false,false,false]},{"Controller":8,"Handedness":0,"InputLabelPositions":[{"x":15.0,"y":398.0},{"x":14.0,"y":419.0},{"x":418.0,"y":399.0},{"x":418.0,"y":420.0},{"x":-188.0,"y":338.0},{"x":298.0,"y":54.0},{"x":-132.0,"y":134.0},{"x":551.0,"y":126.0},{"x":14.0,"y":101.0},{"x":409.0,"y":101.0},{"x":-159.0,"y":182.0},{"x":577.0,"y":173.0},{"x":628.0,"y":310.0},{"x":622.0,"y":282.0},{"x":616.0,"y":253.0},{"x":607.0,"y":225.0}],"IsLabelFlipped":[true,true,false,false,true,false,true,false,true,false,true,false,false,false,false,false]},{"Controller":4,"Handedness":2,"InputLabelPositions":[{"x":-43.0,"y":165.0},{"x":5.0,"y":289.0},{"x":7.0,"y":330.0},{"x":8.0,"y":351.0},{"x":6.0,"y":309.0},{"x":436.0,"y":272.0},{"x":267.0,"y":30.0},{"x":267.0,"y":68.0},{"x":268.0,"y":88.0},{"x":267.0,"y":49.0},{"x":418.0,"y":163.0},{"x":-43.0,"y":204.0},{"x":418.0,"y":182.0},{"x":-42.0,"y":184.0},{"x":420.0,"y":202.0},{"x":419.0,"y":222.0}],"IsLabelFlipped":[true,true,true,true,true,false,false,false,false,false,false,true,false,true,false,false]},{"Controller":4,"Handedness":1,"InputLabelPositions":[{"x":482.0,"y":158.0},{"x":433.0,"y":295.0},{"x":433.0,"y":334.0},{"x":433.0,"y":355.0},{"x":433.0,"y":315.0},{"x":-14.0,"y":268.0},{"x":171.0,"y":28.0},{"x":171.0,"y":67.0},{"x":171.0,"y":87.0},{"x":172.0,"y":47.0},{"x":15.0,"y":168.0},{"x":480.0,"y":179.0},{"x":16.0,"y":141.0},{"x":15.0,"y":188.0},{"x":479.0,"y":198.0},{"x":15.0,"y":207.0},{"x":14.0,"y":225.0}],"IsLabelFlipped":[false,false,false,false,false,true,true,true,true,true,true,false,true,true,false,true,true]},{"Controller":2,"Handedness":1,"InputLabelPositions":[{"x":198.0,"y":49.0},{"x":545.0,"y":215.0},{"x":543.0,"y":233.0},{"x":543.0,"y":251.0},{"x":542.0,"y":298.0},{"x":-131.0,"y":216.0},{"x":-131.0,"y":256.0},{"x":-131.0,"y":235.0},{"x":-125.0,"y":173.0}],"IsLabelFlipped":[false,false,false,false,false,true,true,true,true]},{"Controller":2,"Handedness":2,"InputLabelPositions":[{"x":418.0,"y":43.0},{"x":-118.0,"y":208.0},{"x":-117.0,"y":228.0},{"x":-117.0,"y":248.0},{"x":-117.0,"y":285.0},{"x":563.0,"y":212.0},{"x":565.0,"y":252.0},{"x":563.0,"y":232.0},{"x":568.0,"y":168.0}],"IsLabelFlipped":[false,true,true,true,true,false,false,false,false]},{"Controller":5,"Handedness":0,"InputLabelPositions":[{"x":301.0,"y":63.0},{"x":-64.0,"y":147.0},{"x":490.0,"y":226.0}],"IsLabelFlipped":[false,true,false]}]} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Data/EditorWindowOptions.json.meta b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/EditorWindowOptions.json.meta new file mode 100644 index 00000000000..620649817bf --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Data/EditorWindowOptions.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 28091d5ea9b5739419a221a06fa1ec89 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityConfigurationProfileInspector.cs b/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityConfigurationProfileInspector.cs index a296cc52624..624261d5826 100644 --- a/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityConfigurationProfileInspector.cs +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityConfigurationProfileInspector.cs @@ -89,7 +89,10 @@ private void OnEnable() return; } - Debug.Assert(MixedRealityManager.HasActiveProfile); + if (!MixedRealityManager.HasActiveProfile) + { + return; + } // Experience configuration targetExperienceScale = serializedObject.FindProperty("targetExperienceScale"); diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityControllerMappingProfileInspector.cs b/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityControllerMappingProfileInspector.cs index 655a35e3222..b0cdee6cb23 100644 --- a/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityControllerMappingProfileInspector.cs +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/MixedRealityControllerMappingProfileInspector.cs @@ -2,13 +2,13 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using Microsoft.MixedReality.Toolkit.Internal.Definitions.Devices; -using Microsoft.MixedReality.Toolkit.Internal.Definitions.InputSystem; using Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities; -using Microsoft.MixedReality.Toolkit.Internal.Definitions.Utilities.Editor; using Microsoft.MixedReality.Toolkit.Internal.Devices.OpenVR; using Microsoft.MixedReality.Toolkit.Internal.Devices.UnityInput; +using Microsoft.MixedReality.Toolkit.Internal.Devices.WindowsMixedReality; +using Microsoft.MixedReality.Toolkit.Internal.Extensions; using Microsoft.MixedReality.Toolkit.Internal.Managers; -using System.Linq; +using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -17,54 +17,48 @@ namespace Microsoft.MixedReality.Toolkit.Inspectors.Profiles [CustomEditor(typeof(MixedRealityControllerMappingProfile))] public class MixedRealityControllerMappingProfileInspector : MixedRealityBaseConfigurationProfileInspector { - private static readonly GUIContent ControllerAddButtonContent = new GUIContent("+ Add a New Controller Template"); + private struct ControllerRenderProfile + { + public SupportedControllerType ControllerType; + public Handedness Handedness; + public MixedRealityInteractionMapping[] Interactions; + public bool UseDefaultModel; + public Object OverrideModel; + + public ControllerRenderProfile(SupportedControllerType controllerType, Handedness handedness, MixedRealityInteractionMapping[] interactions, bool useDefaultModel, Object overrideModel) + { + ControllerType = controllerType; + Handedness = handedness; + Interactions = interactions; + UseDefaultModel = useDefaultModel; + OverrideModel = overrideModel; + } + } + + private static readonly GUIContent ControllerAddButtonContent = new GUIContent("+ Add a New Controller Definition"); private static readonly GUIContent ControllerMinusButtonContent = new GUIContent("-", "Remove Controller Template"); - private static readonly GUIContent InteractionAddButtonContent = new GUIContent("+ Add a New Interaction Mapping"); - private static readonly GUIContent InteractionMinusButtonContent = new GUIContent("-", "Remove Interaction Mapping"); - private static readonly GUIContent InteractionContent = new GUIContent("Interaction Mappings"); - private static readonly GUIContent InputDescription = new GUIContent("Description", "The input description"); - private static readonly GUIContent AxisTypeContent = new GUIContent("Axis Type", "The axis type of the button, e.g. Analogue, Digital, etc."); - private static readonly GUIContent ControllerInputTypeContent = new GUIContent("Input Type", "The primary action of the input as defined by the controller SDK."); - private static readonly GUIContent ActionContent = new GUIContent("Action", "Action to be raised to the Input Manager when the input data has changed."); - private static readonly GUIContent KeyCodeContent = new GUIContent("KeyCode", "Unity Input KeyCode id to listen for."); - private static readonly GUIContent XAxisContent = new GUIContent("X Axis", "Horizontal Axis to listen for."); - private static readonly GUIContent YAxisContent = new GUIContent("Y Axis", "Vertical Axis to listen for."); - private static readonly GUIContent InvertXAxis = new GUIContent("Invert X Axis?"); - private static readonly GUIContent InvertAxes = new GUIContent("Invert", "What axes to invert?"); + private static readonly GUIContent GenericTypeContent = new GUIContent("Generic Type"); - private static MixedRealityControllerMappingProfile thisProfile; + private static readonly GUIContent[] GenericTypeListContent = + { + new GUIContent("Unity Controller"), + new GUIContent("Open VR Controller") + }; + + private static readonly int[] GenericTypeIds = { 0, 1 }; - private static bool[] controllerFoldouts; - private static bool[] controllerInteractionFoldouts; - - private static int axisId; - private static GUIContent[] axisLabels; - private static int[] actionIds; - private static GUIContent[] actionLabels; - private static int[] rawActionIds; - private static GUIContent[] rawActionLabels; - private static int[] digitalActionIds; - private static GUIContent[] digitalActionLabels; - private static int[] singleAxisActionIds; - private static GUIContent[] singleAxisActionLabels; - private static int[] dualAxisActionIds; - private static GUIContent[] dualAxisActionLabels; - private static int[] threeDofPositionActionIds; - private static GUIContent[] threeDofPositionActionLabels; - private static int[] threeDofRotationActionIds; - private static GUIContent[] threeDofRotationActionLabels; - private static int[] sixDofActionIds; - private static GUIContent[] sixDofActionLabels; - - private static float defaultLabelWidth; - private static float defaultFieldWidth; + private static MixedRealityControllerMappingProfile thisProfile; private SerializedProperty mixedRealityControllerMappingProfiles; private SerializedProperty renderMotionControllers; private SerializedProperty useDefaultModels; private SerializedProperty globalLeftHandModel; private SerializedProperty globalRightHandModel; - private Vector2[] horizontalScrollPositions; + private float defaultLabelWidth; + private float defaultFieldWidth; + private GUIStyle controllerButtonStyle; + + private List controllerRenderList = new List(); private void OnEnable() { @@ -75,126 +69,20 @@ private void OnEnable() mixedRealityControllerMappingProfiles = serializedObject.FindProperty("mixedRealityControllerMappingProfiles"); - if (controllerInteractionFoldouts == null || controllerInteractionFoldouts.Length != mixedRealityControllerMappingProfiles.arraySize) - { - controllerInteractionFoldouts = new bool[mixedRealityControllerMappingProfiles.arraySize]; - - // Open all the interaction foldouts by default. - for (int i = 0; i < controllerInteractionFoldouts.Length; i++) - { - controllerInteractionFoldouts[i] = true; - } - } - - if (controllerFoldouts == null || controllerFoldouts.Length != mixedRealityControllerMappingProfiles.arraySize) - { - controllerFoldouts = new bool[mixedRealityControllerMappingProfiles.arraySize]; - } - - if (horizontalScrollPositions == null || horizontalScrollPositions.Length != mixedRealityControllerMappingProfiles.arraySize) + if (!MixedRealityManager.Instance.ActiveProfile.IsInputSystemEnabled || + MixedRealityManager.Instance.ActiveProfile.InputActionsProfile == null) { - horizontalScrollPositions = new Vector2[mixedRealityControllerMappingProfiles.arraySize]; + return; } - if (!MixedRealityManager.Instance.ActiveProfile.IsInputSystemEnabled || - MixedRealityManager.Instance.ActiveProfile.InputActionsProfile == null) { return; } - - actionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - axisLabels = ControllerMappingLibrary.UnityInputManagerAxes - .Select(axis => new GUIContent(axis.Name)) - .Prepend(new GUIContent("None")).ToArray(); - - actionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.None) - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - actionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.None) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - - rawActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.Raw) - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - rawActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.Raw) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - - digitalActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.Digital) - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - digitalActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.Digital) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - - singleAxisActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.SingleAxis) - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - singleAxisActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.SingleAxis) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - - dualAxisActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.DualAxis) - .Select(action => (int)action.Id).Prepend(0).ToArray(); - - dualAxisActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.DualAxis) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - - threeDofPositionActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofPosition) - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - threeDofPositionActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofPosition) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - - threeDofRotationActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofRotation) - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - threeDofRotationActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofRotation) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - - sixDofActionIds = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.SixDof) - .Select(action => (int)action.Id) - .Prepend(0).ToArray(); - - sixDofActionLabels = MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions - .Where(inputAction => inputAction.AxisConstraint == AxisType.SixDof) - .Select(inputAction => new GUIContent(inputAction.Description)) - .Prepend(new GUIContent("None")).ToArray(); - renderMotionControllers = serializedObject.FindProperty("renderMotionControllers"); useDefaultModels = serializedObject.FindProperty("useDefaultModels"); globalLeftHandModel = serializedObject.FindProperty("globalLeftHandModel"); globalRightHandModel = serializedObject.FindProperty("globalRightHandModel"); + thisProfile = target as MixedRealityControllerMappingProfile; defaultLabelWidth = EditorGUIUtility.labelWidth; defaultFieldWidth = EditorGUIUtility.fieldWidth; - - thisProfile = target as MixedRealityControllerMappingProfile; } public override void OnInspectorGUI() @@ -215,14 +103,29 @@ public override void OnInspectorGUI() EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); return; } + if (MixedRealityManager.Instance.ActiveProfile.InputActionsProfile == null) { EditorGUILayout.HelpBox("No input actions found, please specify a input action profile in the main configuration.", MessageType.Error); return; } + if (controllerButtonStyle == null) + { + controllerButtonStyle = new GUIStyle("LargeButton") + { + imagePosition = ImagePosition.ImageAbove, + fontStyle = FontStyle.Bold, + stretchHeight = true, + stretchWidth = true, + wordWrap = true, + fontSize = 10, + }; + } + serializedObject.Update(); + EditorGUIUtility.labelWidth = 152f; EditorGUILayout.PropertyField(renderMotionControllers); if (renderMotionControllers.boolValue) @@ -236,500 +139,249 @@ public override void OnInspectorGUI() } } - RenderControllerProfilesList(mixedRealityControllerMappingProfiles); + EditorGUIUtility.labelWidth = defaultLabelWidth; + + RenderControllerProfilesList(mixedRealityControllerMappingProfiles, renderMotionControllers.boolValue); serializedObject.ApplyModifiedProperties(); } - private void RenderControllerProfilesList(SerializedProperty list) + private void RenderControllerProfilesList(SerializedProperty controllerList, bool renderControllerModels) { + if (thisProfile.MixedRealityControllerMappingProfiles.Length != controllerList.arraySize) { return; } + EditorGUILayout.Space(); - GUILayout.BeginVertical(); if (GUILayout.Button(ControllerAddButtonContent, EditorStyles.miniButton)) { - list.InsertArrayElementAtIndex(list.arraySize); - var mixedRealityControllerMapping = list.GetArrayElementAtIndex(list.arraySize - 1); + controllerList.InsertArrayElementAtIndex(controllerList.arraySize); + var mixedRealityControllerMapping = controllerList.GetArrayElementAtIndex(controllerList.arraySize - 1); var mixedRealityControllerMappingId = mixedRealityControllerMapping.FindPropertyRelative("id"); var mixedRealityControllerMappingDescription = mixedRealityControllerMapping.FindPropertyRelative("description"); - mixedRealityControllerMappingDescription.stringValue = $"New Controller Template {mixedRealityControllerMappingId.intValue = list.arraySize}"; + mixedRealityControllerMappingDescription.stringValue = $"Generic Unity Controller {mixedRealityControllerMappingId.intValue = controllerList.arraySize}"; var mixedRealityControllerHandedness = mixedRealityControllerMapping.FindPropertyRelative("handedness"); mixedRealityControllerHandedness.intValue = 0; var mixedRealityControllerInteractions = mixedRealityControllerMapping.FindPropertyRelative("interactions"); + var useCustomInteractionMappings = mixedRealityControllerMapping.FindPropertyRelative("useCustomInteractionMappings"); + useCustomInteractionMappings.boolValue = true; mixedRealityControllerInteractions.ClearArray(); serializedObject.ApplyModifiedProperties(); - - thisProfile.MixedRealityControllerMappingProfiles[list.arraySize - 1].ControllerType.Type = null; - - controllerInteractionFoldouts = new bool[list.arraySize]; - controllerFoldouts = new bool[list.arraySize]; - horizontalScrollPositions = new Vector2[list.arraySize]; - - for (int i = 0; i < controllerInteractionFoldouts?.Length; i++) - { - controllerInteractionFoldouts[i] = true; - } - - serializedObject.ApplyModifiedProperties(); + thisProfile.MixedRealityControllerMappingProfiles[controllerList.arraySize - 1].ControllerType.Type = typeof(GenericUnityController); return; } GUILayout.Space(12f); - GUILayout.BeginVertical(); - if (list == null || list.arraySize == 0) - { - EditorGUILayout.HelpBox("Create a new Controller Template.", MessageType.Warning); - } + controllerRenderList.Clear(); - for (int i = 0; i < list?.arraySize; i++) - { - GUILayout.BeginVertical(); + GUILayout.BeginVertical(); - var previousLabelWidth = EditorGUIUtility.labelWidth; - var mixedRealityControllerMapping = list.GetArrayElementAtIndex(i); - var mixedRealityControllerMappingDescription = mixedRealityControllerMapping.FindPropertyRelative("description"); + for (int i = 0; i < controllerList.arraySize; i++) + { + var controllerType = thisProfile.MixedRealityControllerMappingProfiles[i].ControllerType.Type; + var supportedControllerType = SupportedControllerType.None; + var mixedRealityControllerMapping = controllerList.GetArrayElementAtIndex(i); + var controllerHandedness = mixedRealityControllerMapping.FindPropertyRelative("handedness"); + var handedness = (Handedness)controllerHandedness.intValue; + var interactionsList = mixedRealityControllerMapping.FindPropertyRelative("interactions"); + var useDefaultModel = mixedRealityControllerMapping.FindPropertyRelative("useDefaultModel"); + var controllerModel = mixedRealityControllerMapping.FindPropertyRelative("overrideModel"); + var useCustomInteractionMappings = mixedRealityControllerMapping.FindPropertyRelative("useCustomInteractionMappings"); + + if (controllerType == typeof(XboxController)) + { + supportedControllerType = SupportedControllerType.Xbox; + } + else if (controllerType == typeof(WindowsMixedRealityController) || + controllerType == typeof(WindowsMixedRealityOpenVRMotionController)) + { + supportedControllerType = SupportedControllerType.WindowsMixedReality; + } + else if (controllerType == typeof(OculusTouchController)) + { + supportedControllerType = SupportedControllerType.OculusTouch; + } + else if (controllerType == typeof(OculusRemoteController)) + { + supportedControllerType = SupportedControllerType.OculusRemote; + } + else if (controllerType == typeof(ViveWandController)) + { + supportedControllerType = SupportedControllerType.ViveWand; + } + else if (controllerType == typeof(GenericOpenVRController)) + { + supportedControllerType = SupportedControllerType.GenericOpenVR; + } + else if (controllerType == typeof(GenericUnityController)) + { + supportedControllerType = SupportedControllerType.GenericUnity; + } - controllerFoldouts[i] = EditorGUILayout.Foldout(controllerFoldouts[i], $"{mixedRealityControllerMappingDescription.stringValue}", true); + bool skip = false; - if (controllerFoldouts[i]) + for (int j = 0; j < controllerRenderList.Count; j++) { - EditorGUILayout.BeginHorizontal(); - EditorGUIUtility.labelWidth = 96f; - EditorGUILayout.PropertyField(mixedRealityControllerMappingDescription); - EditorGUIUtility.labelWidth = previousLabelWidth; - - if (GUILayout.Button(ControllerMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + if (supportedControllerType == SupportedControllerType.GenericOpenVR || + supportedControllerType == SupportedControllerType.GenericUnity) { - list.DeleteArrayElementAtIndex(i); - EditorGUILayout.EndHorizontal(); + continue; } - else - { - EditorGUILayout.EndHorizontal(); - - var controllerTypeProperty = mixedRealityControllerMapping.FindPropertyRelative("controllerType"); - var controllerHandedness = mixedRealityControllerMapping.FindPropertyRelative("handedness"); - var useDefaultModel = mixedRealityControllerMapping.FindPropertyRelative("useDefaultModel"); - var controllerModel = mixedRealityControllerMapping.FindPropertyRelative("overrideModel"); - var interactionsList = mixedRealityControllerMapping.FindPropertyRelative("interactions"); - var useCustomInteractionMappings = mixedRealityControllerMapping.FindPropertyRelative("useCustomInteractionMappings"); - - EditorGUI.indentLevel++; - EditorGUIUtility.labelWidth = 128f; - - EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(controllerTypeProperty); - EditorGUILayout.PropertyField(controllerHandedness); - EditorGUIUtility.labelWidth = 224f; - - if (EditorGUI.EndChangeCheck()) - { - serializedObject.ApplyModifiedProperties(); - - if (thisProfile.MixedRealityControllerMappingProfiles[i].ControllerType.Type == null) - { - controllerHandedness.intValue = 0; - } - - // Only allow custom interaction mappings on generic controller types - var controllerType = thisProfile.MixedRealityControllerMappingProfiles[i].ControllerType.Type; - useCustomInteractionMappings.boolValue = controllerType == typeof(GenericUnityController) || - controllerType == typeof(GenericOpenVRController); - interactionsList.ClearArray(); - serializedObject.ApplyModifiedProperties(); - thisProfile.MixedRealityControllerMappingProfiles[i].SetDefaultInteractionMapping(); - serializedObject.ApplyModifiedProperties(); - - // Bail so we can execute our controller type set command. - EditorGUI.indentLevel--; - GUILayout.EndVertical(); - GUILayout.Space(12f); - GUILayout.EndVertical(); - GUILayout.EndVertical(); - return; - } - - EditorGUIUtility.labelWidth = 128f; - EditorGUILayout.PropertyField(useDefaultModel); - - if (!useDefaultModel.boolValue) - { - EditorGUILayout.PropertyField(controllerModel); - } - - EditorGUIUtility.labelWidth = previousLabelWidth; - - controllerInteractionFoldouts[i] = EditorGUILayout.Foldout(controllerInteractionFoldouts[i], InteractionContent, true); - - if (controllerInteractionFoldouts[i]) - { - RenderInteractionList(interactionsList, useCustomInteractionMappings.boolValue, i); - } - - GUILayout.Space(24f); - GUILayout.BeginHorizontal(); - GUILayout.Space(24f); - - if (useCustomInteractionMappings.boolValue) - { - if (GUILayout.Button("Reset Interaction Mappings", EditorStyles.miniButton)) - { - interactionsList.ClearArray(); - serializedObject.ApplyModifiedProperties(); - thisProfile.MixedRealityControllerMappingProfiles[i].SetDefaultInteractionMapping(); - serializedObject.ApplyModifiedProperties(); - } - } - - GUILayout.EndHorizontal(); - EditorGUI.indentLevel--; + if (controllerRenderList[j].ControllerType == supportedControllerType && + controllerRenderList[j].Handedness == handedness) + { + thisProfile.MixedRealityControllerMappingProfiles[i].SynchronizeInputActions(controllerRenderList[j].Interactions); + useDefaultModel.boolValue = controllerRenderList[j].UseDefaultModel; + controllerModel.objectReferenceValue = controllerRenderList[j].OverrideModel; + serializedObject.ApplyModifiedProperties(); + skip = true; } } - GUILayout.EndVertical(); - GUILayout.Space(12f); - } + if (skip) { continue; } - GUILayout.EndVertical(); - GUILayout.EndVertical(); - } + controllerRenderList.Add(new ControllerRenderProfile(supportedControllerType, handedness, thisProfile.MixedRealityControllerMappingProfiles[i].Interactions, useDefaultModel.boolValue, controllerModel.objectReferenceValue)); - private void RenderInteractionList(SerializedProperty list, bool useCustomInteractionMapping, int controllerId) - { - if (Event.current.type == EventType.ExecuteCommand && Event.current.commandName == "TypeReferenceUpdated") { return; } + var handednessTitleText = handedness != Handedness.None ? $"{handedness} Hand " : string.Empty; + var controllerTitle = $"{supportedControllerType.ToString().ToProperCase()} {handednessTitleText}Controller"; - GUILayout.BeginHorizontal(); - GUILayout.BeginVertical(); + if (useCustomInteractionMappings.boolValue) + { + GUILayout.Space(24f); - if (useCustomInteractionMapping) - { - GUILayout.BeginHorizontal(); - GUILayout.Space(24f); + EditorGUILayout.BeginVertical(); + EditorGUILayout.BeginHorizontal(); - if (GUILayout.Button(InteractionAddButtonContent, EditorStyles.miniButton)) - { - list.arraySize += 1; - var interaction = list.GetArrayElementAtIndex(list.arraySize - 1); - var axisType = interaction.FindPropertyRelative("axisType"); - axisType.enumValueIndex = 0; - var inputType = interaction.FindPropertyRelative("inputType"); - inputType.enumValueIndex = 0; - var action = interaction.FindPropertyRelative("inputAction"); - var actionId = action.FindPropertyRelative("id"); - var actionDescription = action.FindPropertyRelative("description"); - actionDescription.stringValue = "None"; - actionId.intValue = 0; - } + EditorGUIUtility.labelWidth = 64f; + EditorGUIUtility.fieldWidth = 64f; + EditorGUILayout.LabelField(controllerTitle); + EditorGUIUtility.fieldWidth = defaultFieldWidth; + EditorGUIUtility.labelWidth = defaultLabelWidth; - GUILayout.EndHorizontal(); + if (GUILayout.Button(ControllerMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + controllerList.DeleteArrayElementAtIndex(i); + EditorGUILayout.EndHorizontal(); + GUILayout.EndVertical(); + return; + } - GUILayout.Space(12f); + EditorGUILayout.EndHorizontal(); + EditorGUI.indentLevel++; - if (list == null || list.arraySize == 0) - { - EditorGUILayout.HelpBox("Create an Interaction Mapping.", MessageType.Warning); - GUILayout.EndHorizontal(); - GUILayout.EndVertical(); - return; - } - } + EditorGUIUtility.labelWidth = 128f; + EditorGUIUtility.fieldWidth = 64f; - if (useCustomInteractionMapping) - { - var scrollHeight = (list.arraySize * EditorGUIUtility.singleLineHeight * 1.11f) + EditorGUIUtility.singleLineHeight * 3; - horizontalScrollPositions[controllerId] = EditorGUILayout.BeginScrollView(horizontalScrollPositions[controllerId], true, false, GUILayout.ExpandWidth(true), GUILayout.Height(scrollHeight)); - } + EditorGUI.BeginChangeCheck(); - GUILayout.BeginHorizontal(); + int currentGenericType = -1; - var customLabelWidth = 128f; + if (controllerType == typeof(GenericUnityController)) + { + currentGenericType = 0; + } - if (useCustomInteractionMapping) - { - EditorGUILayout.LabelField("Id", GUILayout.Width(32f)); - EditorGUIUtility.labelWidth = 24f; - EditorGUIUtility.fieldWidth = 24f; - EditorGUILayout.LabelField(ControllerInputTypeContent, GUILayout.Width(customLabelWidth)); - EditorGUILayout.LabelField(AxisTypeContent, GUILayout.Width(customLabelWidth)); - EditorGUILayout.LabelField(ActionContent, GUILayout.Width(customLabelWidth)); - EditorGUILayout.LabelField(KeyCodeContent, GUILayout.Width(customLabelWidth)); - EditorGUILayout.LabelField(XAxisContent, GUILayout.Width(customLabelWidth)); - EditorGUILayout.LabelField(YAxisContent, GUILayout.Width(customLabelWidth)); - EditorGUILayout.LabelField(string.Empty, GUILayout.Width(24f)); - - EditorGUIUtility.labelWidth = defaultLabelWidth; - EditorGUIUtility.fieldWidth = defaultFieldWidth; - } - else - { - EditorGUILayout.LabelField(ActionContent, GUILayout.Width(80f)); - EditorGUILayout.LabelField(InputDescription, GUILayout.Width(96f)); - } + if (controllerType == typeof(GenericOpenVRController)) + { + currentGenericType = 1; + } - GUILayout.EndHorizontal(); + Debug.Assert(currentGenericType != -1); - for (int i = 0; i < list.arraySize; i++) - { - EditorGUILayout.BeginHorizontal(); - SerializedProperty interaction = list.GetArrayElementAtIndex(i); + currentGenericType = EditorGUILayout.IntPopup(GenericTypeContent, currentGenericType, GenericTypeListContent, GenericTypeIds); - if (useCustomInteractionMapping) - { - EditorGUILayout.LabelField($"{i + 1}", GUILayout.Width(32f)); - var inputType = interaction.FindPropertyRelative("inputType"); - EditorGUILayout.PropertyField(inputType, GUIContent.none, GUILayout.Width(customLabelWidth)); - var axisType = interaction.FindPropertyRelative("axisType"); - EditorGUILayout.PropertyField(axisType, GUIContent.none, GUILayout.Width(customLabelWidth)); - var invertXAxis = interaction.FindPropertyRelative("invertXAxis"); - var invertYAxis = interaction.FindPropertyRelative("invertYAxis"); - var interactionAxisConstraint = interaction.FindPropertyRelative("axisType"); - - var action = interaction.FindPropertyRelative("inputAction"); - var actionId = action.FindPropertyRelative("id"); - var actionDescription = action.FindPropertyRelative("description"); - var actionConstraint = action.FindPropertyRelative("axisConstraint"); - - GUIContent[] labels; - int[] ids; - - switch ((AxisType)interactionAxisConstraint.intValue) + if (controllerType != typeof(GenericUnityController)) { - default: - case AxisType.None: - labels = actionLabels; - ids = actionIds; - break; - case AxisType.Raw: - labels = rawActionLabels; - ids = rawActionIds; - break; - case AxisType.Digital: - labels = digitalActionLabels; - ids = digitalActionIds; - break; - case AxisType.SingleAxis: - labels = singleAxisActionLabels; - ids = singleAxisActionIds; - break; - case AxisType.DualAxis: - labels = dualAxisActionLabels; - ids = dualAxisActionIds; - break; - case AxisType.ThreeDofPosition: - labels = threeDofPositionActionLabels; - ids = threeDofPositionActionIds; - break; - case AxisType.ThreeDofRotation: - labels = threeDofRotationActionLabels; - ids = threeDofRotationActionIds; - break; - case AxisType.SixDof: - labels = sixDofActionLabels; - ids = sixDofActionIds; - break; + EditorGUILayout.PropertyField(controllerHandedness); } - EditorGUI.BeginChangeCheck(); - actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, labels, ids, GUILayout.Width(customLabelWidth)); - if (EditorGUI.EndChangeCheck()) { - var inputAction = actionId.intValue == 0 ? MixedRealityInputAction.None : MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; - actionDescription.stringValue = inputAction.Description; - actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; + switch (currentGenericType) + { + case 0: + controllerType = typeof(GenericUnityController); + controllerHandedness.intValue = 0; + break; + case 1: + controllerType = typeof(GenericOpenVRController); + break; + } + + interactionsList.ClearArray(); + serializedObject.ApplyModifiedProperties(); + thisProfile.MixedRealityControllerMappingProfiles[i].ControllerType.Type = controllerType; + GUILayout.EndVertical(); + return; } - if ((AxisType)axisType.intValue == AxisType.Digital) + if (interactionsList.arraySize == 0 && controllerType == typeof(GenericOpenVRController)) { - var keyCode = interaction.FindPropertyRelative("keyCode"); - EditorGUILayout.PropertyField(keyCode, GUIContent.none, GUILayout.Width(customLabelWidth)); + thisProfile.MixedRealityControllerMappingProfiles[i].SetDefaultInteractionMapping(true); + serializedObject.ApplyModifiedProperties(); } - else - { - if ((AxisType)axisType.intValue == AxisType.SingleAxis) - { - EditorGUIUtility.labelWidth = customLabelWidth - 14f; - EditorGUIUtility.fieldWidth = 8f; - EditorGUILayout.PropertyField(invertXAxis, InvertXAxis, GUILayout.Width(customLabelWidth)); + if (renderControllerModels && controllerHandedness.intValue != 0) + { + EditorGUILayout.PropertyField(useDefaultModel); - EditorGUIUtility.labelWidth = defaultLabelWidth; - EditorGUIUtility.fieldWidth = defaultFieldWidth; - } - else if ((AxisType)axisType.intValue == AxisType.DualAxis) - { - EditorGUIUtility.labelWidth = customLabelWidth * 0.5f; - EditorGUIUtility.fieldWidth = 8f; - - InvertAxesEnum invertAxesEnum = InvertAxesEnum.Nothing; - - if (invertXAxis.boolValue && invertYAxis.boolValue) - { - invertAxesEnum = InvertAxesEnum.Both; - } - else if (invertXAxis.boolValue) - { - invertAxesEnum = InvertAxesEnum.X; - } - else if (invertYAxis.boolValue) - { - invertAxesEnum = InvertAxesEnum.Y; - } - - var modifedValue = (InvertAxesEnum)EditorGUILayout.EnumFlagsField(InvertAxes, invertAxesEnum, GUILayout.Width(customLabelWidth)); - - invertXAxis.boolValue = (modifedValue & InvertAxesEnum.X) > 0; - invertYAxis.boolValue = (modifedValue & InvertAxesEnum.Y) > 0; - - EditorGUIUtility.labelWidth = defaultLabelWidth; - EditorGUIUtility.fieldWidth = defaultFieldWidth; - } - else + if (!useDefaultModel.boolValue) { - EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(customLabelWidth)); + EditorGUILayout.PropertyField(controllerModel); } } - if ((AxisType)axisType.intValue == AxisType.SingleAxis || - (AxisType)axisType.intValue == AxisType.DualAxis) - { - var axisCodeX = interaction.FindPropertyRelative("axisCodeX"); - RenderAxisPopup(axisCodeX, customLabelWidth); - } - else - { - EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(customLabelWidth)); - } + EditorGUIUtility.labelWidth = defaultLabelWidth; + EditorGUIUtility.fieldWidth = defaultFieldWidth; - if ((AxisType)axisType.intValue == AxisType.DualAxis) - { - var axisCodeY = interaction.FindPropertyRelative("axisCodeY"); - RenderAxisPopup(axisCodeY, customLabelWidth); - } - else + EditorGUI.indentLevel--; + + if (GUILayout.Button("Edit Input Action Map")) { - EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(customLabelWidth)); + ControllerPopupWindow.Show(supportedControllerType, interactionsList, (Handedness)controllerHandedness.intValue); } - if (GUILayout.Button(InteractionMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + if (GUILayout.Button("Reset Input Actions")) { - list.DeleteArrayElementAtIndex(i); + interactionsList.ClearArray(); + serializedObject.ApplyModifiedProperties(); + thisProfile.MixedRealityControllerMappingProfiles[i].SetDefaultInteractionMapping(true); + serializedObject.ApplyModifiedProperties(); } + + EditorGUILayout.EndVertical(); } else { - var interactionDescription = interaction.FindPropertyRelative("description"); - var interactionAxisConstraint = interaction.FindPropertyRelative("axisType"); - var action = interaction.FindPropertyRelative("inputAction"); - var actionId = action.FindPropertyRelative("id"); - var actionDescription = action.FindPropertyRelative("description"); - var actionConstraint = action.FindPropertyRelative("axisConstraint"); - - GUIContent[] labels; - int[] ids; + if (supportedControllerType == SupportedControllerType.WindowsMixedReality && + handedness == Handedness.None) + { + controllerTitle = "HoloLens Gestures"; + } - switch ((AxisType)interactionAxisConstraint.intValue) + if (handedness != Handedness.Right) { - default: - case AxisType.None: - labels = actionLabels; - ids = actionIds; - break; - case AxisType.Raw: - labels = rawActionLabels; - ids = rawActionIds; - break; - case AxisType.Digital: - labels = digitalActionLabels; - ids = digitalActionIds; - break; - case AxisType.SingleAxis: - labels = singleAxisActionLabels; - ids = singleAxisActionIds; - break; - case AxisType.DualAxis: - labels = dualAxisActionLabels; - ids = dualAxisActionIds; - break; - case AxisType.ThreeDofPosition: - labels = threeDofPositionActionLabels; - ids = threeDofPositionActionIds; - break; - case AxisType.ThreeDofRotation: - labels = threeDofRotationActionLabels; - ids = threeDofRotationActionIds; - break; - case AxisType.SixDof: - labels = sixDofActionLabels; - ids = sixDofActionIds; - break; + GUILayout.BeginHorizontal(); } - EditorGUI.BeginChangeCheck(); - actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, labels, ids, GUILayout.Width(80f)); + var buttonContent = new GUIContent(controllerTitle, ControllerMappingLibrary.GetControllerTextureScaled(supportedControllerType, handedness)); - if (EditorGUI.EndChangeCheck()) + if (GUILayout.Button(buttonContent, controllerButtonStyle, GUILayout.Height(128f), GUILayout.MinWidth(32f), GUILayout.ExpandWidth(true))) { - MixedRealityInputAction inputAction = actionId.intValue == 0 ? MixedRealityInputAction.None : MixedRealityManager.Instance.ActiveProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; - actionId.intValue = (int)inputAction.Id; - actionDescription.stringValue = inputAction.Description; - actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; - serializedObject.ApplyModifiedProperties(); + ControllerPopupWindow.Show(supportedControllerType, interactionsList, (Handedness)controllerHandedness.intValue); } - EditorGUILayout.LabelField(interactionDescription.stringValue, GUILayout.ExpandWidth(true)); + if (handedness != Handedness.Left) + { + GUILayout.EndHorizontal(); + } } - EditorGUILayout.EndHorizontal(); - } - - if (useCustomInteractionMapping) - { - EditorGUILayout.EndScrollView(); + GUILayout.Space(8f); } GUILayout.EndVertical(); - GUILayout.EndHorizontal(); - } - - private void RenderAxisPopup(SerializedProperty axisCode, float customLabelWidth) - { - axisId = -1; - - for (int j = 0; j < ControllerMappingLibrary.UnityInputManagerAxes.Length; j++) - { - if (ControllerMappingLibrary.UnityInputManagerAxes[j].Name == axisCode.stringValue) - { - axisId = j + 1; - break; - } - } - - EditorGUI.BeginChangeCheck(); - axisId = EditorGUILayout.IntPopup(GUIContent.none, axisId, axisLabels, null, GUILayout.Width(customLabelWidth)); - - if (EditorGUI.EndChangeCheck()) - { - if (axisId == 0) - { - axisCode.stringValue = string.Empty; - serializedObject.ApplyModifiedProperties(); - } - else - { - for (int j = 0; j < ControllerMappingLibrary.UnityInputManagerAxes.Length; j++) - { - if (axisId - 1 == j) - { - axisCode.stringValue = ControllerMappingLibrary.UnityInputManagerAxes[j].Name; - serializedObject.ApplyModifiedProperties(); - break; - } - } - } - } } } } \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/_Core/Inspectors/Utilities/MixedRealityInspectorUtility.cs b/Assets/MixedRealityToolkit/_Core/Inspectors/Utilities/MixedRealityInspectorUtility.cs index 191f12b8acb..031658c0884 100644 --- a/Assets/MixedRealityToolkit/_Core/Inspectors/Utilities/MixedRealityInspectorUtility.cs +++ b/Assets/MixedRealityToolkit/_Core/Inspectors/Utilities/MixedRealityInspectorUtility.cs @@ -1,8 +1,13 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; using UnityEditor; using UnityEngine; +using Object = UnityEngine.Object; namespace Microsoft.MixedReality.Toolkit.Inspectors.Utilities { @@ -13,6 +18,71 @@ public static class MixedRealityInspectorUtility { public const float DottedLineScreenSpace = 4.65f; + /// + /// Found at https://answers.unity.com/questions/960413/editor-window-how-to-center-a-window.html + /// + public static Rect GetEditorMainWindowPos() + { + var containerWinType = AppDomain.CurrentDomain.GetAllDerivedTypes(typeof(ScriptableObject)).FirstOrDefault(t => t.Name == "ContainerWindow"); + + if (containerWinType == null) + { + throw new MissingMemberException("Can't find internal type ContainerWindow. Maybe something has changed inside Unity"); + } + + var showModeField = containerWinType.GetField("m_ShowMode", BindingFlags.NonPublic | BindingFlags.Instance); + var positionProperty = containerWinType.GetProperty("position", BindingFlags.Public | BindingFlags.Instance); + + if (showModeField == null || positionProperty == null) + { + throw new MissingFieldException("Can't find internal fields 'm_ShowMode' or 'position'. Maybe something has changed inside Unity"); + } + + var windows = Resources.FindObjectsOfTypeAll(containerWinType); + + foreach (var win in windows) + { + + var showMode = (int)showModeField.GetValue(win); + if (showMode == 4) // main window + { + var pos = (Rect)positionProperty.GetValue(win, null); + return pos; + } + } + + throw new NotSupportedException("Can't find internal main window. Maybe something has changed inside Unity"); + } + + private static Type[] GetAllDerivedTypes(this AppDomain appDomain, Type aType) + { + var result = new List(); + var assemblies = appDomain.GetAssemblies(); + + foreach (var assembly in assemblies) + { + var types = assembly.GetTypes(); + result.AddRange(types.Where(type => type.IsSubclassOf(aType))); + } + + return result.ToArray(); + } + + /// + /// Centers an editor window on the main display. + /// + /// + public static void CenterOnMainWin(this EditorWindow window) + { + var main = GetEditorMainWindowPos(); + var pos = window.position; + float w = (main.width - pos.width) * 0.5f; + float h = (main.height - pos.height) * 0.5f; + pos.x = main.x + w; + pos.y = main.y + h; + window.position = pos; + } + #region Colors public static readonly Color DisabledColor = new Color(0.6f, 0.6f, 0.6f); @@ -36,7 +106,7 @@ public static class MixedRealityInspectorUtility /// /// Draw an axis move handle. /// - /// that is undergoing the transformation. Also used for recording undo. + /// that is undergoing the transformation. Also used for recording undo. /// The initial position of the axis. /// The direction the axis is facing. /// Distance from the axis. diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_black_scaled.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_black_scaled.png new file mode 100644 index 00000000000..0ea99e2c571 Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_black_scaled.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_black_scaled.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_black_scaled.png.meta new file mode 100644 index 00000000000..32fa85804d9 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 01b6830a93a36904ab139325358f2d35 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_white_scaled.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_white_scaled.png new file mode 100644 index 00000000000..ff8ad43d3ef Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_white_scaled.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_white_scaled.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_white_scaled.png.meta new file mode 100644 index 00000000000..c974fb2ede1 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/Generic_controller_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: d7776e47f36f995458a92021b99f44d5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black.png new file mode 100644 index 00000000000..268bd0fcd2b Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black.png.meta new file mode 100644 index 00000000000..bc5d53a9b6b --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: a7d0f692b982a754b8ae2353d5e88d64 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: a30d1852fe3236140a0fbdb6f84f8d22 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black_scaled.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black_scaled.png new file mode 100644 index 00000000000..af821e7ef62 Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black_scaled.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black_scaled.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black_scaled.png.meta new file mode 100644 index 00000000000..e18fe99aebb --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 03b731c99d54dfb4abde4d7d1b1b9199 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: a30d1852fe3236140a0fbdb6f84f8d22 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white.png new file mode 100644 index 00000000000..e1f72546714 Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white.png.meta new file mode 100644 index 00000000000..8c1a8a27d24 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 788648182fdba814396e5258870a63f0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1642274e7a8aab14dbffc7967808741d + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white_scaled.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white_scaled.png new file mode 100644 index 00000000000..104cfbd5679 Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white_scaled.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white_scaled.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white_scaled.png.meta new file mode 100644 index 00000000000..a19cd0ef8fa --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_left_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 2a95b12bf068e064988984ff0723e935 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1642274e7a8aab14dbffc7967808741d + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black.png new file mode 100644 index 00000000000..4bf2484f29b Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black.png.meta new file mode 100644 index 00000000000..f815cc4d3e7 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 94c407cca90801e47aead1757ce0ae05 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: c3d4e40d5840fbe47947796071dc8883 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black_scaled.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black_scaled.png new file mode 100644 index 00000000000..4b5bde6d7fd Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black_scaled.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black_scaled.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black_scaled.png.meta new file mode 100644 index 00000000000..10c030b208a --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 8e8fc4c5d417b754280cd920d79a5e7f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: c3d4e40d5840fbe47947796071dc8883 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white.png new file mode 100644 index 00000000000..e91b341801c Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white.png.meta new file mode 100644 index 00000000000..3f9a622e149 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 6588fe8449020f74488b8b667ce2f435 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: b2fdb95de79e126488760a2ccc454961 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white_scaled.png b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white_scaled.png new file mode 100644 index 00000000000..a56373d956d Binary files /dev/null and b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white_scaled.png differ diff --git a/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white_scaled.png.meta b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white_scaled.png.meta new file mode 100644 index 00000000000..194ef7500d2 --- /dev/null +++ b/Assets/MixedRealityToolkit/_Core/Resources/Textures/MotionController_right_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 417cf16dd6895c44f82149efa15170d5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: b2fdb95de79e126488760a2ccc454961 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: