Esempio n. 1
0
 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;
     }
 }
Esempio n. 2
0
    // 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);
        }
    }
Esempio n. 3
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
            });
        }
Esempio n. 4
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
            });
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
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);
        }