Exemple #1
0
        public void UpdatePoses()
        {
            MixedRealityPose pointerPose = new MixedRealityPose(mlController.Position, mlController.Orientation);;

            Interactions[0].PoseData = pointerPose;

            CoreServices.InputSystem?.RaiseSourcePoseChanged(InputSource, this, pointerPose);
            CoreServices.InputSystem?.RaisePoseInputChanged(InputSource, ControllerHandedness, Interactions[0].MixedRealityInputAction, pointerPose);

            //This is also a good time to implement the Touchpad if you want to update that source type
            if (Interactions.Length > 4)
            {
                IMixedRealityInputSystem inputSystem = CoreServices.InputSystem;

                // Test out touch
                Interactions[4].BoolData = mlController.Touch1Active;
                if (mlController.Touch1Active)
                {
                    lastTouchVector = mlController.Touch1PosAndForce;
                    lastPressure    = mlController.Touch1PosAndForce.z;
                }

                if (Interactions[4].Changed)
                {
                    if (mlController.Touch1Active)
                    {
                        inputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, Interactions[4].MixedRealityInputAction);
                    }
                    else
                    {
                        inputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, Interactions[4].MixedRealityInputAction);
                    }
                }

                if (mlController.Touch1Active)
                {
                    Interactions[5].Vector2Data = lastTouchVector;
                    if (Interactions[5].Changed)
                    {
                        inputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, Interactions[5].MixedRealityInputAction, Interactions[5].Vector2Data);
                    }

                    if (Interactions[6].BoolData) // Pressure was last down
                    {
                        if (lastPressure < 0.25f)
                        {
                            Interactions[6].BoolData = false;
                            inputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, Interactions[6].MixedRealityInputAction);
                        }
                    }
                    else // Pressure was last off
                    {
                        if (lastPressure > 0.5f)
                        {
                            Interactions[6].BoolData = true;
                            inputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, Interactions[6].MixedRealityInputAction);
                        }
                    }
                }
                else if (Interactions[6].BoolData)
                {
                    Interactions[6].BoolData = false;
                    inputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, Interactions[6].MixedRealityInputAction);
                    lastPressure = 0;
                }
            }
        }