public KinectController() { kinectSensor = KinectSensor.GetDefault(); // open the reader for the body frames bodyReader = kinectSensor.BodyFrameSource.OpenReader(); kinectSensor.Open(); Arm = ArmPointing.Nothing; hasPointed = false; lastAveragePositionLeft = 0f; lastAveragePositionRight = 0f; frameCounterLeft = 0; frameCounterRight = 0; if (!File.Exists(OPT_FILE)) { offsetX = 0; offsetY = 0; } else { string data = File.ReadAllText(OPT_FILE); List <float> offset = JsonConvert.DeserializeObject<List<float>>(data); offsetX = offset[0]; offsetY = offset[1]; } }
public void Reset() { Arm = ArmPointing.Nothing; hasPointed = false; lastAveragePositionLeft = 0f; lastAveragePositionRight = 0f; frameCounterLeft = 0; frameCounterRight = 0; }
public bool checkPointingRight() { bool isPointing = false; if (!hasPointed && nearest.HandRightState != HandState.Closed && nearest.HandRightState != HandState.Open && (ShoulderRight.Position.Z - HandRight.Position.Z) + Math.Abs(ShoulderRight.Position.X - HandRight.Position.X) > ACTIVATION_THRESHOLD) { float averagePosition = (HandRight.Position.X + HandRight.Position.Y) / 2; if (Math.Abs(averagePosition - lastAveragePositionRight) < STILL_THRESHOLD) { frameCounterRight++; } else { frameCounterRight = 0; lastAveragePositionRight = averagePosition; } if (frameCounterRight > COUNTER_THRESHOLD) { isPointing = true; hasPointed = true; Arm = ArmPointing.Right; } } else if ((ShoulderRight.Position.Z - HandRight.Position.Z) + Math.Abs(ShoulderRight.Position.X - HandRight.Position.X) < ACTIVATION_THRESHOLD) { hasPointed = false; frameCounterRight = 0; Arm = ArmPointing.Nothing; } if (frameCounterRight > COUNTER_THRESHOLD) { isPointing = true; Arm = ArmPointing.Right; } return isPointing; }