Kinect.VisualGestureManager.UpdateVisualGestures C# (CSharp) Method

UpdateVisualGestures() private method

private UpdateVisualGestures ( long userId ) : bool
userId long
return bool
        private bool UpdateVisualGestures(long userId)
        {
            if (vgbFrameSource == null || vgbFrameReader == null)
                return false;

            bool wasPaused = vgbFrameReader.IsPaused;
            vgbFrameSource.TrackingId = (ulong)userId;
            vgbFrameReader.IsPaused = (userId == 0);

            if (vgbFrameReader.IsPaused)
            {
                if (!wasPaused)
                {
                    // clear the gesture states
                    foreach (Gesture gesture in vgbFrameSource.Gestures)
                    {
                        if (gestureData.ContainsKey(gesture.Name))
                        {
                            VisualGestureData data = gestureData[gesture.Name];

                            data.userId = 0;
                            data.isComplete = false;
                            data.isResetting = false;
                            data.confidence = 0f;
                            data.progress = 0f;
                            data.timestamp = Time.realtimeSinceStartup;

                            gestureData[gesture.Name] = data;
                        }
                    }
                }

                return false;
            }

            VisualGestureBuilderFrame frame = vgbFrameReader.CalculateAndAcquireLatestFrame();

            if (frame != null)
            {
                Dictionary<Gesture, DiscreteGestureResult> discreteResults = frame.DiscreteGestureResults;
                Dictionary<Gesture, ContinuousGestureResult> continuousResults = frame.ContinuousGestureResults;

                if (discreteResults != null)
                {
                    foreach (Gesture gesture in discreteResults.Keys)
                    {
                        if (gesture.GestureType == GestureType.Discrete && gestureData.ContainsKey(gesture.Name))
                        {
                            DiscreteGestureResult result = discreteResults[gesture];
                            VisualGestureData data = gestureData[gesture.Name];

                            data.userId = vgbFrameSource.IsTrackingIdValid ? (long)vgbFrameSource.TrackingId : 0;
                            data.isComplete = result.Detected;
                            data.confidence = result.Confidence;
                            data.timestamp = Time.realtimeSinceStartup;

                            //Debug.Log(string.Format ("{0} - {1}, confidence: {2:F0}%", data.gestureName, data.isComplete ? "Yes" : "No", data.confidence * 100f));

                            if (data.isResetting && !data.isComplete)
                            {
                                data.isResetting = false;
                            }

                            gestureData[gesture.Name] = data;
                        }
                    }
                }

                if (continuousResults != null)
                {
                    foreach (Gesture gesture in continuousResults.Keys)
                    {
                        if (gesture.GestureType == GestureType.Continuous && gestureData.ContainsKey(gesture.Name))
                        {
                            ContinuousGestureResult result = continuousResults[gesture];
                            VisualGestureData data = gestureData[gesture.Name];

                            data.userId = vgbFrameSource.IsTrackingIdValid ? (long)vgbFrameSource.TrackingId : 0;
                            data.progress = result.Progress;
                            data.timestamp = Time.realtimeSinceStartup;

                            gestureData[gesture.Name] = data;
                        }
                    }
                }

                frame.Dispose();
                frame = null;
            }

            return true;
        }