/// <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; } } } }