Example #1
0
        private void PanGestureUpdated(DigitalRubyShared.GestureRecognizer r)
        {
            if (!AllowPan)
            {
                r.Reset();
                return;
            }

            Camera     camera;
            GameObject obj = FingersScript.StartOrResetGesture(r, BringToFront, Cameras, gameObject, spriteRenderer, Mode, out camera);

            if (camera == null)
            {
                r.Reset();
                return;
            }
            else if (r.State == GestureRecognizerState.Began)
            {
                SetStartState(r, obj, false);
            }
            else if (r.State == GestureRecognizerState.Executing && _transform != null)
            {
                if (PanGesture.ReceivedAdditionalTouches)
                {
                    panZ      = camera.WorldToScreenPoint(_transform.position).z;
                    panOffset = _transform.position - camera.ScreenToWorldPoint(new Vector3(r.FocusX, r.FocusY, panZ));
                }
                Vector3 gestureScreenPoint = new Vector3(r.FocusX, r.FocusY, panZ);
                Vector3 gestureWorldPoint  = camera.ScreenToWorldPoint(gestureScreenPoint) + panOffset;
                if (rigidBody != null)
                {
                    rigidBody.MovePosition(gestureWorldPoint);
                }
                else if (rigidBody2D != null)
                {
                    rigidBody2D.MovePosition(gestureWorldPoint);
                }
                else if (canvasRenderer != null)
                {
                    _transform.position = gestureScreenPoint;
                }
                else
                {
                    _transform.position = gestureWorldPoint;
                }
            }
            else if (r.State == GestureRecognizerState.Ended)
            {
                if (spriteRenderer != null && BringToFront)
                {
                    spriteRenderer.sortingOrder = startSortOrder;
                }
                ClearStartState();
            }
        }
        private void ScaleGestureUpdated(DigitalRubyShared.GestureRecognizer scaleGesture)
        {
            if (!AllowScale)
            {
                scaleGesture.Reset();
                return;
            }
            else if (MinMaxScale.x < 0.0f || MinMaxScale.y < 0.0f || startScale == null)
            {
                // no scaling
                return;
            }

            Camera     camera;
            GameObject obj = FingersScript.StartOrResetGesture(scaleGesture, BringToFront, Cameras, gameObject, spriteRenderer, Mode, out camera);

            if (camera == null)
            {
                scaleGesture.Reset();
                return;
            }

            StateUpdated.Invoke(PanGesture);
            if (scaleGesture.State == GestureRecognizerState.Began)
            {
                SetStartState(scaleGesture, obj, false);
            }
            else if (scaleGesture.State == GestureRecognizerState.Executing && _transform != null)
            {
                // assume uniform scale
                Vector3 scale = new Vector3
                                (
                    (_transform.localScale.x * ScaleGesture.ScaleMultiplier),
                    (_transform.localScale.y * ScaleGesture.ScaleMultiplier),
                    (_transform.localScale.z * ScaleGesture.ScaleMultiplier)
                                );
                if (MinMaxScale.x > 0.0f || MinMaxScale.y > 0.0f)
                {
                    float minValue = Mathf.Min(MinMaxScale.x, MinMaxScale.y);
                    float maxValue = Mathf.Max(MinMaxScale.x, MinMaxScale.y);
                    scale.x = Mathf.Clamp(scale.x, startScale.Value.x * minValue, startScale.Value.x * maxValue);
                    scale.y = Mathf.Clamp(scale.y, startScale.Value.y * minValue, startScale.Value.y * maxValue);
                    scale.z = Mathf.Clamp(scale.z, startScale.Value.z * minValue, startScale.Value.z * maxValue);
                }

                // don't mess with z scale for 2D
                scale.z = (rigidBody2D == null && spriteRenderer == null && canvasRenderer == null ? scale.z : _transform.localScale.z);
                _transform.localScale = scale;
            }
            else if (scaleGesture.State == GestureRecognizerState.Ended)
            {
                ClearStartState();
            }
        }
Example #3
0
        private void LongPressGestureUpdated(DigitalRubyShared.GestureRecognizer r)
        {
            Camera camera;

            FingersScript.StartOrResetGesture(r, BringToFront, Cameras, gameObject, spriteRenderer, GestureRecognizerComponentScriptBase.GestureObjectMode.RequireIntersectWithGameObject, out camera);
            if (r.State == GestureRecognizerState.Began)
            {
                transform.localScale *= DragScale;
                panZ      = camera.WorldToScreenPoint(transform.position).z;
                panOffset = transform.position - ScreenToWorldPoint(camera, r.FocusX, r.FocusY, panZ);
                if (DragStarted != null)
                {
                    DragStarted.Invoke(this, System.EventArgs.Empty);
                }
            }
            else if (r.State == GestureRecognizerState.Executing)
            {
                Vector3 gestureScreenPoint = new Vector3(r.FocusX, r.FocusY, panZ);
                Vector3 gestureWorldPoint  = ScreenToWorldPoint(camera, gestureScreenPoint.x, gestureScreenPoint.y, gestureScreenPoint.z) + panOffset;
                if (rigidBody != null)
                {
                    rigidBody.MovePosition(gestureWorldPoint);
                }
                else if (rigidBody2D != null)
                {
                    rigidBody2D.MovePosition(gestureWorldPoint);
                }
                else
                {
                    transform.position = gestureWorldPoint;
                }
                if (DragUpdated != null)
                {
                    DragUpdated.Invoke(this, System.EventArgs.Empty);
                }
            }
            else if (r.State == GestureRecognizerState.Ended)
            {
                transform.localScale /= DragScale;
                if (spriteRenderer != null && BringToFront)
                {
                    spriteRenderer.sortingOrder = startSortOrder;
                }
                if (DragEnded != null)
                {
                    DragEnded.Invoke(this, System.EventArgs.Empty);
                }
            }
        }
        private void RotateGestureUpdated(DigitalRubyShared.GestureRecognizer rotateGesture)
        {
            if (!AllowRotate)
            {
                rotateGesture.Reset();
                return;
            }

            Camera     camera;
            GameObject obj = FingersScript.StartOrResetGesture(rotateGesture, BringToFront, Cameras, gameObject, spriteRenderer, Mode, out camera);

            if (camera == null)
            {
                rotateGesture.Reset();
                return;
            }

            StateUpdated.Invoke(rotateGesture);
            if (rotateGesture.State == GestureRecognizerState.Began)
            {
                SetStartState(rotateGesture, obj, false);
            }
            else if (rotateGesture.State == GestureRecognizerState.Executing && _transform != null)
            {
                if (rigidBody != null)
                {
                    float      angle    = RotateGesture.RotationDegreesDelta;
                    Quaternion rotation = Quaternion.AngleAxis(angle, camera.transform.forward);
                    rigidBody.MoveRotation(rigidBody.rotation * rotation);
                }
                else if (rigidBody2D != null)
                {
                    rigidBody2D.MoveRotation(rigidBody2D.rotation + RotateGesture.RotationDegreesDelta);
                }
                else if (canvasRenderer != null)
                {
                    _transform.Rotate(Vector3.forward, RotateGesture.RotationDegreesDelta, Space.Self);
                }
                else
                {
                    _transform.Rotate(camera.transform.forward, RotateGesture.RotationDegreesDelta, Space.Self);
                }
            }
            else if (rotateGesture.State == GestureRecognizerState.Ended)
            {
                ClearStartState();
            }
        }
Example #5
0
        private void ScaleGestureUpdated(DigitalRubyShared.GestureRecognizer r)
        {
            if (!AllowScale)
            {
                r.Reset();
                return;
            }
            else if (MinMaxScale.x == MinMaxScale.y && MinMaxScale.y == 1.0f)
            {
                return;
            }

            Camera     camera;
            GameObject obj = FingersScript.StartOrResetGesture(r, BringToFront, Cameras, gameObject, spriteRenderer, Mode, out camera);

            if (camera == null)
            {
                r.Reset();
                return;
            }
            else if (r.State == GestureRecognizerState.Began)
            {
                SetStartState(r, obj, false);
            }
            else if (r.State == GestureRecognizerState.Executing && _transform != null)
            {
                // assume uniform scale
                float scale = _transform.localScale.x * ScaleGesture.ScaleMultiplier;

                if (MinMaxScale.x > 0.0f && MinMaxScale.y >= MinMaxScale.x)
                {
                    scale = Mathf.Clamp(scale, MinMaxScale.x, MinMaxScale.y);
                }

                // don't mess with z scale for 2D
                float zScale = (rigidBody2D == null && spriteRenderer == null && canvasRenderer == null ? scale : _transform.localScale.z);
                _transform.localScale = new Vector3(scale, scale, zScale);
            }
            else if (r.State == GestureRecognizerState.Ended)
            {
                ClearStartState();
            }
        }