Example #1
0
    void UpdatePerFinger()
    {
        for (int i = 0; i < TouchManager.Instance.MaxFingers && i < MaxSimultaneousGestures; ++i)
        {
            TouchManager.Finger finger = TouchManager.GetFinger(i);
            T gesture = gestures[i];
            TouchManager.FingerList touches = tempTouchList;
            touches.Clear();

            if (finger.IsDown)
            {
                touches.Add(finger);
            }
            if (gesture.State == GestureRecognitionState.Ready)
            {
                if (CanBegin(gesture, touches))
                {
                    Begin(gesture, 0, touches);
                }
            }
            UpdateGesture(gesture, touches);
            if ("OnEasyGesture" == gesture.Recognizer.EventMessageName)
            {
                if (touches.Count <= 0)
                {
                    Reset(gesture, false);
                }
            }
        }
    }
Example #2
0
    void TraceFingers()
    {
        if (m_JoystickOperation)
        {
            return;
        }

#if UNITY_EDITOR
        // Zoom Camera and keep the distance between [minDistance, maxDistance].
        float mw = Input.GetAxis("Mouse ScrollWheel");
        if (mw > 0)
        {
            m_CurDistance -= Time.deltaTime * m_ZoomSpeed;
            if (m_CurDistance < m_MinDistance)
            {
                m_CurDistance = m_MinDistance;
            }
        }
        else if (mw < 0)
        {
            m_CurDistance += Time.deltaTime * m_ZoomSpeed;
            if (m_CurDistance > m_MaxDistance)
            {
                m_CurDistance = m_MaxDistance;
            }
        }
#endif

        TouchManager.FingerList touches = (TouchManager.FingerList)TouchManager.Touches;

        if (touches.Count == 1 && !m_InWatchMode)
        {
            if (m_Finger1 == null)
            {
                m_Finger1 = touches[0];
            }

            float xDistance   = m_Finger1.DeltaPosition.x;
            float yDistance   = m_Finger1.DeltaPosition.y;
            float xMoveScaler = xDistance / UnityEngine.Screen.width;
            float yMoveScaler = yDistance / UnityEngine.Screen.height;

            TouchManager.Finger finger = touches[0];
            if (finger.IsMoving)
            {
                float xScaleFactor = UnityEngine.Mathf.Abs(finger.DeltaPosition.x) / UnityEngine.Mathf.Abs(finger.DeltaPosition.y);
                xScaleFactor = xScaleFactor > 1.0f ? 1.0f : xScaleFactor;
                float yScaleFactor = UnityEngine.Mathf.Abs(finger.DeltaPosition.y) / UnityEngine.Mathf.Abs(finger.DeltaPosition.x);
                yScaleFactor = yScaleFactor > 1.0f ? 1.0f : yScaleFactor;

                if (finger.DeltaPosition.x > 0)
                {
                    // Rotate Left
                    // m_FixedYaw = m_CameraTransform.eulerAngles.y + m_AngularMaxSpeed * Time.deltaTime * xScaleFactor;
                    m_FixedYaw = m_CameraTransform.eulerAngles.y + m_AngularMaxSpeed * 2.0f * xMoveScaler;
                }
                else if (finger.DeltaPosition.x < 0)
                {
                    // Rotate Right
                    // m_FixedYaw = m_CameraTransform.eulerAngles.y - m_AngularMaxSpeed * Time.deltaTime * xScaleFactor;
                    m_FixedYaw = m_CameraTransform.eulerAngles.y + m_AngularMaxSpeed * 2.0f * xMoveScaler;
                }

                if (finger.DeltaPosition.y > 0)
                {
                    // Rotate Down
                    // float camXAngle = m_CameraTransform.eulerAngles.x - m_AngularMaxSpeed * Time.deltaTime * yScaleFactor;
                    float camXAngle = m_CameraTransform.eulerAngles.x - m_AngularMaxSpeed * 0.6f * yMoveScaler;
                    if (camXAngle < m_MinCameraAngle)
                    {
                        camXAngle = m_MinCameraAngle;
                    }
                    m_FixedRoll = camXAngle;
                }
                else if (finger.DeltaPosition.y < 0)
                {
                    // Rotate Up
                    // float camXAngle = m_CameraTransform.eulerAngles.x + m_AngularMaxSpeed * Time.deltaTime * yScaleFactor;
                    float camXAngle = m_CameraTransform.eulerAngles.x - m_AngularMaxSpeed * 0.6f * yMoveScaler;
                    if (camXAngle > m_MaxCameraAngle)
                    {
                        camXAngle = m_MaxCameraAngle;
                    }
                    m_FixedRoll = camXAngle;
                }
            }
        }
        else if (touches.Count == 2)
        {
            m_Finger1 = null;

            TouchManager.Finger finger1 = touches[0];
            TouchManager.Finger finger2 = touches[1];

            if ((finger1.IsDown && !finger1.WasDown) || (finger2.IsDown && !finger2.WasDown))
            {
                m_FingerDistance = UnityEngine.Vector2.Distance(finger1.StartPosition, finger2.StartPosition);
            }

            if (finger1.IsMoving || finger2.IsMoving)
            {
                float currentDistance = UnityEngine.Vector2.Distance(finger1.Position, finger2.Position);
                if (currentDistance > m_FingerDistance)
                {
                    // Zoom In
                    m_CurDistance -= Time.deltaTime * m_ZoomSpeed;
                    if (m_CurDistance < m_MinDistance)
                    {
                        m_CurDistance = m_MinDistance;
                    }
                }
                else if (currentDistance < m_FingerDistance)
                {
                    // Zoom Out
                    m_CurDistance += Time.deltaTime * m_ZoomSpeed;
                    if (m_CurDistance > m_MaxDistance)
                    {
                        m_CurDistance = m_MaxDistance;
                    }
                }
                m_FingerDistance = currentDistance;
            }
        }
        else
        {
            m_Finger1 = null;
        }
    }