protected override IEnumerator MoveToNotGrabbedPosition()
{
moveToLastPosition = true;
// anchor.parent = lastParent;
transform.parent = lastParent;
anchor.position = transform.position;
myRigidbody.isKinematic = true;
// LimitJoint();
var moveToTargetPos = true;
var targetPosition = GetMoveToNotGrabbedOffsetPosition();
// Debug.Log("Target Position");
// Debug.Log(targetPosition);
var initRotation = transform.rotation;
var targetRotation = GetMoveToNotGrabbedRotation();
var initDist = Vector3.Distance(transform.position, targetPosition);
while (moveToTargetPos)
{
var toTarget = targetPosition - transform.position;
var moveDistance = Mathf.Min(grabSpeed * Time.deltaTime, toTarget.magnitude);
transform.position += toTarget.normalized * moveDistance;
// Handle Rotation Slerp
var dist = Vector3.Distance(transform.position, targetPosition);
var t = dist / Mathf.Max(initDist, float.Epsilon);
transform.rotation = Quaternion.Slerp(targetRotation, initRotation, t);
if (Vector3.Distance(transform.position, targetPosition) < 0.004f)
{
moveToTargetPos = false;
}
else
{
yield return new WaitForFixedUpdate();
}
}
targetPosition = GetMoveToNotGrabbedPosition();
myRigidbody.velocity = Vector3.zero;
myRigidbody.angularVelocity = Vector3.zero;
while (moveToLastPosition)
{
var toTarget = targetPosition - transform.position;
var moveDistance = Mathf.Min(grabSpeed * Time.deltaTime, toTarget.magnitude);
transform.position += toTarget.normalized * moveDistance;
transform.rotation = targetRotation;
if (Vector3.Distance(transform.position, targetPosition) < 0.01f)
{
moveToLastPosition = false;
transform.position = targetPosition;
// myJoint.linearLimit = new SoftJointLimit();
FreeJoint();
anchor.position = transform.position;
myRigidbody.velocity = Vector3.zero;
myRigidbody.angularVelocity = Vector3.zero;
myRigidbody.drag = freeDrag;
// yield return new WaitForSeconds(0.05f);
myRigidbody.isKinematic = false;
trigger.SetActive(true);
// Now that we're done moving, notify the puzzle
puzzle.PlaceSizedObjectOnObject(this, objectBelow);
}
else
{
yield return new WaitForFixedUpdate();
}
}
}
}