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