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> MoveAndFlipCardCoroutine(CardComponent card, Vector3 targetPosition, Vector3 forwardDirection, float movementSpeed, float flipDuration) { Timing.RunCoroutine(MoveCardCoroutine(card, targetPosition, forwardDirection, movementSpeed)); yield return(Timing.WaitForSeconds(1f)); //todo: rethink this animation and move delay to settings Timing.RunCoroutine(FlipCardCoroutine(card, flipDuration)); }
private void AnimateCard(CardComponent card, CoroutineHandle handle) { if (card.AnimationHandle != null) { Timing.KillCoroutines(card.AnimationHandle); } card.OnAnimationStarted(handle); }
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(); }
public void MoveAndFlipCard(CardComponent card, Vector3 targetPosition, Vector3 forwardDirection) { AnimateCard(card, Timing.RunCoroutine(MoveAndFlipCardCoroutine(card, targetPosition, forwardDirection, _Settings.MovementSpeed, _Settings.FlipDuration)) ); }
public void FlipCard(CardComponent card) { AnimateCard(card, Timing.RunCoroutine(FlipCardCoroutine(card, _Settings.FlipDuration)) ); }
public void AllignCard(CardComponent card, Vector3 forwardDirection) { card.transform.rotation = Quaternion.LookRotation(forwardDirection, card.transform.up); }