void ComeBackUpdate() { if (backwardTimer <= durationTime) { backwardTimer += Time.deltaTime; backwardSpeed = Easing.QuartEaseIn(backwardTimer, 0, forwardSpeed, durationTime); } else { backwardSpeed = forwardSpeed; } float distanceFromPlayer = Vector3.Distance(hammerTransform.position, playerTransform.position); if (distanceFromPlayer > 4f) { //Hammer Position coming back Vector3 targetPosition = new Vector3(playerTransform.position.x, hammerTransform.position.y, playerTransform.position.z); hammerTransform.position = Vector3.MoveTowards(hammerTransform.position, targetPosition, backwardSpeed * Time.deltaTime); //Hammer Flip Rotation Vector3 directionFromPlayer = hammerTransform.position - playerTransform.position; float desiredYAngle = Mathf.Atan2(directionFromPlayer.x, directionFromPlayer.z) * Mathf.Rad2Deg; hammerTransform.rotation = Quaternion.SlerpUnclamped(hammerTransform.rotation, Quaternion.Euler(180, desiredYAngle, 77), backwardTimer / 0.3f); } else if (distanceFromPlayer <= 4f && distanceFromPlayer >= 1f) { //Hammer Position towards parent transform hammerTransform.position = Vector3.MoveTowards(hammerTransform.position, parentBone.position, backwardSpeed * Time.deltaTime); if (!hammerCameBack) { playerBehaviour.CatchHammer(); hammerCameBack = true; StartCoroutine(HammerBackAssurance(0.3f)); } else { //Hammer Hand Grab Rotation Vector3 directionFromPlayer = hammerTransform.position - playerTransform.position; float desiredYAngle = Mathf.Atan2(directionFromPlayer.x, directionFromPlayer.z) * Mathf.Rad2Deg; Vector3 initRotation = hammerTransform.rotation.eulerAngles; hammerTransform.rotation = Quaternion.RotateTowards(hammerTransform.rotation, parentBone.rotation * Quaternion.Inverse(hammerLRotation), 20); if (Vector3.Distance(hammerTransform.position, parentBone.position) < 0.25f) { HammerIsBack(); } } } else { HammerIsBack(); } }