11// Copyright (c) Microsoft Corporation. All rights reserved.
22// Licensed under the MIT License. See LICENSE in the project root for license information.
33
4- using Microsoft . MixedReality . Toolkit . InputSystem . Sources ;
54using Microsoft . MixedReality . Toolkit . Core . Definitions . Devices ;
65using Microsoft . MixedReality . Toolkit . Core . Definitions . InputSystem ;
76using Microsoft . MixedReality . Toolkit . Core . Definitions . Utilities ;
1211using Microsoft . MixedReality . Toolkit . Core . Interfaces . InputSystem . Handlers ;
1312using Microsoft . MixedReality . Toolkit . Core . Managers ;
1413using Microsoft . MixedReality . Toolkit . Core . Utilities ;
14+ using Microsoft . MixedReality . Toolkit . InputSystem . Sources ;
1515using System ;
1616using System . Collections . Generic ;
1717using UnityEngine ;
@@ -50,7 +50,11 @@ public class MixedRealityInputManager : MixedRealityEventManager, IMixedRealityI
5050 private int disabledRefCount ;
5151
5252 private SourceStateEventData sourceStateEventData ;
53- private SourcePoseEventData sourcePoseEventData ;
53+ private SourcePoseEventData < TrackingState > sourceTrackingEventData ;
54+ private SourcePoseEventData < Vector2 > sourceVector2EventData ;
55+ private SourcePoseEventData < Vector3 > sourcePositionEventData ;
56+ private SourcePoseEventData < Quaternion > sourceRotationEventData ;
57+ private SourcePoseEventData < MixedRealityPose > sourcePoseEventData ;
5458
5559 private FocusEventData focusEventData ;
5660
@@ -180,7 +184,12 @@ private void InitializeInternal()
180184 }
181185
182186 sourceStateEventData = new SourceStateEventData ( EventSystem . current ) ;
183- sourcePoseEventData = new SourcePoseEventData ( EventSystem . current ) ;
187+
188+ sourceTrackingEventData = new SourcePoseEventData < TrackingState > ( EventSystem . current ) ;
189+ sourceVector2EventData = new SourcePoseEventData < Vector2 > ( EventSystem . current ) ;
190+ sourcePositionEventData = new SourcePoseEventData < Vector3 > ( EventSystem . current ) ;
191+ sourceRotationEventData = new SourcePoseEventData < Quaternion > ( EventSystem . current ) ;
192+ sourcePoseEventData = new SourcePoseEventData < MixedRealityPose > ( EventSystem . current ) ;
184193
185194 focusEventData = new FocusEventData ( EventSystem . current ) ;
186195
@@ -570,42 +579,70 @@ public void RaiseSourceLost(IMixedRealityInputSource source, IMixedRealityContro
570579 public void RaiseSourceTrackingStateChanged ( IMixedRealityInputSource source , IMixedRealityController controller , TrackingState state )
571580 {
572581 // Create input event
573- sourcePoseEventData . Initialize ( source , controller , state ) ;
582+ sourceTrackingEventData . Initialize ( source , controller , state ) ;
574583
575584 // Pass handler through HandleEvent to perform modal/fallback logic
576- HandleEvent ( sourcePoseEventData , OnSourcePoseChangedEventHandler ) ;
585+ HandleEvent ( sourceTrackingEventData , OnSourceTrackingChangedEventHandler ) ;
577586 }
578587
588+ private static readonly ExecuteEvents . EventFunction < IMixedRealitySourcePoseHandler > OnSourceTrackingChangedEventHandler =
589+ delegate ( IMixedRealitySourcePoseHandler handler , BaseEventData eventData )
590+ {
591+ var casted = ExecuteEvents . ValidateEventData < SourcePoseEventData < TrackingState > > ( eventData ) ;
592+ handler . OnSourcePoseChanged ( casted ) ;
593+ } ;
594+
579595 /// <inheritdoc />
580596 public void RaiseSourcePositionChanged ( IMixedRealityInputSource source , IMixedRealityController controller , Vector2 position )
581597 {
582598 // Create input event
583- sourcePoseEventData . Initialize ( source , controller , position ) ;
599+ sourceVector2EventData . Initialize ( source , controller , position ) ;
584600
585601 // Pass handler through HandleEvent to perform modal/fallback logic
586- HandleEvent ( sourcePoseEventData , OnSourcePoseChangedEventHandler ) ;
602+ HandleEvent ( sourceVector2EventData , OnSourcePoseVector2ChangedEventHandler ) ;
587603 }
588604
605+ private static readonly ExecuteEvents . EventFunction < IMixedRealitySourcePoseHandler > OnSourcePoseVector2ChangedEventHandler =
606+ delegate ( IMixedRealitySourcePoseHandler handler , BaseEventData eventData )
607+ {
608+ var casted = ExecuteEvents . ValidateEventData < SourcePoseEventData < Vector2 > > ( eventData ) ;
609+ handler . OnSourcePoseChanged ( casted ) ;
610+ } ;
611+
589612 /// <inheritdoc />
590613 public void RaiseSourcePositionChanged ( IMixedRealityInputSource source , IMixedRealityController controller , Vector3 position )
591614 {
592615 // Create input event
593- sourcePoseEventData . Initialize ( source , controller , position ) ;
616+ sourcePositionEventData . Initialize ( source , controller , position ) ;
594617
595618 // Pass handler through HandleEvent to perform modal/fallback logic
596- HandleEvent ( sourcePoseEventData , OnSourcePoseChangedEventHandler ) ;
619+ HandleEvent ( sourcePositionEventData , OnSourcePositionChangedEventHandler ) ;
597620 }
598621
622+ private static readonly ExecuteEvents . EventFunction < IMixedRealitySourcePoseHandler > OnSourcePositionChangedEventHandler =
623+ delegate ( IMixedRealitySourcePoseHandler handler , BaseEventData eventData )
624+ {
625+ var casted = ExecuteEvents . ValidateEventData < SourcePoseEventData < Vector3 > > ( eventData ) ;
626+ handler . OnSourcePoseChanged ( casted ) ;
627+ } ;
628+
599629 /// <inheritdoc />
600630 public void RaiseSourceRotationChanged ( IMixedRealityInputSource source , IMixedRealityController controller , Quaternion rotation )
601631 {
602632 // Create input event
603- sourcePoseEventData . Initialize ( source , controller , rotation ) ;
633+ sourceRotationEventData . Initialize ( source , controller , rotation ) ;
604634
605635 // Pass handler through HandleEvent to perform modal/fallback logic
606- HandleEvent ( sourcePoseEventData , OnSourcePoseChangedEventHandler ) ;
636+ HandleEvent ( sourceRotationEventData , OnSourceRotationChangedEventHandler ) ;
607637 }
608638
639+ private static readonly ExecuteEvents . EventFunction < IMixedRealitySourcePoseHandler > OnSourceRotationChangedEventHandler =
640+ delegate ( IMixedRealitySourcePoseHandler handler , BaseEventData eventData )
641+ {
642+ var casted = ExecuteEvents . ValidateEventData < SourcePoseEventData < Quaternion > > ( eventData ) ;
643+ handler . OnSourcePoseChanged ( casted ) ;
644+ } ;
645+
609646 /// <inheritdoc />
610647 public void RaiseSourcePoseChanged ( IMixedRealityInputSource source , IMixedRealityController controller , MixedRealityPose position )
611648 {
@@ -619,7 +656,7 @@ public void RaiseSourcePoseChanged(IMixedRealityInputSource source, IMixedRealit
619656 private static readonly ExecuteEvents . EventFunction < IMixedRealitySourcePoseHandler > OnSourcePoseChangedEventHandler =
620657 delegate ( IMixedRealitySourcePoseHandler handler , BaseEventData eventData )
621658 {
622- var casted = ExecuteEvents . ValidateEventData < SourcePoseEventData > ( eventData ) ;
659+ var casted = ExecuteEvents . ValidateEventData < SourcePoseEventData < MixedRealityPose > > ( eventData ) ;
623660 handler . OnSourcePoseChanged ( casted ) ;
624661 } ;
625662
0 commit comments