Example #1
0
        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();
        }
Example #2
0
        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));
        }
Example #3
0
 private void AnimateCard(CardComponent card, CoroutineHandle handle)
 {
     if (card.AnimationHandle != null)
     {
         Timing.KillCoroutines(card.AnimationHandle);
     }
     card.OnAnimationStarted(handle);
 }
Example #4
0
        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();
        }
Example #5
0
 public void MoveAndFlipCard(CardComponent card, Vector3 targetPosition, Vector3 forwardDirection)
 {
     AnimateCard(card,
                 Timing.RunCoroutine(MoveAndFlipCardCoroutine(card, targetPosition, forwardDirection, _Settings.MovementSpeed, _Settings.FlipDuration))
                 );
 }
Example #6
0
 public void FlipCard(CardComponent card)
 {
     AnimateCard(card,
                 Timing.RunCoroutine(FlipCardCoroutine(card, _Settings.FlipDuration))
                 );
 }
Example #7
0
 public void AllignCard(CardComponent card, Vector3 forwardDirection)
 {
     card.transform.rotation = Quaternion.LookRotation(forwardDirection, card.transform.up);
 }