/// <summary> /// Resets all state to the initial state, with no users remembered as engaged or tracked. /// </summary> public void Reset() { using (var section = new EventQueueSection()) { activityMeter.Clear(); TrackedUserTrackingIds.Clear(); PrimaryUserTrackingId = InvalidUserTrackingId; SetCandidateUserTrackingId(InvalidUserTrackingId, section); SetEngagedUserTrackingId(InvalidUserTrackingId, section); SendTrackedUsersChanged(section); } }
/// <summary> /// Called whenever the set of tracked hand pointers has changed. /// </summary> /// <param name="trackedHandPointers"> /// Hand pointers from which we'll update the set of tracked users and the primary user. /// </param> public void UpdateHandPointers(IEnumerable <HandPointer> trackedHandPointers) { bool foundEngagedUser = false; bool foundCandidateUser = false; int primaryUserTrackingId = InvalidUserTrackingId; using (var section = new EventQueueSection()) { TrackedUserTrackingIds.Clear(); foreach (HandPointer handPointer in trackedHandPointers) { if (handPointer.IsTracked && (handPointer.TrackingId != InvalidUserTrackingId)) { // Only consider valid user tracking ids TrackedUserTrackingIds.Add(handPointer.TrackingId); if (EngagedUserTrackingId == handPointer.TrackingId) { foundEngagedUser = true; } if (CandidateUserTrackingId == handPointer.TrackingId) { foundCandidateUser = true; } if (handPointer.IsPrimaryUser) { primaryUserTrackingId = handPointer.TrackingId; } } } SendTrackedUsersChanged(section); // If engaged user was not found in list of candidate users, engaged user has become invalid. if (!foundEngagedUser) { SetEngagedUserTrackingId(InvalidUserTrackingId, section); } // If candidate user was not found in list of candidate users, candidate user has become invalid. if (!foundCandidateUser) { SetCandidateUserTrackingId(InvalidUserTrackingId, section); } SetPrimaryUserTrackingId(primaryUserTrackingId, section); } }