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 }); }
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 }); }
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); }
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); }