2025-11-21 02:12:50 +08:00

75 lines
2.7 KiB
C#

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<SpriteRenderer>();
if (canvas == null) canvas = transform.Find("Canvas").GetComponent<Canvas>();
if (cardBackgroundUI == null) cardBackgroundUI = transform.GetChild(0).GetComponent<SpriteRenderer>();
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;
});
}
}