7 using System.Collections.Generic;
8 #if UNITY_2017_2_OR_NEWER 29 [Tooltip(
"Whether the recognizer should be activated on start.")]
32 [Tooltip(
"Set to true to use the use rails (guides) for the navigation gesture, as opposed to full 3D navigation.")]
33 public bool UseRailsNavigation =
false;
39 private bool delayInitialization =
true;
42 protected GestureRecognizer GestureRecognizer;
43 protected GestureRecognizer NavigationGestureRecognizer;
46 #region IInputSource Capabilities and SourceData 49 private struct SourceCapability<TReading>
51 public bool IsSupported;
52 public bool IsAvailable;
53 public TReading CurrentReading;
56 private struct AxisButton2D
61 public static AxisButton2D GetThumbstick(InteractionSourceState interactionSource)
63 return new AxisButton2D
65 #if UNITY_2017_2_OR_NEWER 66 Pressed = interactionSource.thumbstickPressed,
67 Position = interactionSource.thumbstickPosition,
70 Position =
default(Vector2)
75 public static AxisButton2D GetTouchpad(InteractionSourceState interactionSource)
77 return new AxisButton2D
79 #if UNITY_2017_2_OR_NEWER 80 Pressed = interactionSource.touchpadPressed,
81 Position = interactionSource.touchpadPosition,
84 Position =
default(Vector2)
90 private struct TouchpadData
92 public AxisButton2D AxisButton;
95 public static TouchpadData GetTouchpad(InteractionSourceState interactionSource)
97 return new TouchpadData
99 AxisButton = AxisButton2D.GetTouchpad(interactionSource),
100 #if UNITY_2017_2_OR_NEWER 101 Touched = interactionSource.touchpadTouched,
109 private struct AxisButton1D
112 public double PressedAmount;
114 public static AxisButton1D GetSelect(InteractionSourceState interactionSource)
116 return new AxisButton1D
118 #if UNITY_2017_2_OR_NEWER 119 Pressed = interactionSource.selectPressed,
120 PressedAmount = interactionSource.selectPressedAmount,
132 private class SourceData
134 public SourceData(InteractionSource interactionSource)
136 Source = interactionSource;
139 public void ResetUpdatedBooleans()
141 ThumbstickPositionUpdated =
false;
142 TouchpadPositionUpdated =
false;
143 TouchpadTouchedUpdated =
false;
144 PositionUpdated =
false;
145 RotationUpdated =
false;
146 SelectPressedAmountUpdated =
false;
149 public uint SourceId {
get {
return Source.id; } }
150 public InteractionSourceKind SourceKind {
get {
return Source.kind; } }
151 #if UNITY_2017_2_OR_NEWER 152 public InteractionSourceHandedness
Handedness {
get {
return Source.handedness; } }
154 public readonly InteractionSource Source;
157 public SourceCapability<Ray> PointingRay;
160 public SourceCapability<AxisButton2D>
Thumbstick;
161 public SourceCapability<TouchpadData>
Touchpad;
162 public SourceCapability<AxisButton1D>
Select;
163 public SourceCapability<bool>
Grasp;
164 public SourceCapability<bool>
Menu;
166 public bool ThumbstickPositionUpdated;
167 public bool TouchpadPositionUpdated;
168 public bool TouchpadTouchedUpdated;
169 public bool PositionUpdated;
170 public bool RotationUpdated;
171 public bool SelectPressedAmountUpdated;
177 private readonly Dictionary<uint, SourceData> sourceIdToData =
new Dictionary<uint, SourceData>(4);
179 #endregion IInputSource Capabilities and SourceData 181 #region MonoBehaviour APIs 186 GestureRecognizer =
new GestureRecognizer();
187 #if UNITY_2017_2_OR_NEWER 188 GestureRecognizer.Tapped += GestureRecognizer_Tapped;
190 GestureRecognizer.HoldStarted += GestureRecognizer_HoldStarted;
191 GestureRecognizer.HoldCompleted += GestureRecognizer_HoldCompleted;
192 GestureRecognizer.HoldCanceled += GestureRecognizer_HoldCanceled;
194 GestureRecognizer.ManipulationStarted += GestureRecognizer_ManipulationStarted;
195 GestureRecognizer.ManipulationUpdated += GestureRecognizer_ManipulationUpdated;
196 GestureRecognizer.ManipulationCompleted += GestureRecognizer_ManipulationCompleted;
197 GestureRecognizer.ManipulationCanceled += GestureRecognizer_ManipulationCanceled;
199 GestureRecognizer.TappedEvent += GestureRecognizer_Tapped;
201 GestureRecognizer.HoldStartedEvent += GestureRecognizer_HoldStarted;
202 GestureRecognizer.HoldCompletedEvent += GestureRecognizer_HoldCompleted;
203 GestureRecognizer.HoldCanceledEvent += GestureRecognizer_HoldCanceled;
205 GestureRecognizer.ManipulationStartedEvent += GestureRecognizer_ManipulationStarted;
206 GestureRecognizer.ManipulationUpdatedEvent += GestureRecognizer_ManipulationUpdated;
207 GestureRecognizer.ManipulationCompletedEvent += GestureRecognizer_ManipulationCompleted;
208 GestureRecognizer.ManipulationCanceledEvent += GestureRecognizer_ManipulationCanceled;
210 GestureRecognizer.SetRecognizableGestures(GestureSettings.Tap |
211 GestureSettings.ManipulationTranslate |
212 GestureSettings.Hold);
215 NavigationGestureRecognizer =
new GestureRecognizer();
217 #if UNITY_2017_2_OR_NEWER 218 NavigationGestureRecognizer.NavigationStarted += NavigationGestureRecognizer_NavigationStarted;
219 NavigationGestureRecognizer.NavigationUpdated += NavigationGestureRecognizer_NavigationUpdated;
220 NavigationGestureRecognizer.NavigationCompleted += NavigationGestureRecognizer_NavigationCompleted;
221 NavigationGestureRecognizer.NavigationCanceled += NavigationGestureRecognizer_NavigationCanceled;
223 NavigationGestureRecognizer.NavigationStartedEvent += NavigationGestureRecognizer_NavigationStarted;
224 NavigationGestureRecognizer.NavigationUpdatedEvent += NavigationGestureRecognizer_NavigationUpdated;
225 NavigationGestureRecognizer.NavigationCompletedEvent += NavigationGestureRecognizer_NavigationCompleted;
226 NavigationGestureRecognizer.NavigationCanceledEvent += NavigationGestureRecognizer_NavigationCanceled;
228 if (UseRailsNavigation)
230 NavigationGestureRecognizer.SetRecognizableGestures(GestureSettings.NavigationRailsX |
231 GestureSettings.NavigationRailsY |
232 GestureSettings.NavigationRailsZ);
236 NavigationGestureRecognizer.SetRecognizableGestures(GestureSettings.NavigationX |
237 GestureSettings.NavigationY |
238 GestureSettings.NavigationZ);
243 GestureRecognizer.StartCapturingGestures();
244 NavigationGestureRecognizer.StartCapturingGestures();
251 if (!delayInitialization)
260 if (delayInitialization)
262 delayInitialization =
false;
270 StopGestureRecognizer();
272 #if UNITY_2017_2_OR_NEWER 273 InteractionManager.InteractionSourceDetected -= InteractionManager_InteractionSourceDetected;
274 InteractionManager.InteractionSourcePressed -= InteractionManager_InteractionSourcePressed;
275 InteractionManager.InteractionSourceUpdated -= InteractionManager_InteractionSourceUpdated;
276 InteractionManager.InteractionSourceReleased -= InteractionManager_InteractionSourceReleased;
277 InteractionManager.InteractionSourceLost -= InteractionManager_InteractionSourceLost;
279 InteractionManager.SourceDetected -= InteractionManager_InteractionSourceDetected;
280 InteractionManager.SourcePressed -= InteractionManager_InteractionSourcePressed;
281 InteractionManager.SourceUpdated -= InteractionManager_InteractionSourceUpdated;
282 InteractionManager.SourceReleased -= InteractionManager_InteractionSourceReleased;
283 InteractionManager.SourceLost -= InteractionManager_InteractionSourceLost;
286 InteractionSourceState[] states = InteractionManager.GetCurrentReading();
287 for (var i = 0; i < states.Length; i++)
290 sourceIdToData.Remove(states[i].source.id);
299 if (GestureRecognizer != null)
301 #if UNITY_2017_2_OR_NEWER 302 GestureRecognizer.Tapped -= GestureRecognizer_Tapped;
304 GestureRecognizer.HoldStarted -= GestureRecognizer_HoldStarted;
305 GestureRecognizer.HoldCompleted -= GestureRecognizer_HoldCompleted;
306 GestureRecognizer.HoldCanceled -= GestureRecognizer_HoldCanceled;
308 GestureRecognizer.ManipulationStarted -= GestureRecognizer_ManipulationStarted;
309 GestureRecognizer.ManipulationUpdated -= GestureRecognizer_ManipulationUpdated;
310 GestureRecognizer.ManipulationCompleted -= GestureRecognizer_ManipulationCompleted;
311 GestureRecognizer.ManipulationCanceled -= GestureRecognizer_ManipulationCanceled;
313 GestureRecognizer.TappedEvent -= GestureRecognizer_Tapped;
315 GestureRecognizer.HoldStartedEvent -= GestureRecognizer_HoldStarted;
316 GestureRecognizer.HoldCompletedEvent -= GestureRecognizer_HoldCompleted;
317 GestureRecognizer.HoldCanceledEvent -= GestureRecognizer_HoldCanceled;
319 GestureRecognizer.ManipulationStartedEvent -= GestureRecognizer_ManipulationStarted;
320 GestureRecognizer.ManipulationUpdatedEvent -= GestureRecognizer_ManipulationUpdated;
321 GestureRecognizer.ManipulationCompletedEvent -= GestureRecognizer_ManipulationCompleted;
322 GestureRecognizer.ManipulationCanceledEvent -= GestureRecognizer_ManipulationCanceled;
325 GestureRecognizer.Dispose();
328 if (NavigationGestureRecognizer != null)
330 #if UNITY_2017_2_OR_NEWER 331 NavigationGestureRecognizer.NavigationStarted -= NavigationGestureRecognizer_NavigationStarted;
332 NavigationGestureRecognizer.NavigationUpdated -= NavigationGestureRecognizer_NavigationUpdated;
333 NavigationGestureRecognizer.NavigationCompleted -= NavigationGestureRecognizer_NavigationCompleted;
334 NavigationGestureRecognizer.NavigationCanceled -= NavigationGestureRecognizer_NavigationCanceled;
336 NavigationGestureRecognizer.NavigationStartedEvent -= NavigationGestureRecognizer_NavigationStarted;
337 NavigationGestureRecognizer.NavigationUpdatedEvent -= NavigationGestureRecognizer_NavigationUpdated;
338 NavigationGestureRecognizer.NavigationCompletedEvent -= NavigationGestureRecognizer_NavigationCompleted;
339 NavigationGestureRecognizer.NavigationCanceledEvent -= NavigationGestureRecognizer_NavigationCanceled;
341 NavigationGestureRecognizer.Dispose();
346 #endregion MonoBehaviour APIs 355 if (GestureRecognizer != null && !GestureRecognizer.IsCapturingGestures())
357 GestureRecognizer.StartCapturingGestures();
359 if (NavigationGestureRecognizer != null && !NavigationGestureRecognizer.IsCapturingGestures())
361 NavigationGestureRecognizer.StartCapturingGestures();
373 if (GestureRecognizer != null && GestureRecognizer.IsCapturingGestures())
375 GestureRecognizer.StopCapturingGestures();
378 if (NavigationGestureRecognizer != null && NavigationGestureRecognizer.IsCapturingGestures())
380 NavigationGestureRecognizer.StopCapturingGestures();
385 private void InitializeSources()
392 StartGestureRecognizer();
395 InteractionSourceState[] states = InteractionManager.GetCurrentReading();
396 for (var i = 0; i < states.Length; i++)
398 GetOrAddSourceData(states[i].source);
402 #if UNITY_2017_2_OR_NEWER 403 InteractionManager.InteractionSourceDetected += InteractionManager_InteractionSourceDetected;
404 InteractionManager.InteractionSourcePressed += InteractionManager_InteractionSourcePressed;
405 InteractionManager.InteractionSourceUpdated += InteractionManager_InteractionSourceUpdated;
406 InteractionManager.InteractionSourceReleased += InteractionManager_InteractionSourceReleased;
407 InteractionManager.InteractionSourceLost += InteractionManager_InteractionSourceLost;
409 InteractionManager.SourceDetected += InteractionManager_InteractionSourceDetected;
410 InteractionManager.SourcePressed += InteractionManager_InteractionSourcePressed;
411 InteractionManager.SourceUpdated += InteractionManager_InteractionSourceUpdated;
412 InteractionManager.SourceReleased += InteractionManager_InteractionSourceReleased;
413 InteractionManager.SourceLost += InteractionManager_InteractionSourceLost;
423 #if UNITY_WSA && UNITY_2017_2_OR_NEWER 424 SourceData sourceData;
425 if (sourceIdToData.TryGetValue(sourceId, out sourceData))
427 sourceData.Source.StartHaptics(intensity);
432 public void StartHaptics(uint sourceId,
float intensity,
float durationInSeconds)
434 #if UNITY_WSA && UNITY_2017_2_OR_NEWER 435 SourceData sourceData;
436 if (sourceIdToData.TryGetValue(sourceId, out sourceData))
438 sourceData.Source.StartHaptics(intensity, durationInSeconds);
445 #if UNITY_WSA && UNITY_2017_2_OR_NEWER 446 SourceData sourceData;
447 if (sourceIdToData.TryGetValue(sourceId, out sourceData))
449 sourceData.Source.StopHaptics();
456 #if UNITY_WSA && UNITY_2017_2_OR_NEWER 457 SourceData sourceData;
458 if (sourceIdToData.TryGetValue(sourceId, out sourceData))
460 handedness = (
Handedness)sourceData.Handedness;
469 #region BaseInputSource implementations 475 SourceData sourceData;
476 if (sourceIdToData.TryGetValue(sourceId, out sourceData))
478 retVal |= GetSupportFlag(sourceData.PointerPosition,
SupportedInputInfo.PointerPosition);
479 retVal |= GetSupportFlag(sourceData.PointerRotation,
SupportedInputInfo.PointerRotation);
496 SourceData sourceData;
497 if (sourceIdToData.TryGetValue(sourceId, out sourceData))
511 SourceData sourceData;
512 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.PointerPosition, out position))
518 position =
default(Vector3);
525 SourceData sourceData;
526 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.PointerRotation, out rotation))
532 rotation =
default(Quaternion);
539 SourceData sourceData;
540 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.PointingRay, out pointingRay))
546 pointingRay =
default(Ray);
553 SourceData sourceData;
554 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.GripPosition, out position))
560 position =
default(Vector3);
567 SourceData sourceData;
568 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.GripRotation, out rotation))
574 rotation =
default(Quaternion);
578 public override bool TryGetThumbstick(uint sourceId, out
bool thumbstickPressed, out Vector2 thumbstickPosition)
581 SourceData sourceData;
582 AxisButton2D thumbstick;
583 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.Thumbstick, out thumbstick))
585 thumbstickPressed = thumbstick.Pressed;
586 thumbstickPosition = thumbstick.Position;
591 thumbstickPressed =
false;
592 thumbstickPosition = Vector2.zero;
596 public override bool TryGetTouchpad(uint sourceId, out
bool touchpadPressed, out
bool touchpadTouched, out Vector2 touchpadPosition)
599 SourceData sourceData;
600 TouchpadData touchpad;
601 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.Touchpad, out touchpad))
603 touchpadPressed = touchpad.AxisButton.Pressed;
604 touchpadTouched = touchpad.Touched;
605 touchpadPosition = touchpad.AxisButton.Position;
610 touchpadPressed =
false;
611 touchpadTouched =
false;
612 touchpadPosition = Vector2.zero;
616 public override bool TryGetSelect(uint sourceId, out
bool selectPressed, out
double selectPressedAmount)
619 SourceData sourceData;
621 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.Select, out select))
623 selectPressed = select.Pressed;
624 selectPressedAmount = select.PressedAmount;
629 selectPressed =
false;
630 selectPressedAmount = 0;
634 public override bool TryGetGrasp(uint sourceId, out
bool graspPressed)
637 SourceData sourceData;
638 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.Grasp, out graspPressed))
644 graspPressed =
false;
648 public override bool TryGetMenu(uint sourceId, out
bool menuPressed)
652 SourceData sourceData;
653 if (sourceIdToData.TryGetValue(sourceId, out sourceData) && TryGetReading(sourceData.Menu, out menuPressed))
664 private bool TryGetReading<TReading>(SourceCapability<TReading> capability, out TReading reading)
666 if (capability.IsAvailable)
668 Debug.Assert(capability.IsSupported);
670 reading = capability.CurrentReading;
673 reading =
default(TReading);
685 private SourceData GetOrAddSourceData(InteractionSource interactionSource)
692 SourceData sourceData;
693 if (!sourceIdToData.TryGetValue(interactionSource.id, out sourceData))
695 sourceData =
new SourceData(interactionSource);
696 sourceIdToData.Add(sourceData.SourceId, sourceData);
710 private void UpdateSourceData(InteractionSourceState interactionSourceState, SourceData sourceData)
712 Debug.Assert(interactionSourceState.source.id == sourceData.SourceId,
"An UpdateSourceState call happened with mismatched source ID.");
713 Debug.Assert(interactionSourceState.source.kind == sourceData.SourceKind,
"An UpdateSourceState call happened with mismatched source kind.");
715 Vector3 newPointerPosition = Vector3.zero;
716 sourceData.PointerPosition.IsAvailable =
717 #if UNITY_2017_2_OR_NEWER 718 interactionSourceState.sourcePose.TryGetPosition(out newPointerPosition, InteractionSourceNode.Pointer);
720 interactionSourceState.properties.location.TryGetPosition(out newPointerPosition);
723 sourceData.PointerPosition.IsSupported |= sourceData.PointerPosition.IsAvailable;
725 Vector3 newGripPosition = Vector3.zero;
726 sourceData.GripPosition.IsAvailable =
727 #if UNITY_2017_2_OR_NEWER 728 interactionSourceState.sourcePose.TryGetPosition(out newGripPosition, InteractionSourceNode.Grip);
733 sourceData.GripPosition.IsSupported |= sourceData.GripPosition.IsAvailable;
737 newPointerPosition =
CameraCache.
Main.transform.parent.TransformPoint(newPointerPosition);
738 newGripPosition =
CameraCache.
Main.transform.parent.TransformPoint(newGripPosition);
741 if (sourceData.PointerPosition.IsAvailable || sourceData.GripPosition.IsAvailable)
743 sourceData.PositionUpdated = !(sourceData.PointerPosition.CurrentReading.Equals(newPointerPosition) && sourceData.GripPosition.CurrentReading.Equals(newGripPosition));
746 sourceData.PointerPosition.CurrentReading = newPointerPosition;
747 sourceData.GripPosition.CurrentReading = newGripPosition;
749 Quaternion newPointerRotation = Quaternion.identity;
750 sourceData.PointerRotation.IsAvailable =
751 #if UNITY_2017_2_OR_NEWER 752 interactionSourceState.sourcePose.TryGetRotation(out newPointerRotation, InteractionSourceNode.Pointer);
757 sourceData.PointerRotation.IsSupported |= sourceData.PointerRotation.IsAvailable;
759 Quaternion newGripRotation = Quaternion.identity;
760 sourceData.GripRotation.IsAvailable =
761 #if UNITY_2017_2_OR_NEWER 762 interactionSourceState.sourcePose.TryGetRotation(out newGripRotation, InteractionSourceNode.Grip);
767 sourceData.GripRotation.IsSupported |= sourceData.GripRotation.IsAvailable;
771 newPointerRotation.eulerAngles =
CameraCache.
Main.transform.parent.TransformDirection(newPointerRotation.eulerAngles);
772 newGripRotation.eulerAngles =
CameraCache.
Main.transform.parent.TransformDirection(newGripRotation.eulerAngles);
775 if (sourceData.PointerRotation.IsAvailable || sourceData.GripRotation.IsAvailable)
777 sourceData.RotationUpdated = !(sourceData.PointerRotation.CurrentReading.Equals(newPointerRotation) && sourceData.GripRotation.CurrentReading.Equals(newGripRotation));
779 sourceData.PointerRotation.CurrentReading = newPointerRotation;
780 sourceData.GripRotation.CurrentReading = newGripRotation;
782 Vector3 pointerForward = Vector3.zero;
783 sourceData.PointingRay.IsSupported =
784 #if UNITY_2017_2_OR_NEWER 785 interactionSourceState.source.supportsPointing;
789 sourceData.PointingRay.IsAvailable =
790 #if UNITY_2017_2_OR_NEWER 791 sourceData.PointerPosition.IsAvailable && interactionSourceState.sourcePose.TryGetForward(out pointerForward, InteractionSourceNode.Pointer);
798 pointerForward =
CameraCache.
Main.transform.parent.TransformDirection(pointerForward);
801 sourceData.PointingRay.CurrentReading =
new Ray(sourceData.PointerPosition.CurrentReading, pointerForward);
803 sourceData.Thumbstick.IsSupported =
804 #if UNITY_2017_2_OR_NEWER 805 interactionSourceState.source.supportsThumbstick;
809 sourceData.Thumbstick.IsAvailable = sourceData.Thumbstick.IsSupported;
810 if (sourceData.Thumbstick.IsAvailable)
812 AxisButton2D newThumbstick = AxisButton2D.GetThumbstick(interactionSourceState);
813 sourceData.ThumbstickPositionUpdated = sourceData.Thumbstick.CurrentReading.Position != newThumbstick.Position;
814 sourceData.Thumbstick.CurrentReading = newThumbstick;
818 sourceData.Thumbstick.CurrentReading =
default(AxisButton2D);
821 sourceData.Touchpad.IsSupported =
822 #if UNITY_2017_2_OR_NEWER 823 interactionSourceState.source.supportsTouchpad;
827 sourceData.Touchpad.IsAvailable = sourceData.Touchpad.IsSupported;
828 if (sourceData.Touchpad.IsAvailable)
830 TouchpadData newTouchpad = TouchpadData.GetTouchpad(interactionSourceState);
831 sourceData.TouchpadPositionUpdated = !sourceData.Touchpad.CurrentReading.AxisButton.Position.Equals(newTouchpad.AxisButton.Position);
832 sourceData.TouchpadTouchedUpdated = !sourceData.Touchpad.CurrentReading.Touched.Equals(newTouchpad.Touched);
833 sourceData.Touchpad.CurrentReading = newTouchpad;
837 sourceData.Touchpad.CurrentReading =
default(TouchpadData);
840 sourceData.Select.IsSupported =
true;
841 sourceData.Select.IsAvailable = sourceData.Select.IsSupported;
842 AxisButton1D newSelect = AxisButton1D.GetSelect(interactionSourceState);
843 sourceData.SelectPressedAmountUpdated = !sourceData.Select.CurrentReading.PressedAmount.Equals(newSelect.PressedAmount);
844 sourceData.Select.CurrentReading = newSelect;
846 sourceData.Grasp.IsSupported =
847 #if UNITY_2017_2_OR_NEWER 848 interactionSourceState.source.supportsGrasp;
852 sourceData.Grasp.IsAvailable = sourceData.Grasp.IsSupported;
853 sourceData.Grasp.CurrentReading =
854 #if UNITY_2017_2_OR_NEWER 855 (sourceData.Grasp.IsAvailable && interactionSourceState.grasped);
860 sourceData.Menu.IsSupported =
861 #if UNITY_2017_2_OR_NEWER 862 interactionSourceState.source.supportsMenu;
866 sourceData.Menu.IsAvailable = sourceData.Menu.IsSupported;
867 sourceData.Menu.CurrentReading =
868 #if UNITY_2017_2_OR_NEWER 869 (sourceData.Menu.IsAvailable && interactionSourceState.menuPressed);
874 #if UNITY_2017_2_OR_NEWER 875 #region InteractionManager Events 877 private void InteractionManager_InteractionSourceUpdated(InteractionSourceUpdatedEventArgs args)
879 SourceData sourceData = GetOrAddSourceData(args.state.source);
881 sourceData.ResetUpdatedBooleans();
883 UpdateSourceData(args.state, sourceData);
885 if (sourceData.PositionUpdated)
887 InputManager.
Instance.RaiseSourcePositionChanged(
this, sourceData.SourceId, sourceData.PointerPosition.CurrentReading, sourceData.GripPosition.CurrentReading);
890 if (sourceData.RotationUpdated)
892 InputManager.
Instance.RaiseSourceRotationChanged(
this, sourceData.SourceId, sourceData.PointerRotation.CurrentReading, sourceData.GripRotation.CurrentReading);
895 if (sourceData.ThumbstickPositionUpdated)
900 if (sourceData.TouchpadPositionUpdated)
905 if (sourceData.TouchpadTouchedUpdated)
907 if (sourceData.Touchpad.CurrentReading.Touched)
917 if (sourceData.SelectPressedAmountUpdated)
919 InputManager.
Instance.RaiseSelectPressedAmountChanged(
this, sourceData.SourceId, sourceData.Select.CurrentReading.PressedAmount);
923 private void InteractionManager_InteractionSourceReleased(InteractionSourceReleasedEventArgs args)
927 if (args.state.source.kind != InteractionSourceKind.Controller || !args.state.source.supportsPointing)
935 private void InteractionManager_InteractionSourcePressed(InteractionSourcePressedEventArgs args)
939 if (args.state.source.kind != InteractionSourceKind.Controller || !args.state.source.supportsPointing)
947 private void InteractionManager_InteractionSourceLost(InteractionSourceLostEventArgs args)
952 sourceIdToData.Remove(args.state.source.id);
955 private void InteractionManager_InteractionSourceDetected(InteractionSourceDetectedEventArgs args)
958 UpdateSourceData(args.state, GetOrAddSourceData(args.state.source));
963 #endregion InteractionManager Events 965 #region Raise GestureRecognizer Events 969 protected void GestureRecognizer_Tapped(TappedEventArgs args)
974 protected void GestureRecognizer_HoldStarted(HoldStartedEventArgs args)
979 protected void GestureRecognizer_HoldCanceled(HoldCanceledEventArgs args)
984 protected void GestureRecognizer_HoldCompleted(HoldCompletedEventArgs args)
989 protected void GestureRecognizer_ManipulationStarted(ManipulationStartedEventArgs args)
994 protected void GestureRecognizer_ManipulationUpdated(ManipulationUpdatedEventArgs args)
999 protected void GestureRecognizer_ManipulationCompleted(ManipulationCompletedEventArgs args)
1004 protected void GestureRecognizer_ManipulationCanceled(ManipulationCanceledEventArgs args)
1009 protected void NavigationGestureRecognizer_NavigationStarted(NavigationStartedEventArgs args)
1014 protected void NavigationGestureRecognizer_NavigationUpdated(NavigationUpdatedEventArgs args)
1019 protected void NavigationGestureRecognizer_NavigationCompleted(NavigationCompletedEventArgs args)
1024 protected void NavigationGestureRecognizer_NavigationCanceled(NavigationCanceledEventArgs args)
1029 #endregion //Raise GestureRecognizer Events 1032 #region InteractionManager Events 1034 private void InteractionManager_InteractionSourceUpdated(InteractionSourceState state)
1036 SourceData sourceData = GetOrAddSourceData(state.source);
1038 sourceData.ResetUpdatedBooleans();
1040 UpdateSourceData(state, sourceData);
1042 if (sourceData.PositionUpdated)
1044 InputManager.
Instance.RaiseSourcePositionChanged(
this, sourceData.SourceId, sourceData.PointerPosition.CurrentReading, sourceData.GripPosition.CurrentReading);
1047 if (sourceData.RotationUpdated)
1049 InputManager.
Instance.RaiseSourceRotationChanged(
this, sourceData.SourceId, sourceData.PointerRotation.CurrentReading, sourceData.GripRotation.CurrentReading);
1052 if (sourceData.ThumbstickPositionUpdated)
1057 if (sourceData.TouchpadPositionUpdated)
1062 if (sourceData.TouchpadTouchedUpdated)
1064 if (sourceData.Touchpad.CurrentReading.Touched)
1074 if (sourceData.SelectPressedAmountUpdated)
1076 InputManager.
Instance.RaiseSelectPressedAmountChanged(
this, sourceData.SourceId, sourceData.Select.CurrentReading.PressedAmount);
1080 private void InteractionManager_InteractionSourceReleased(InteractionSourceState state)
1085 private void InteractionManager_InteractionSourcePressed(InteractionSourceState state)
1090 private void InteractionManager_InteractionSourceLost(InteractionSourceState state)
1093 sourceIdToData.Remove(state.source.id);
1098 private void InteractionManager_InteractionSourceDetected(InteractionSourceState state)
1101 UpdateSourceData(state, GetOrAddSourceData(state.source));
1106 #endregion InteractionManager Events 1108 #region Raise GestureRecognizer Events 1110 protected void GestureRecognizer_Tapped(InteractionSourceKind source,
int tapCount, Ray headRay)
1115 protected void GestureRecognizer_HoldStarted(InteractionSourceKind source, Ray headray)
1120 protected void GestureRecognizer_HoldCanceled(InteractionSourceKind source, Ray headray)
1125 protected void GestureRecognizer_HoldCompleted(InteractionSourceKind source, Ray headray)
1130 protected void GestureRecognizer_ManipulationStarted(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray)
1135 protected void GestureRecognizer_ManipulationUpdated(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray)
1140 protected void GestureRecognizer_ManipulationCompleted(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray)
1145 protected void GestureRecognizer_ManipulationCanceled(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray)
1150 protected void NavigationGestureRecognizer_NavigationStarted(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray)
1155 protected void NavigationGestureRecognizer_NavigationUpdated(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray)
1160 protected void NavigationGestureRecognizer_NavigationCompleted(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray)
1165 protected void NavigationGestureRecognizer_NavigationCanceled(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray)
1170 #endregion //Raise GestureRecognizer Events