private void UpdateSingleAxisData(MixedRealityInteractionMapping interactionMapping)
        {
            Debug.Assert(interactionMapping.AxisType == AxisType.SingleAxis);

            OculusApi.RawAxis1D interactionAxis1D = OculusApi.RawAxis1D.None;
            OculusInteractionMapping.TryParseRawAxis1D(interactionMapping, out interactionAxis1D);
            //Enum.TryParse<OculusApi.RawAxis1D>(interactionMapping.InputName, out interactionAxis1D);

            if (interactionAxis1D != OculusApi.RawAxis1D.None)
            {
                switch (interactionAxis1D)
                {
                case OculusApi.RawAxis1D.LIndexTrigger:
                    singleAxisValue = currentState.LIndexTrigger;

                    //if (shouldApplyDeadzone)
                    //    singleAxisValue = OculusApi.CalculateDeadzone(singleAxisValue, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    singleAxisValue = OculusApi.CalculateAbsMax(0, singleAxisValue);
                    break;

                case OculusApi.RawAxis1D.LHandTrigger:
                    singleAxisValue = currentState.LHandTrigger;

                    //if (shouldApplyDeadzone)
                    //    singleAxisValue = OculusApi.CalculateDeadzone(singleAxisValue, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    singleAxisValue = OculusApi.CalculateAbsMax(0, singleAxisValue);
                    break;

                case OculusApi.RawAxis1D.RIndexTrigger:
                    singleAxisValue = currentState.RIndexTrigger;

                    //if (shouldApplyDeadzone)
                    //    singleAxisValue = OculusApi.CalculateDeadzone(singleAxisValue, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    singleAxisValue = OculusApi.CalculateAbsMax(0, singleAxisValue);
                    break;

                case OculusApi.RawAxis1D.RHandTrigger:
                    singleAxisValue = currentState.RHandTrigger;

                    //if (shouldApplyDeadzone)
                    //    singleAxisValue = OculusApi.CalculateDeadzone(singleAxisValue, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    singleAxisValue = OculusApi.CalculateAbsMax(0, singleAxisValue);
                    break;
                }
            }

            // Update the interaction data source
            interactionMapping.FloatData = singleAxisValue;

            //interactionMapping.UpdateInteractionMappingFloat(InputSource, ControllerHandedness);
            if (interactionMapping.Changed)
            {
                InputSystem?.RaiseFloatInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.FloatData);
            }
        }
        private void UpdateButtonDataPress(MixedRealityInteractionMapping interactionMapping)
        {
            Debug.Assert(interactionMapping.AxisType == AxisType.Digital);

            OculusApi.RawButton interactionButton = OculusApi.RawButton.None;
            OculusInteractionMapping.TryParseRawButton(interactionMapping, out interactionButton);
            //Enum.TryParse<OculusApi.RawButton>(interactionMapping.InputName, out interactionButton);
            //TODO: SHould the "ShouldResolveController" function be used here?
            if (interactionButton != OculusApi.RawButton.None)
            {
                if ((((OculusApi.RawButton)currentState.Buttons & interactionButton) == 0) &&
                    (((OculusApi.RawButton)previousState.Buttons & interactionButton) != 0))
                {
                    interactionMapping.BoolData = false;
                }

                if ((((OculusApi.RawButton)currentState.Buttons & interactionButton) != 0) &&
                    (((OculusApi.RawButton)previousState.Buttons & interactionButton) == 0))
                {
                    interactionMapping.BoolData = true;
                }

                //interactionMapping.UpdateInteractionMappingBool(InputSource, ControllerHandedness);

                if (interactionMapping.Changed)
                {
                    Debug.Log("On Changed");

                    if (interactionMapping.BoolData)
                    {
                        InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction);
                    }
                    else
                    {
                        InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction);
                    }
                }

                if (interactionButton == OculusApi.RawButton.LHandTrigger ||
                    interactionButton == OculusApi.RawButton.RIndexTrigger)
                {
                    InputSystem?.RaisePoseInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, MixedRealityPose.ZeroIdentity);
                }
            }
        }
        private void UpdateButtonDataNearTouch(MixedRealityInteractionMapping interactionMapping)
        {
            Debug.Assert(interactionMapping.AxisType == AxisType.Digital);

            OculusApi.RawNearTouch interactionButton = OculusApi.RawNearTouch.None;
            OculusInteractionMapping.TryParseRawNearTouch(interactionMapping, out interactionButton);
            //Enum.TryParse<OculusApi.RawNearTouch>(interactionMapping.InputName, out interactionButton);

            if (interactionButton != OculusApi.RawNearTouch.None)
            {
                if (((OculusApi.RawNearTouch)previousState.NearTouches & interactionButton) != 0)
                {
                    interactionMapping.BoolData = false;
                }

                if ((((OculusApi.RawNearTouch)currentState.NearTouches & interactionButton) != 0) &&
                    (((OculusApi.RawNearTouch)previousState.NearTouches & interactionButton) == 0))
                {
                    interactionMapping.BoolData = true;
                }

                //interactionMapping.UpdateInteractionMappingBool(InputSource, ControllerHandedness);

                //if (interactionMapping.Changed)
                //{
                //    if (interactionMapping.BoolData)
                //    {
                //        InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction);
                //    }
                //    else
                //    {
                //        InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction);
                //    }
                //}
            }
        }
        private void UpdateDualAxisData(MixedRealityInteractionMapping interactionMapping)
        {
            Debug.Assert(interactionMapping.AxisType == AxisType.DualAxis);

            OculusApi.RawAxis2D interactionAxis2D = OculusApi.RawAxis2D.None;
            OculusInteractionMapping.TryParseRawAxis2D(interactionMapping, out interactionAxis2D);
            //Enum.TryParse<OculusApi.RawAxis2D>(interactionMapping.InputName, out interactionAxis2D);

            if (interactionAxis2D != OculusApi.RawAxis2D.None)
            {
                switch (interactionAxis2D)
                {
                case OculusApi.RawAxis2D.LThumbstick:
                    dualAxisPosition.x = currentState.LThumbstick.x;
                    dualAxisPosition.y = currentState.LThumbstick.y;

                    //if (shouldApplyDeadzone)
                    //    dualAxisPosition = OculusApi.CalculateDeadzone(dualAxisPosition, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    dualAxisPosition = OculusApi.CalculateAbsMax(Vector2.zero, dualAxisPosition);
                    break;

                case OculusApi.RawAxis2D.LTouchpad:
                    dualAxisPosition.x = currentState.LTouchpad.x;
                    dualAxisPosition.y = currentState.LTouchpad.y;

                    //if (shouldApplyDeadzone)
                    //    dualAxisPosition = OculusApi.CalculateDeadzone(dualAxisPosition, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    dualAxisPosition = OculusApi.CalculateAbsMax(Vector2.zero, dualAxisPosition);
                    break;

                case OculusApi.RawAxis2D.RThumbstick:

                    dualAxisPosition.x = currentState.RThumbstick.x;
                    dualAxisPosition.y = currentState.RThumbstick.y;

                    //if (shouldApplyDeadzone)
                    //    dualAxisPosition = OculusApi.CalculateDeadzone(dualAxisPosition, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    dualAxisPosition = OculusApi.CalculateAbsMax(Vector2.zero, dualAxisPosition);
                    break;

                case OculusApi.RawAxis2D.RTouchpad:

                    dualAxisPosition.x = currentState.RTouchpad.x;
                    dualAxisPosition.y = currentState.RTouchpad.y;

                    //if (shouldApplyDeadzone)
                    //    dualAxisPosition = OculusApi.CalculateDeadzone(dualAxisPosition, OculusApi.AXIS_DEADZONE_THRESHOLD);

                    dualAxisPosition = OculusApi.CalculateAbsMax(Vector2.zero, dualAxisPosition);
                    break;
                }
            }

            // Update the interaction data source
            interactionMapping.Vector2Data = dualAxisPosition;
            //interactionMapping.UpdateInteractionMappingVector2(InputSource, ControllerHandedness);
            if (interactionMapping.Changed)
            {
                InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.Vector2Data);
            }
        }