public TurnAroundTracker(int times, float angleTolerance) { m_turnAroundTimes = times; m_angleTolerance = angleTolerance; m_first = true; m_turningAngle = TurnAroundTracker.TurningAngle.Zero; m_prevTurningAngle = TurnAroundTracker.TurningAngle.Zero; }
protected void TrackGesture() { Vector3 rightShoulderPos = NIConvertCoordinates.ConvertPos(m_jointRightShoulder.Position); Vector3 leftShoulderPos = NIConvertCoordinates.ConvertPos(m_jointLeftShoulder.Position); // shoulders Vector3 shouldersVect = rightShoulderPos - leftShoulderPos; if(m_first) { m_first = false; m_baseVector = shouldersVect; // take the vector at the begining for future measurement. return; } float turnedAngle = Vector3.Angle(shouldersVect.normalized, m_baseVector.normalized); if(Mathf.Abs(turnedAngle) < m_angleTolerance) { if(m_prevTurningAngle == TurnAroundTracker.TurningAngle.Third) m_turningAngle = TurnAroundTracker.TurningAngle.Full; else m_turningAngle = TurnAroundTracker.TurningAngle.Zero; } if((90 - Mathf.Abs(turnedAngle)) < m_angleTolerance) { if(m_prevTurningAngle == TurnAroundTracker.TurningAngle.Zero) { m_turningAngle = TurnAroundTracker.TurningAngle.Quater; if(m_jointRightShoulder.Position.Z > m_jointLeftShoulder.Position.Z) m_ccDir = true; else m_ccDir = false; } if(m_prevTurningAngle == TurnAroundTracker.TurningAngle.Half) { if(m_jointRightShoulder.Position.Z > m_jointLeftShoulder.Position.Z) { if(m_ccDir) m_turningAngle = TurnAroundTracker.TurningAngle.Quater; else m_turningAngle = TurnAroundTracker.TurningAngle.Third; } else { if(m_ccDir) m_turningAngle = TurnAroundTracker.TurningAngle.Third; else m_turningAngle = TurnAroundTracker.TurningAngle.Quater; } } } if(180 - Mathf.Abs(turnedAngle) < m_angleTolerance) { m_turningAngle = TurnAroundTracker.TurningAngle.Half; } m_prevTurningAngle = m_turningAngle; //Debug.Log("angle = " + turnedAngle + "state= " + m_turningAngle); }