/// <summary>
    /// Gets the focuser tied to the current active input source.
    /// </summary>
    /// <returns></returns>
    public AFocuser GetFocuserForCurrentTargetingSource()
    {
        AFocuser focuser = null;

        if (FocusManager.Instance != null)
        {
            for (int index = 0; index < FocusManager.Instance.Focusers.Length; index++)
            {
                InputSourceFocuser sourceFocuser = FocusManager.Instance.Focusers[index] as InputSourceFocuser;
                if (sourceFocuser != null && sourceFocuser.TargetingInputSource == CurrentTargetingSource)
                {
                    focuser = FocusManager.Instance.Focusers[index];
                    break;
                }
            }

            //If we haven't found a specific focuser use the gaze.
            if (focuser == null)
            {
                focuser = FocusManager.Instance.GazeFocuser;
            }
        }

        return(focuser);
    }
        void OnShellSelectEvent(InputSourceBase inputSource, bool newState)
        {
            AFocuser focuser = InputSourceFocuser.GetFocuserForInputSource(inputSource);

            if (focuser != null)
            {
                if (newState)
                {
                    if (inputSource != InputSources.Instance.hands) // && inputSource != InputSources.Instance.fawkes)
                    {
                        OnPressedEvent(focuser);

                        // Need to track hold time before firing this
                        HoldStartedEvent(focuser, focuser.FocusRay);
                    }
                }
                else
                {
                    if (inputSource != InputSources.Instance.hands) // && inputSource != InputSources.Instance.fawkes)
                    {
                        OnReleasedEvent(focuser);

                        // Only fire this if HoldStarted was fired
                        HoldCompletedEvent(focuser, focuser.FocusRay);

                        // Need to only fire this if hold wasn't started?
                        TappedEvent(focuser, focuser.FocusRay);
                    }
                }
            }
        }
        private AFocuser GetFocuserForSource(UnityEngine.XR.WSA.Input.InteractionSourceKind source)
        {
            AFocuser focuser = FocusManager.Instance != null ? FocusManager.Instance.GazeFocuser : null;

            switch (source)
            {
            case UnityEngine.XR.WSA.Input.InteractionSourceKind.Hand:
            {
                focuser = InputSourceFocuser.GetFocuserForInputSource(InputSources.Instance.hands);
                break;
            }

            case UnityEngine.XR.WSA.Input.InteractionSourceKind.Controller:
            {
                focuser = InputSourceFocuser.GetFocuserForInputSource(InputSources.Instance.sixDOFRay);
                break;
            }
            }
            return(focuser);
        }
        void OnShellSelectEvent(InputSourceBase inputSource, bool newState)
        {
            AFocuser focuser = InputSourceFocuser.GetFocuserForInputSource(inputSource);

            if (focuser != null)
            {
                if (newState)
                {
                    if (inputSource != InputSources.Instance.hands)
                    {
                        OnPressedEvent(focuser);

                        // Need to track hold time before firing this
                        HoldStartedEvent(focuser, focuser.FocusRay);
                    }
                }
                else
                {
                    if (inputSource != InputSources.Instance.hands)
                    {
                        OnReleasedEvent(focuser);

                        // Only fire this if HoldStarted was fired
                        HoldCompletedEvent(focuser, focuser.FocusRay);

                        // Send double tap (should be multi-tap someday)
                        if (Time.time - lastHoldReleaseTime <= MultiTapWindow)
                        {
                            DoubleTappedEvent(focuser, focuser.FocusRay);
                        }

                        // Need to only fire this if hold wasn't started?
                        TappedEvent(focuser, focuser.FocusRay);

                        lastHoldReleaseTime = Time.time;
                    }
                }
            }
        }