GrabbableSizedObject.MoveToAnchorPosition C# (CSharp) Method

MoveToAnchorPosition() protected method

protected MoveToAnchorPosition ( ) : IEnumerator
return IEnumerator
    protected override IEnumerator MoveToAnchorPosition()
    {
        moveToAnchor = true;

        anchor.position = transform.position;
        anchor.rotation = transform.rotation;

        myRigidbody.drag = grabbedDrag;

//        LimitJoint();

        myRigidbody.isKinematic = true;

        // myJoint.linearLimit = new SoftJointLimit() {limit = 0.001f};

        var moveToTargetPos = true;

        var targetPosition = GetMoveToAnchorOffsetPosition();

        while (moveToTargetPos)
        {
            var toTarget = targetPosition - transform.position;

            var moveDistance = Mathf.Min(grabSpeed * Time.deltaTime, toTarget.magnitude);

            transform.position += toTarget.normalized * moveDistance;

            if (Vector3.Distance(transform.position, targetPosition) < 0.004f)
            {
                moveToTargetPos = false;
            }
            else
            {
                yield return new WaitForFixedUpdate();
            }
        }

        var initRotation = transform.rotation;
        var targetRotation = Quaternion.identity;

        var initDist = Vector3.Distance(transform.position, gazeAnchor.position);


        while (moveToAnchor)
        {
            var anchorPos = gazeAnchor.position + Vector3.up*-0.1f;
            var toAnchor = anchorPos - transform.position;

            var moveDistance = Mathf.Min(grabSpeed * Time.deltaTime, toAnchor.magnitude);

            transform.position += toAnchor.normalized * moveDistance;

            var dist = Vector3.Distance(transform.position, anchorPos);

            var t = dist / Mathf.Max(initDist, float.Epsilon);

            // var localUp = pointer.transform.InverseTransformDirection(grabbedUpAxis);
            // transform.rotation = Quaternion.Slerp(targetRotation, initRotation, t);

            if (dist < 0.001f)
            {
                moveToAnchor = false;
                // anchor.parent = gazeAnchor;

                transform.position = anchorPos;

                myRigidbody.isKinematic = true;
                FreeJoint();

                anchor.position = transform.position;

                transform.parent = gazeAnchor;

                // myJoint.linearLimit = new SoftJointLimit();
            }
            else
            {
                yield return new WaitForFixedUpdate();
            }
        }
    }