Example #1
0
        private void TrackClosestSkeleton(Skeleton[] skeletons)
        {
            int closestID = 0;

            if (this.sensor != null && this.sensor.SkeletonStream != null)
            {
                if (!this.sensor.SkeletonStream.AppChoosesSkeletons)
                {
                    this.sensor.SkeletonStream.AppChoosesSkeletons = true; // Ensure AppChoosesSkeletons is set
                }

                float    closestDistance = 10000f; // Start with a far enough distance
                Skeleton closestSkeleton = null;

                foreach (Skeleton skeleton in skeletons.Where(s => s.TrackingState != SkeletonTrackingState.NotTracked))
                {
                    if (skeleton.Position.Z < closestDistance)
                    {
                        closestID       = skeleton.TrackingId;
                        closestDistance = skeleton.Position.Z;
                        closestSkeleton = skeleton;
                    }
                }

                if (closestID > 0)
                {
                    if (currentSkeleton == null || currentSkeleton.TrackingId != closestSkeleton.TrackingId)
                    {
                        startDelayTimer.Restart();
                        leftHandChecker.Initialize(closestSkeleton);
                        rightHandChecker.Initialize(closestSkeleton);
                    }
                    this.currentSkeleton = closestSkeleton;
                    this.sensor.SkeletonStream.ChooseSkeletons(closestID); // Track this skeleton
                }
                else
                {
                    this.currentSkeleton = null;
                    if (kinectStrategy != null)
                    {
                        kinectStrategy.CurrentAcceleration = Vector2.Zero;
                    }
                }
            }
        }