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