using System; using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; public class Card : MonoBehaviour { // ========= serializeField ======== [SerializeField] private int ID; // ========= private ========= public void SetID(int id) => ID = id; private Collider2D areaCollider2D; private TurnManagerSingleton turnSingleton; private SpriteRenderer spriteRender; private Canvas canvas; private SpriteRenderer cardBackgroundUI; private CardTransform cardTransform = new(); private struct CardTransform { public Vector3 POSITION; public Quaternion ROTATION; public Vector3 SCALE; public int LAYER_SORT_ORDER; } public struct MoveMessage { public Vector3 GO_POSITION; public Quaternion GO_ROTATION; public Vector3 GO_SCALE; public int GO_LAYER_SORT_ORDER; public float DURATION; } public void SetAreaCollider2D(Collider2D collider2) => areaCollider2D = collider2; public void UnSetAreaCollider2D() => areaCollider2D = null; public void SetupCard() { if (spriteRender == null) spriteRender = GetComponent(); if (canvas == null) canvas = transform.Find("Canvas").GetComponent(); if (cardBackgroundUI == null) cardBackgroundUI = transform.GetChild(0).GetComponent(); if (turnSingleton == null) turnSingleton = TurnManagerSingleton.Instance; transform.localScale = Vector3.one / 10f; print(ID); } public void MoveCard(MoveMessage moveMessage) { if (!turnSingleton.CompareManagerState(TurnManager.TurnManagerStateEnum.SELF_STATE_START)) return; Vector3 movePosition = moveMessage.GO_POSITION; Quaternion doRotation = moveMessage.GO_ROTATION; Vector3 doScale = moveMessage.GO_SCALE; float duration = moveMessage.DURATION; int layerSortOrder = moveMessage.GO_LAYER_SORT_ORDER; movePosition.z = -layerSortOrder * 0.5f; spriteRender.sortingOrder = layerSortOrder * 3; cardBackgroundUI.sortingOrder = layerSortOrder * 3 - 1; canvas.sortingOrder = layerSortOrder * 3 + 1; Sequence seq = DOTween.Sequence(); seq.Join(transform.DOMove(movePosition, duration)); seq.Join(transform.DOScale(doScale, duration)); seq.Join(transform.DORotateQuaternion(doRotation, duration)); seq.OnComplete(() => // 记录默认数值 { cardTransform.POSITION = movePosition; cardTransform.ROTATION = doRotation; cardTransform.SCALE = transform.localScale; cardTransform.LAYER_SORT_ORDER = layerSortOrder; }); } }