/// <summary>
        /// Continues the translation.
        /// </summary>
        /// <param name="gesture">The current gesture.</param>
        protected override void OnContinueManipulation(DragGesture gesture)
        {
            m_IsActive = true;

            TransformationUtility.Placement desiredPlacement =
                TransformationUtility.GetBestPlacementPosition(
                    transform.parent.position, gesture.Position, m_GroundingPlaneHeight,
                    s_ObjectVerticalPlacementOffset, MaxTranslationDistanceInMeters,
                    ObjectTranslationMode);

            // Discards invalid position.
            if (!desiredPlacement.HoveringPosition.HasValue ||
                !desiredPlacement.PlacementPosition.HasValue)
            {
                return;
            }

            m_ManipulatedObject = gesture.TargetObject;

            // Drops the value when collision occurs.
            if (TestCollision(desiredPlacement.PlacementPosition.Value))
            {
                m_CollisionEvent.Trigger(m_ManipulatedObject);
                return;
            }

            if (desiredPlacement.PlacementRotation.HasValue)
            {
                // Rotates if the plane direction has changed.
                if (((desiredPlacement.PlacementRotation.Value * Vector3.up) - transform.up)
                    .sqrMagnitude > k_MinimumSquaredDistance)
                {
                    m_CollisionEvent.Trigger(m_ManipulatedObject);
                    return;
                }
                else
                {
                    m_DesiredRotation = transform.rotation;
                }
            }

            // If desired position is lower than the current position, don't drop it until it's
            // finished.
            m_DesiredLocalPosition = transform.parent.InverseTransformPoint(
                desiredPlacement.HoveringPosition.Value);

            m_DesiredAnchorPosition = desiredPlacement.PlacementPosition.Value;

            m_GroundingPlaneHeight = desiredPlacement.UpdatedGroundingPlaneHeight;

            if (desiredPlacement.PlacementPlane.HasValue)
            {
                m_LastHit = desiredPlacement.PlacementPlane.Value;
            }
        }
Пример #2
0
        /// <summary>
        /// Continues the translation.
        /// </summary>
        /// <param name="gesture">The current gesture.</param>
        protected override void OnContinueManipulation(DragGesture gesture)
        {
            m_IsActive = true;

            TransformationUtility.Placement desiredPlacement =
                TransformationUtility.GetBestPlacementPosition(
                    transform.parent.position, gesture.Position, m_GroundingPlaneHeight, 0.03f,
                    MaxTranslationDistance, ObjectTranslationMode);

            _ShowAndroidToastMessage("after best " + desiredPlacement.UpdatedGroundingPlaneHeight.ToString());

            if (desiredPlacement.HoveringPosition.HasValue &&
                desiredPlacement.PlacementPosition.HasValue)
            {
                // If desired position is lower than current position, don't drop it until it's
                // finished.
                m_DesiredLocalPosition = transform.parent.InverseTransformPoint(
                    desiredPlacement.HoveringPosition.Value);
                m_DesiredLocalPosition.y = m_GroundingPlaneHeight;
                m_DesiredAnchorPosition  = desiredPlacement.PlacementPosition.Value;

                //m_GroundingPlaneHeight = desiredPlacement.UpdatedGroundingPlaneHeight;

                //if (desiredPlacement.PlacementRotation.HasValue)
                //{
                //    // Rotate if the plane direction has changed.
                //    if (((desiredPlacement.PlacementRotation.Value * Vector3.up) - transform.up)
                //        .magnitude > k_DiffThreshold)
                //    {
                //        m_DesiredRotation = desiredPlacement.PlacementRotation.Value;
                //    }
                //    else
                //    {
                //        m_DesiredRotation = transform.rotation;
                //    }
                //}

                //if (desiredPlacement.PlacementPlane.HasValue)
                //{
                //    m_LastHit = desiredPlacement.PlacementPlane.Value;
                //}
            }
        }
        /// <summary>
        /// Continues the translation.
        /// </summary>
        /// <param name="gesture">The current gesture.</param>
        protected override void OnContinueManipulation(DragGesture gesture)
        {
            _isActive = true;

            TransformationUtility.Placement desiredPlacement =
                TransformationUtility.GetBestPlacementPosition(
                    transform.parent.position, gesture.Position, _groundingPlaneHeight, 0.03f,
                    MaxTranslationDistance, ObjectTranslationMode);

            if (desiredPlacement.HoveringPosition.HasValue &&
                desiredPlacement.PlacementPosition.HasValue)
            {
                // If desired position is lower than current position, don't drop it until it's
                // finished.
                _desiredLocalPosition = transform.parent.InverseTransformPoint(
                    desiredPlacement.HoveringPosition.Value);

                _desiredAnchorPosition = desiredPlacement.PlacementPosition.Value;

                _groundingPlaneHeight = desiredPlacement.UpdatedGroundingPlaneHeight;

                if (desiredPlacement.PlacementRotation.HasValue)
                {
                    // Rotate if the plane direction has changed.
                    if (((desiredPlacement.PlacementRotation.Value * Vector3.up) - transform.up)
                        .magnitude > _diffThreshold)
                    {
                        _desiredRotation = desiredPlacement.PlacementRotation.Value;
                    }
                    else
                    {
                        _desiredRotation = transform.rotation;
                    }
                }

                if (desiredPlacement.PlacementPlane.HasValue)
                {
                    _lastHit = desiredPlacement.PlacementPlane.Value;
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Continues the translation.
        /// </summary>
        /// <param name="gesture">The current gesture.</param>
        protected override void OnContinueManipulation(DragGesture gesture)
        {
            m_IsActive = true;

            TransformationUtility.Placement desiredPlacement =
                TransformationUtility.GetBestPlacementPosition(
                    transform.parent.position, gesture.Position, m_GroundingPlaneHeight, 0.03f,
                    MaxTranslationDistance, ObjectTranslationMode);

            if (desiredPlacement.HoveringPosition.HasValue &&
                desiredPlacement.PlacementPosition.HasValue)
            {
                // If desired position is lower than current position, don't drop it until it's
                // finished.
                Debug.Log(gesture.TargetObject.ToString());
                // Raycast against the location the player touched to search for objects.
                RaycastHit[] hits;
                hits = Physics.RaycastAll(desiredPlacement.PlacementPosition.Value, desiredPlacement.PlacementRotation.Value * Vector3.up);
                if (hits.Length > 1)
                {
                    //The the one before the last one in the stack.
                    Collider lastCollider = hits[hits.Length - 1].collider;

                    if (lastCollider.gameObject.Equals(gesture.TargetObject.transform.GetChild(2).gameObject))
                    {
                        //The one before the last one in the stack.
                        lastCollider = hits[hits.Length - 2].collider;
                    }

                    float x = lastCollider.transform.position.x;
                    float y = lastCollider.transform.position.y;
                    float z = lastCollider.transform.position.z;

                    //float deltaY = 0;

                    //Added all the y-dimensions of the gameObjects in the stack

                    /*for (int i = 0; i < hits.Length; i++)
                     * {
                     *  Collider collider = hits[i].collider;
                     *  deltaY += collider.bounds.size.y;
                     * }*/

                    //Subtracted the y-dimension of the given gameObject
                    //deltaY -= GetComponent<Collider>().bounds.size.y;
                    float deltaY = lastCollider.bounds.size.y - 0.011f;

                    m_DesiredLocalPosition = transform.parent.InverseTransformPoint(
                        new Vector3(x, y + deltaY, z));

                    m_DesiredAnchorPosition = new Vector3(x, y + deltaY, z);

                    m_DesiredRotation = lastCollider.transform.rotation;
                }
                else
                {
                    m_DesiredLocalPosition = transform.parent.InverseTransformPoint(
                        desiredPlacement.HoveringPosition.Value);

                    m_DesiredAnchorPosition = desiredPlacement.PlacementPosition.Value;

                    if (desiredPlacement.PlacementRotation.HasValue)
                    {
                        // Rotate if the plane direction has changed.
                        if (((desiredPlacement.PlacementRotation.Value * Vector3.up) - transform.up)
                            .magnitude > k_DiffThreshold)
                        {
                            m_DesiredRotation = desiredPlacement.PlacementRotation.Value;
                        }
                        else
                        {
                            m_DesiredRotation = transform.rotation;
                        }
                    }
                }

                m_GroundingPlaneHeight = desiredPlacement.UpdatedGroundingPlaneHeight;


                if (desiredPlacement.PlacementPlane.HasValue)
                {
                    m_LastHit = desiredPlacement.PlacementPlane.Value;
                }
            }
        }