Exemple #1
0
        public bool DetectGesture(Gesture gesture)
        {
            float precision;

            if (gesture.PosePrecision == 100)
            {
                precision = 0.2f;
            }
            else
            {
                precision = 0.2f * ((100 - gesture.PosePrecision) / 100);
            }

            if (gesture.RootTransformPosition != Vector3.zero)
            {
                Vector3 position = GestureObject.Skeleton.GetRootTransformRelativePosition(GestureObject.TrackThisInRelationTo);

                if (Vector3.Distance((Vector3)gesture.RootTransformPosition, position) > precision)
                {
                    return(false);
                }
            }

            if (gesture.RootTransformDirection != PoseDirection.Undefined)
            {
                if (gesture.RootTransformDirection != GestureObject.Skeleton.GetRootTransformPoseDirection(GestureObject.TrackThisInRelationTo))
                {
                    return(false);
                }
            }

            if (gesture.PreciseRootTransformDirection != Vector3.zero)
            {
                Vector3 position = GestureObject.Skeleton.GetRootTransformVector3Direction(GestureObject.TrackThisInRelationTo);

                if (Vector3.Distance((Vector3)gesture.PreciseRootTransformDirection, position) > precision)
                {
                    return(false);
                }
            }

            if (gesture.RootTransformOrientation != PoseDirection.Undefined)
            {
                if (gesture.RootTransformOrientation != GestureObject.Skeleton.GetRootTransformPoseOrientation(GestureObject.TrackThisInRelationTo))
                {
                    return(false);
                }
            }

            if (gesture.PreciseRootTransformOrientation != Vector3.zero)
            {
                Vector3 position = GestureObject.Skeleton.GetRootTransformVector3Orientation(GestureObject.TrackThisInRelationTo);

                if (Vector3.Distance((Vector3)gesture.PreciseRootTransformOrientation, position) > precision)
                {
                    return(false);
                }
            }

            foreach (var bone in gesture.TrackedBonePositions)
            {
                if (bone.Value != Vector3.zero)
                {
                    var position = GestureObject.Skeleton.GetRelativeBonePosition(bone.Key);

                    if (Vector3.Distance((Vector3)gesture.TrackedBonePositions[bone.Key], position) > precision)
                    {
                        return(false);
                    }
                }
            }

            foreach (var bone in gesture.TrackedBoneDistances)
            {
                if (bone.Value != 0)
                {
                    var distance = GestureObject.Skeleton.GetRelativeBoneDistance(bone.Key);

                    if ((gesture.TrackedBoneDistances[bone.Key] - distance) > 0.003)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemple #2
0
 public CodeBlock(Gesture gesture, string gestureName)
 {
     Gesture      = gesture;
     _gestureName = gestureName;
 }