Example #1
0
        public static SquatGestureState Create(JointPositions positions)
        {
            positions.InitIfNotSet(UsedJoints);
            if (-0.45f > positions[Joints.LeftKnee].y || positions[Joints.LeftKnee].y > -0.25f)
            {
                return(null);
            }
            if (-0.45f > positions[Joints.RightKnee].y || positions[Joints.RightKnee].y > -0.25f)
            {
                return(null);
            }
            if (-0.15f > positions[Joints.LeftHip].y || positions[Joints.LeftHip].y > 0.15f)
            {
                return(null);
            }
            if (-0.15f > positions[Joints.RightHip].y || positions[Joints.RightHip].y > 0.15f)
            {
                return(null);
            }

            return(new SquatGestureState {
                StartTime = Time.time,
                StartPositions = positions
            });
        }
Example #2
0
        public static DoubleClapGestureState Create(JointPositions positions)
        {
            positions.InitIfNotSet(UsedJoints);
            if (Mathf.Abs(positions[Joints.LeftHand].x - positions[Joints.RightHand].x) < 0.2f)
            {
                return(null);
            }
            if (Mathf.Abs(positions[Joints.LeftHand].y - positions[Joints.RightHand].y) > 0.05f)
            {
                return(null);
            }

            return(new DoubleClapGestureState {
                StartTime = Time.time,
                StartPositions = positions
            });
        }
Example #3
0
        public bool Update(JointPositions positions)
        {
            if (Complete)
            {
                return(Complete);
            }
            positions.InitIfNotSet(UsedJoints);
            if (!positions.AreAllNonZero(UsedJoints))
            {
                return(false);
            }

            if (!Ducked)
            {
                if (positions[Joints.LeftKnee].y < StartPositions[Joints.LeftKnee].y &&
                    Mathf.Abs(positions[Joints.LeftKnee].y - StartPositions[Joints.LeftKnee].y) >= 0.10f &&
                    positions[Joints.RightKnee].y < StartPositions[Joints.RightKnee].y &&
                    Mathf.Abs(positions[Joints.RightKnee].y - StartPositions[Joints.RightKnee].y) >= 0.10f &&
                    positions[Joints.LeftHip].y < StartPositions[Joints.LeftHip].y &&
                    Mathf.Abs(positions[Joints.LeftHip].y - StartPositions[Joints.LeftHip].y) >= 0.30f &&
                    positions[Joints.RightHip].y < StartPositions[Joints.RightHip].y &&
                    Mathf.Abs(positions[Joints.RightHip].y - StartPositions[Joints.RightHip].y) >= 0.30f
                    )
                {
                    DuckedTime      = Time.time;
                    DuckedPositions = positions;
                }
            }
            else
            {
                if (positions[Joints.LeftKnee].y > DuckedPositions[Joints.LeftKnee].y &&
                    Mathf.Abs(positions[Joints.LeftKnee].y - StartPositions[Joints.LeftKnee].y) < 0.05f &&
                    positions[Joints.RightKnee].y > DuckedPositions[Joints.RightKnee].y &&
                    Mathf.Abs(positions[Joints.RightKnee].y - StartPositions[Joints.RightKnee].y) < 0.05f &&
                    positions[Joints.LeftHip].y > DuckedPositions[Joints.LeftHip].y &&
                    Mathf.Abs(positions[Joints.LeftHip].y - StartPositions[Joints.LeftHip].y) < 0.05f &&
                    positions[Joints.RightHip].y > DuckedPositions[Joints.RightHip].y &&
                    Mathf.Abs(positions[Joints.RightHip].y - StartPositions[Joints.RightHip].y) < 0.05f
                    )
                {
                    Complete = true;
                }
            }
            return(Complete);
        }
Example #4
0
        public bool Update(JointPositions positions)
        {
            if (_skip || Complete)
            {
                return(Complete);
            }
            positions.InitIfNotSet(UsedJoints);
            if (!positions.AreAllNonZero(UsedJoints))
            {
                return(false);
            }

            var leftRightDist = Mathf.Abs(positions[Joints.LeftHand].x - positions[Joints.RightHand].x);

            if (!_handsClosed)
            {
                if (leftRightDist > 0.1f && positions[Joints.RightHand].x < positions[Joints.LeftHand].x)
                {
                    _skip = true;
                    return(false);
                }

                if (leftRightDist < 0.05f && Mathf.Abs(positions[Joints.LeftHand].y - positions[Joints.RightHand].y) < 0.05f)
                {
                    _handsClosed = true;
                    if (++_claps > 1)
                    {
                        Complete = true;
                    }
                }
            }
            else if (leftRightDist > 0.2f)
            {
                _handsClosed = false;
            }

            return(Complete);
        }