75 lines
2.7 KiB
C#
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;
|
|
});
|
|
}
|
|
} |