Setup and play area prefab
This commit is contained in:
parent
fe61df43e7
commit
af12b601fc
166 changed files with 14014 additions and 10 deletions
94
WizardDuelsProject/Assets/Scripts/CardVisuals/CardVisual.cs
Normal file
94
WizardDuelsProject/Assets/Scripts/CardVisuals/CardVisual.cs
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
using System;
|
||||
using System.Drawing;
|
||||
using DG.Tweening;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using Image = UnityEngine.UI.Image;
|
||||
|
||||
public class CardVisual : MonoBehaviour
|
||||
{
|
||||
[Header("Card")]
|
||||
[SerializeField] private Card parentCard;
|
||||
[SerializeField] private Vector3 movementDelta;
|
||||
[SerializeField] private Vector3 rotationDelta;
|
||||
[SerializeField] private Image cardFace;
|
||||
[SerializeField] private GameObject shadow;
|
||||
[SerializeField] private int shadowSortOrderUp = 1;
|
||||
|
||||
[Header("Follow Parameters")]
|
||||
[SerializeField] private float followSpeed = 30;
|
||||
|
||||
[Header("Rotation Parameters")]
|
||||
[SerializeField] private float rotationAmount = 20;
|
||||
[SerializeField] private float rotationSpeed = 20;
|
||||
|
||||
[Header("Scale Parameters")]
|
||||
[SerializeField] private bool scaleAnimations = true;
|
||||
[SerializeField] private float scaleOnHover = 1.15f;
|
||||
[SerializeField] private float scaleTransition = .15f;
|
||||
[SerializeField] private Ease scaleEase = Ease.OutBack;
|
||||
|
||||
|
||||
private Canvas _canvas;
|
||||
private Canvas _shadowCanvas;
|
||||
private int _shadowSortOrderDown;
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (parentCard != null)
|
||||
{
|
||||
parentCard.PointerEnter -= HandlePointerEnter;
|
||||
parentCard.PointerExit -= HandlePointerExit;
|
||||
}
|
||||
}
|
||||
|
||||
public void Initialize(Card card, Sprite face)
|
||||
{
|
||||
parentCard = card;
|
||||
cardFace.sprite = face;
|
||||
_canvas = GetComponent<Canvas>();
|
||||
_shadowCanvas = shadow.GetComponent<Canvas>();
|
||||
_shadowSortOrderDown = _shadowCanvas.sortingOrder;
|
||||
|
||||
parentCard.PointerEnter += HandlePointerEnter;
|
||||
parentCard.PointerExit += HandlePointerExit;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (parentCard == null) return;
|
||||
|
||||
SmoothFollow();
|
||||
RotateWhenFollowing();
|
||||
}
|
||||
|
||||
private void SmoothFollow()
|
||||
{
|
||||
transform.position = Vector3.Lerp(transform.position, parentCard.transform.position, followSpeed * Time.deltaTime);
|
||||
}
|
||||
|
||||
private void RotateWhenFollowing()
|
||||
{
|
||||
Vector3 movement = transform.position - parentCard.transform.position;
|
||||
movementDelta = Vector3.Lerp(movementDelta, movement, 25 * Time.deltaTime);
|
||||
Vector3 movementRotation = (parentCard.IsDragging ? movementDelta : movement) * rotationAmount;
|
||||
rotationDelta = Vector3.Lerp(rotationDelta, movementRotation, rotationSpeed * Time.deltaTime);
|
||||
transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, Mathf.Clamp(rotationDelta.x, -60, 60));
|
||||
}
|
||||
|
||||
private void HandlePointerEnter()
|
||||
{
|
||||
_canvas.overrideSorting = true;
|
||||
_shadowCanvas.sortingOrder = shadowSortOrderUp;
|
||||
if (scaleAnimations)
|
||||
transform.DOScale(scaleOnHover, scaleTransition).SetEase(scaleEase);
|
||||
}
|
||||
|
||||
private void HandlePointerExit()
|
||||
{
|
||||
_canvas.overrideSorting = false;
|
||||
_shadowCanvas.sortingOrder = _shadowSortOrderDown;
|
||||
|
||||
transform.DOScale(1, scaleTransition).SetEase(scaleEase);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue