public UserInfo(string authorizationCode, string userId, string email, string displayName, string idToken, UserDetectionStatus userDetectionStatus) { this.authorizationCode = authorizationCode; this.userId = userId; this.email = email; this.displayName = displayName; this.idToken = idToken; this.userDetectionStatus = userDetectionStatus; }
public UserDetectionStatusChangeEventArgs(UserDetectionStatus userDetectionStatus) { this.userDetectionStatus = userDetectionStatus; }
private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { Skeleton[] skeletons = new Skeleton[0]; // Retreiving skeletons from event args using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame != null) { skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); } } // Initializing joints (wrist, hip and shoulder for each side) Joint rightWrist = new Joint(), rightShoulder = new Joint(), rightHip = new Joint(), leftWrist = new Joint(), leftShoulder = new Joint(), leftHip = new Joint(); // Seaching for joints int counter = -1; // Minus one is when we don't have any valid skeleton foreach (Skeleton s in skeletons) { // Getting the first tracked skeleton from skeletons list if (s.TrackingState == SkeletonTrackingState.Tracked) { counter = 0; // Between 0 and 6 excluded is when the skeleton is incomplete // Trying to get the 6 joints we want (wrist, hip and shoulder for each side) foreach (Joint j in s.Joints) { // We only get the data if it is flagged as "tracked" if (j.TrackingState == JointTrackingState.Tracked) { switch (j.JointType) { case JointType.WristRight: rightWrist = j; counter++; break; case JointType.ShoulderRight: rightShoulder = j; counter++; break; case JointType.HipRight: rightHip = j; counter++; break; case JointType.WristLeft: leftWrist = j; counter++; break; case JointType.ShoulderLeft: leftShoulder = j; counter++; break; case JointType.HipLeft: leftHip = j; counter++; break; } } } break; } } // If we managed to get the 6 joints we wanted, we continue calculation if (counter == 6) { // Getting angles in radian from joints (inverting left angle because it will be negative double rightSideAngleRadian = AngleFromSkeletonPoints(rightHip.Position, rightShoulder.Position, rightWrist.Position); double leftSideAngleRadian = AngleFromSkeletonPoints(leftWrist.Position, leftShoulder.Position, leftHip.Position); // Converting to degrees (simplier to work with) double rightSideAngleDegree = 180.0d * (rightSideAngleRadian) / System.Math.PI; double leftSideAngleDegree = 180.0d * (leftSideAngleRadian) / System.Math.PI; double invertedRightSideAngleDegree = 180 - rightSideAngleDegree; double invertedLeftSideAngleDegree = 180 - leftSideAngleDegree; // Triggering NewControlDataIsReady event if (NewControlDataIsReady != null) { NewControlDataIsReady(this, new ControlDataReadyEventArgs(PowerFromAngle(invertedRightSideAngleDegree), PowerFromAngle(invertedLeftSideAngleDegree))); } // Triggering UserDetectionStatusChanged if currentUserDetectionStatus changed if (currentUserDetectionStatus!=UserDetectionStatus.Detected) { currentUserDetectionStatus = UserDetectionStatus.Detected; if (UserDetectionStatusChanged != null) { UserDetectionStatusChanged(this, new UserDetectionStatusChangeEventArgs(UserDetectionStatus.Detected)); } } } else if (counter > 0) // Skeleton is incomplete { // Triggering UserDetectionStatusChanged if currentUserDetectionStatus changed if (currentUserDetectionStatus != UserDetectionStatus.PartiallyDetected) { currentUserDetectionStatus = UserDetectionStatus.PartiallyDetected; if (UserDetectionStatusChanged != null) { UserDetectionStatusChanged(this, new UserDetectionStatusChangeEventArgs(UserDetectionStatus.PartiallyDetected)); } } } else // No skeleton at all { // Triggering UserDetectionStatusChanged if currentUserDetectionStatus changed if (currentUserDetectionStatus != UserDetectionStatus.NotDetected) { currentUserDetectionStatus = UserDetectionStatus.NotDetected; if (UserDetectionStatusChanged != null) { UserDetectionStatusChanged(this, new UserDetectionStatusChangeEventArgs(UserDetectionStatus.NotDetected)); } } } }