11// Copyright (c) Mixed Reality Toolkit Contributors
22// Licensed under the BSD 3-Clause
33
4- using MixedReality . Toolkit . Subsystems ;
54using System . Collections . Generic ;
65using System . Linq ;
76using Unity . Profiling ;
@@ -251,16 +250,13 @@ public Transform TransformTarget
251250 }
252251 }
253252
254- // Stores currently attached hand if valid (only possible values Left, Right, or None)
255- private Handedness currentTrackedHandedness = Handedness . None ;
256-
257253 /// <summary>
258254 /// Currently tracked hand or motion controller, if applicable.
259255 /// </summary>
260256 /// <remarks>
261- /// The allowable <see cref="Handedness"/> values are Left, Right, or None
257+ /// The allowable <see cref="Handedness"/> values are Left, Right, or None.
262258 /// </remarks>
263- public Handedness CurrentTrackedHandedness => currentTrackedHandedness ;
259+ public Handedness CurrentTrackedHandedness { get ; private set ; } = Handedness . None ;
264260
265261 // Stores controller side to favor if TrackedHandedness is set to both left and right.
266262 private Handedness preferredTrackedHandedness = Handedness . Left ;
@@ -424,7 +420,7 @@ internal void UnregisterSolver(Solver solver)
424420 }
425421
426422 /// <summary>
427- /// Clear the parent of the internally created tracking-target game object.
423+ /// Clear the parent of the internally created tracking-target game object.
428424 /// </summary>
429425 /// <remarks>
430426 /// A tracking-target is created when <see cref="AttachToNewTrackedObject"/> is called, and
@@ -452,7 +448,7 @@ protected virtual void AttachToNewTrackedObject()
452448 {
453449 using ( AttachToNewTrackedObjectPerfMarker . Auto ( ) )
454450 {
455- currentTrackedHandedness = Handedness . None ;
451+ CurrentTrackedHandedness = Handedness . None ;
456452 controllerInteractor = null ;
457453
458454 Transform target = null ;
@@ -462,54 +458,52 @@ protected virtual void AttachToNewTrackedObject()
462458 }
463459 else if ( TrackedTargetType == TrackedObjectType . ControllerRay )
464460 {
465- currentTrackedHandedness = TrackedHandedness ;
466- if ( ( currentTrackedHandedness & Handedness . Both ) == Handedness . Both )
461+ CurrentTrackedHandedness = TrackedHandedness ;
462+ if ( ( CurrentTrackedHandedness & Handedness . Both ) == Handedness . Both )
467463 {
468- currentTrackedHandedness = PreferredTrackedHandedness ;
469- controllerInteractor = GetControllerInteractor ( currentTrackedHandedness ) ;
464+ CurrentTrackedHandedness = PreferredTrackedHandedness ;
465+ controllerInteractor = GetControllerInteractor ( CurrentTrackedHandedness ) ;
470466
471467 if ( controllerInteractor == null || ! controllerInteractor . isHoverActive )
472468 {
473469 // If no interactor found, try again on the opposite hand
474- currentTrackedHandedness = currentTrackedHandedness . GetOppositeHandedness ( ) ;
475- controllerInteractor = GetControllerInteractor ( currentTrackedHandedness ) ;
470+ CurrentTrackedHandedness = PreferredTrackedHandedness . GetOppositeHandedness ( ) ;
471+ controllerInteractor = GetControllerInteractor ( CurrentTrackedHandedness ) ;
476472 }
477473 }
478474 else
479475 {
480- controllerInteractor = GetControllerInteractor ( currentTrackedHandedness ) ;
476+ controllerInteractor = GetControllerInteractor ( CurrentTrackedHandedness ) ;
481477 }
482478
483- if ( controllerInteractor != null )
479+ if ( controllerInteractor != null && controllerInteractor . isHoverActive )
484480 {
485481 target = controllerInteractor . transform ;
486482 }
487483 else
488484 {
489- currentTrackedHandedness = Handedness . None ;
485+ CurrentTrackedHandedness = Handedness . None ;
490486 }
491487 }
492488 else if ( TrackedTargetType == TrackedObjectType . HandJoint )
493489 {
494490 if ( XRSubsystemHelpers . HandsAggregator != null )
495491 {
496- currentTrackedHandedness = TrackedHandedness ;
497- if ( ( currentTrackedHandedness & Handedness . Both ) == Handedness . Both )
492+ CurrentTrackedHandedness = TrackedHandedness ;
493+ if ( ( CurrentTrackedHandedness & Handedness . Both ) == Handedness . Both )
498494 {
499- if ( IsHandTracked ( PreferredTrackedHandedness ) )
500- {
501- currentTrackedHandedness = PreferredTrackedHandedness ;
502- }
503- else if ( IsHandTracked ( PreferredTrackedHandedness . GetOppositeHandedness ( ) ) )
504- {
505- currentTrackedHandedness = PreferredTrackedHandedness . GetOppositeHandedness ( ) ;
506- }
507- else
495+ CurrentTrackedHandedness = PreferredTrackedHandedness ;
496+ if ( ! IsHandTracked ( CurrentTrackedHandedness ) )
508497 {
509- currentTrackedHandedness = Handedness . None ;
498+ CurrentTrackedHandedness = PreferredTrackedHandedness . GetOppositeHandedness ( ) ;
510499 }
511500 }
512501
502+ if ( ! IsHandTracked ( CurrentTrackedHandedness ) )
503+ {
504+ CurrentTrackedHandedness = Handedness . None ;
505+ }
506+
513507 if ( UpdateCachedHandJointTransform ( ) )
514508 {
515509 target = cachedHandJointTransform ;
@@ -518,7 +512,7 @@ protected virtual void AttachToNewTrackedObject()
518512 }
519513 else if ( TrackedTargetType == TrackedObjectType . CustomOverride )
520514 {
521- target = this . transformOverride ;
515+ target = transformOverride ;
522516 }
523517
524518 TrackTransform ( target ) ;
@@ -529,7 +523,7 @@ protected virtual void AttachToNewTrackedObject()
529523 new ProfilerMarker ( "[MRTK] SolverHandler.UpdateCachedHandJointTransform" ) ;
530524
531525 /// <summary>
532- /// Update the cached transform's position to match that of the current track joint.
526+ /// Update the cached transform's position to match that of the current track joint.
533527 /// </summary>
534528 /// <returns>
535529 /// <see langword="true"/> if the tracked joint is found and cached transform is updated, <see langword="false"/> otherwise.
@@ -539,7 +533,7 @@ private bool UpdateCachedHandJointTransform()
539533 bool updated = false ;
540534 using ( UpdateCachedHandJointTransformPerfMarker . Auto ( ) )
541535 {
542- XRNode ? handNode = currentTrackedHandedness . ToXRNode ( ) ;
536+ XRNode ? handNode = CurrentTrackedHandedness . ToXRNode ( ) ;
543537
544538 if ( handNode . HasValue &&
545539 XRSubsystemHelpers . HandsAggregator != null &&
@@ -571,7 +565,6 @@ private void TrackTransform(Transform target)
571565 trackingTarget . transform . localPosition = Vector3 . Scale ( AdditionalOffset , trackingTarget . transform . localScale ) ;
572566 trackingTarget . transform . localRotation = Quaternion . Euler ( AdditionalRotation ) ;
573567 }
574-
575568 }
576569
577570 /// <summary>
@@ -613,10 +606,10 @@ private bool IsInvalidTracking()
613606 }
614607
615608 // If we were tracking a particular hand, check that our transform is still valid
616- if ( TrackedTargetType == TrackedObjectType . HandJoint && currentTrackedHandedness != Handedness . None )
609+ if ( TrackedTargetType == TrackedObjectType . HandJoint && CurrentTrackedHandedness != Handedness . None )
617610 {
618- bool trackingLeft = currentTrackedHandedness . IsMatch ( Handedness . Left ) && IsHandTracked ( Handedness . Left ) ;
619- bool trackingRight = currentTrackedHandedness . IsMatch ( Handedness . Right ) && IsHandTracked ( Handedness . Right ) ;
611+ bool trackingLeft = CurrentTrackedHandedness . IsMatch ( Handedness . Left ) && IsHandTracked ( Handedness . Left ) ;
612+ bool trackingRight = CurrentTrackedHandedness . IsMatch ( Handedness . Right ) && IsHandTracked ( Handedness . Right ) ;
620613 return ! trackingLeft && ! trackingRight ;
621614 }
622615
@@ -630,14 +623,14 @@ private bool IsInvalidTracking()
630623 /// <returns>
631624 /// <see langword="true"/> if the hand is tracked, or <see langword="false"/>.
632625 /// </returns>
633- public static bool IsHandTracked ( Handedness hand )
626+ private static bool IsHandTracked ( Handedness hand )
634627 {
635628 // Early out if the hand isn't a valid XRNode
636629 // (i.e., Handedness.None or Handedness.Both)
637630 XRNode ? node = hand . ToXRNode ( ) ;
638- if ( ! node . HasValue ) { return false ; }
639- return XRSubsystemHelpers . HandsAggregator != null &&
640- XRSubsystemHelpers . HandsAggregator . TryGetJoint ( TrackedHandJoint . Palm , node . Value , out HandJointPose pose ) ;
631+ return node . HasValue &&
632+ XRSubsystemHelpers . HandsAggregator != null &&
633+ XRSubsystemHelpers . HandsAggregator . TryGetJoint ( TrackedHandJoint . Palm , node . Value , out _ ) ;
641634 }
642635
643636 /// <summary>
0 commit comments