public bool GetReleasedThisFrame(SourceHandedness handedness, Button btn)
        {
#if UNITY_WSA || UNITY_EDITOR
            var hand = (MRWSAInput.InteractionSourceHandedness)Enum.ToObject(typeof(MRWSAInput.InteractionSourceHandedness), handedness);

            return(GetReleasedThisFrame(hand, btn));
#else
            return(false);
#endif
        }
        // button states
        public bool IsPressed(SourceHandedness handedness, Button btn, bool getPreviousValue = false)
        {
#if UNITY_WSA || UNITY_EDITOR
            var hand = (MRWSAInput.InteractionSourceHandedness)Enum.ToObject(typeof(MRWSAInput.InteractionSourceHandedness), handedness);

            return(IsPressed(hand, btn, getPreviousValue));
#else
            return(false);
#endif
        }
        public bool HasData(SourceHandedness handedness, bool getPreviousState)
        {
#if UNITY_WSA || UNITY_EDITOR
            var state = GetState(handedness, getPreviousState);

            return(state != null && state.HasValue);
#else
            return(false);
#endif
        }
        public Quaternion GetRotationDelta(SourceHandedness sourceHandedness, SourceNode sourceNode)
        {
#if UNITY_WSA || UNITY_EDITOR
            var hand = (MRWSAInput.InteractionSourceHandedness)Enum.ToObject(typeof(MRWSAInput.InteractionSourceHandedness), sourceHandedness);
            var node = (MRWSAInput.InteractionSourceNode)Enum.ToObject(typeof(MRWSAInput.InteractionSourceNode), sourceNode);

            return(GetRotationDelta(hand, node));
#else
            return(Quaternion.identity);
#endif
        }
        public Quaternion?GetRotation(SourceHandedness sourceHandedness, SourceNode sourceNode, bool getPreviousValue = false)
        {
#if UNITY_WSA || UNITY_EDITOR
            var hand = (MRWSAInput.InteractionSourceHandedness)Enum.ToObject(typeof(MRWSAInput.InteractionSourceHandedness), sourceHandedness);
            var node = (MRWSAInput.InteractionSourceNode)Enum.ToObject(typeof(MRWSAInput.InteractionSourceNode), sourceNode);

            return(GetRotation(hand, node, getPreviousValue));
#else
            return(Quaternion.identity);
#endif
        }
        public Vector3 GetPositionDelta(SourceHandedness sourceHandedness, SourceNode sourceNode)
        {
#if UNITY_WSA || UNITY_EDITOR
            var hand = (MRWSAInput.InteractionSourceHandedness)Enum.ToObject(typeof(MRWSAInput.InteractionSourceHandedness), sourceHandedness);
            var node = (MRWSAInput.InteractionSourceNode)Enum.ToObject(typeof(MRWSAInput.InteractionSourceNode), sourceNode);

            return(GetPositionDelta(hand, node));
#else
            return(Vector3.zero);
#endif
        }
        // position states
        public Vector3?GetPosition(SourceHandedness sourceHandedness, SourceNode sourceNode, bool getPreviousValue = false)
        {
#if UNITY_WSA || UNITY_EDITOR
            var hand = (MRWSAInput.InteractionSourceHandedness)Enum.ToObject(typeof(MRWSAInput.InteractionSourceHandedness), sourceHandedness);
            var node = (MRWSAInput.InteractionSourceNode)Enum.ToObject(typeof(MRWSAInput.InteractionSourceNode), sourceNode);

            return(GetPosition(hand, node, getPreviousValue));
#else
            return(null);
#endif
        }
 public bool IsActiveHand(SourceHandedness sourceHandedness)
 {
     return(this.activeSelectionHand == sourceHandedness);
 }
        // state
        public MRWSAInput.InteractionSourceState?GetState(SourceHandedness handedness, bool getPreviousState)
        {
            var hand = (MRWSAInput.InteractionSourceHandedness)Enum.ToObject(typeof(MRWSAInput.InteractionSourceHandedness), handedness);

            return(GetState(hand, getPreviousState));
        }