/// <summary> /// Processes a skeleton frame from the Kinect controller /// </summary> /// <param name="frame">The skeleton frame to process</param> public void ProcessSkeleton(SkeletonData skeleton) { if (activeGesture != null) { if (activeGesture.IsComplete(skeleton)) { if (GestureCompleted != null) { GestureCompleted.Invoke(this, new GestureEventArgs(activeGesture)); } activeGesture.Deactivate(); activeGesture = null; } else if (activeGesture.IsOut(skeleton)) { if (GestureLeft != null) { GestureLeft.Invoke(this, new GestureEventArgs(activeGesture)); } activeGesture.Deactivate(); activeGesture = null; } } if (activeGesture == null) { double maxScore = 0; IGesture maxGesture = null; foreach (IGesture gesture in gestures) { double score = gesture.GetTriggerScore(skeleton); if (score > Math.Max(maxScore, THRESHOLD)) { maxScore = score; maxGesture = gesture; } } if (maxGesture != null) { activeGesture = maxGesture; if (GestureStarted != null) { GestureStarted.Invoke(this, new GestureEventArgs(activeGesture)); } activeGesture.Activate(); } } }