private IEnumerator <float> MoveCardCoroutine(CardComponent card, Vector3 targetPostion, Vector3 forwardDirection, float speed) { var time = 0f; var startRotation = card.transform.rotation; var startPosition = card.transform.position; var duration = (targetPostion - startPosition).magnitude / speed; if (duration < float.Epsilon) { yield break; } var targetRotation = Quaternion.LookRotation(forwardDirection, card.transform.up); while (time <= duration) { var t = _Settings.MoveCurve.Evaluate(time / duration); card.transform.rotation = Quaternion.Slerp(startRotation, targetRotation, t); card.transform.position = Vector3.Lerp(startPosition, targetPostion, t); time += Time.deltaTime; yield return(Timing.WaitForOneFrame); } card.transform.rotation = targetRotation; card.transform.position = targetPostion; card.OnAnimationEnded(); }
private IEnumerator <float> FlipCardCoroutine(CardComponent card, float duration) { var time = 0f; var startRotation = card.transform.rotation; var targetRotation = Quaternion.LookRotation(card.transform.forward, card.IsCovered ? Vector3.up : Vector3.down); while (time <= duration) { var t = _Settings.FlipCurve.Evaluate(time / duration); card.transform.rotation = Quaternion.Slerp(startRotation, targetRotation, t); time += Time.deltaTime; yield return(Timing.WaitForOneFrame); } card.transform.rotation = targetRotation; card.OnAnimationEnded(); }