/// used for updating every frame /// @note While we are still steady (i.e. we haven't gotten a "not steady" event) we update /// the time and frame every frame! public override void UpdateFrame() { if (m_context == null || m_context.UserSkeletonValid == false) { return; // no data; } NISkeletonTracker tracker = m_pointTracker as NISkeletonTracker; if (tracker.Valid == false) { return; // no one to track. } NISelectedPlayer player = tracker.GetTrackedPlayer(); if (player == null || player.Valid == false) { return; } NIUserAndSkeleton.NIPoseDetectionStateStatus curStatus = new NIUserAndSkeleton.NIPoseDetectionStateStatus(); if (m_context.UserGenrator.GetPoseStatus(player.OpenNIUserID, m_poseName, ref curStatus) == false) { return; // we do not have good pose information } if (curStatus.m_eState != PoseDetectionState.InPose) { return; } if (curStatus.m_timePoseHeld >= m_timeToHoldPose) { InternalFireDetectEvent(); } }
/// This is true if the gesture is in the middle of doing (i.e. it has detected but not gone out of the gesture). /// for our purposes this means the steady event has occurred and the unsteady has not occurred yet /// @return a value between 0 and 1. 0 means no pose, 1 means the pose has been detected and held /// for a while. a value in the middle means the pose has been detected and has been held this /// portion of the time required to fire the trigger (@ref m_timeToHoldPose). public override float GestureInProgress() { if(m_context==null || m_context.UserSkeletonValid==false) return 0.0f; // no data; NISkeletonTracker tracker = m_pointTracker as NISkeletonTracker; if(tracker.Valid == false) return 0.0f; // no one to track. NISelectedPlayer player = tracker.GetTrackedPlayer(); if(player==null || player.Valid==false) return 0.0f; NIUserAndSkeleton.NIPoseDetectionStateStatus curStatus = new NIUserAndSkeleton.NIPoseDetectionStateStatus(); if (m_context.UserGenrator.GetPoseStatus(player.OpenNIUserID, m_poseName, ref curStatus) == false) return 0.0f; // we do not have good pose information if (curStatus.m_eState != PoseDetectionState.InPose) return 0.0f; if (curStatus.m_timePoseHeld < 0) return 0.0f; if (curStatus.m_timePoseHeld >= m_timeToHoldPose) return 1.0f; return curStatus.m_timePoseHeld / m_timeToHoldPose; }
/// This is true if the gesture is in the middle of doing (i.e. it has detected but not gone out of the gesture). /// for our purposes this means the steady event has occurred and the unsteady has not occurred yet /// @return a value between 0 and 1. 0 means no pose, 1 means the pose has been detected and held /// for a while. a value in the middle means the pose has been detected and has been held this /// portion of the time required to fire the trigger (@ref m_timeToHoldPose). public override float GestureInProgress() { if (m_context == null || m_context.UserSkeletonValid == false) { return(0.0f); // no data; } NISkeletonTracker tracker = m_pointTracker as NISkeletonTracker; if (tracker.Valid == false) { return(0.0f); // no one to track. } NISelectedPlayer player = tracker.GetTrackedPlayer(); if (player == null || player.Valid == false) { return(0.0f); } NIUserAndSkeleton.NIPoseDetectionStateStatus curStatus = new NIUserAndSkeleton.NIPoseDetectionStateStatus(); if (m_context.UserGenrator.GetPoseStatus(player.OpenNIUserID, m_poseName, ref curStatus) == false) { return(0.0f); // we do not have good pose information } if (curStatus.m_eState != PoseDetectionState.InPose) { return(0.0f); } if (curStatus.m_timePoseHeld < 0) { return(0.0f); } if (curStatus.m_timePoseHeld >= m_timeToHoldPose) { return(1.0f); } return(curStatus.m_timePoseHeld / m_timeToHoldPose); }
/// used for updating every frame /// @note While we are still steady (i.e. we haven't gotten a "not steady" event) we update /// the time and frame every frame! public override void UpdateFrame() { if (m_context == null || m_context.UserSkeletonValid == false) return; // no data; NISkeletonTracker tracker = m_pointTracker as NISkeletonTracker; if (tracker.Valid == false) return; // no one to track. NISelectedPlayer player = tracker.GetTrackedPlayer(); if (player == null || player.Valid == false) return; NIUserAndSkeleton.NIPoseDetectionStateStatus curStatus = new NIUserAndSkeleton.NIPoseDetectionStateStatus(); if (m_context.UserGenrator.GetPoseStatus(player.OpenNIUserID, m_poseName, ref curStatus) == false) return; // we do not have good pose information if (curStatus.m_eState != PoseDetectionState.InPose) return; if (curStatus.m_timePoseHeld >= m_timeToHoldPose) InternalFireDetectEvent(); }