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); }
public CodeBlock(Gesture gesture, string gestureName) { Gesture = gesture; _gestureName = gestureName; }