void HandleDisplayOverlays(KinectManager manager, JointPositions positions) { if (DisplayOverlays) { if (!_displayState) { foreach (var overlay in Overlays) { overlay.SetActive(true); } _displayState = true; } if (positions.AreAllNonZero(Overlays.GetOverlayedJoints())) { foreach (var overlay in Overlays) { Overlays.Position(manager, positions, overlay, SmoothFactor); } } } else if (_displayState) { foreach (var overlay in Overlays) { overlay.SetActive(false); } _displayState = false; } }
// Update is called once per frame void Update() { var manager = KinectManager.Instance; if (!manager || !manager.IsInitialized() || !manager.IsUserDetected()) { return; } var userId = manager.GetPlayer1ID(); if (userId <= 0) { return; } var positions = new JointPositions(manager, userId); var gesturesDetected = new List <IGesture>(); foreach (var gestureTracker in _gestureTrackers.Where(gestureTracker => gestureTracker != null && gestureTracker.Update(positions))) { gesturesDetected.Add(gestureTracker); if (GestureDetected != null) { GestureDetected(userId, gestureTracker); } } HandleDisplayOverlays(manager, positions); if (_logger != null && (LogMode == LogModes.EachFrame || (LogMode == LogModes.GesturesOnly && gesturesDetected.Count > 0))) { _logger.Log(positions, userId, gesturesDetected); } }
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) { var newState = JumpGestureState.Create(positions); if (newState != null) { _states.Enqueue(newState); } while (_states.Count > 0 && (Time.time - _states.Peek().StartTime > MaxGestureTime || _states.Peek().Complete)) { _states.Dequeue(); } if (_states.Any(state => state.Update(positions))) { _states.Clear(); Count++; return(true); } return(false); }
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); }