private void Update() { // Animate card by interpolating translation and rotation, destroy swiped cards if (animationState != AnimationState.Idle && !animationSuspended) { float animationProgress = (Time.time - animationStartTime) / _animationDuration; float scaledProgress = ScaleProgress(animationProgress); if (scaledProgress > 1.0f || animationProgress > 1.0f) { transform.position = snapPosition; transform.eulerAngles = snapRotationAngles; if (animationState == AnimationState.Revealing) { CardDescriptionDisplay.SetDescription(card.CardText, card.CharacterName); snapRotationAngles.y -= 360.0f; } if (animationState == AnimationState.FlyingAway) { Destroy(gameObject); } else { animationState = AnimationState.Idle; } } else { transform.position = Vector3.Lerp(animationStartPosition, snapPosition, scaledProgress); transform.eulerAngles = Vector3.Lerp(animationStartRotationAngles, snapRotationAngles, scaledProgress); ShowVisibleSide(); } if (animationState != AnimationState.Revealing) { float alphaCoord = (transform.position.x - snapPosition.x) / (swipeThreshold / 2); Util.SetTextAlpha(leftActionText, Mathf.Clamp01(-alphaCoord)); Util.SetTextAlpha(rightActionText, Mathf.Clamp01(alphaCoord)); if (!actionPreviewSuspended) { Stats.UpdateActionPreviewAlpha(-alphaCoord, alphaCoord); } } } }
public void EndDrag() { animationStartPosition = transform.position; animationStartRotationAngles = transform.eulerAngles; animationStartTime = Time.time; if (animationState != AnimationState.FlyingAway) { if (transform.position.x < snapPosition.x - swipeThreshold) { card.PerformLeftDecision(Controller); Vector3 displacement = animationStartPosition - snapPosition; snapPosition += displacement.normalized * Util.OrthoCameraWorldDiagonalSize(Camera.main) * 2.0f; snapRotationAngles = transform.eulerAngles; animationState = AnimationState.FlyingAway; CardDescriptionDisplay.ResetDescription(); actionPreviewSuspended = true; } else if (transform.position.x > snapPosition.x + swipeThreshold) { card.PerformRightDecision(Controller); Vector3 displacement = animationStartPosition - snapPosition; snapPosition += displacement.normalized * Util.OrthoCameraWorldDiagonalSize(Camera.main) * 2.0f; snapRotationAngles = transform.eulerAngles; animationState = AnimationState.FlyingAway; CardDescriptionDisplay.ResetDescription(); actionPreviewSuspended = true; } else if (animationState == AnimationState.Idle) { animationState = AnimationState.Converging; } } animationSuspended = false; }