using System; using System.Collections; using System.Collections.Generic; using DG.Tweening; using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; using Sequence = DG.Tweening.Sequence; public class CardHandler : MonoBehaviour { // ======== serializeField ======== // ======== private ======== private SpriteRenderer sprite_renderer; private Vector3 default_scale; private readonly Vector3 initialize_scale = Vector3.zero; private Vector3 hover_scale; private readonly Vector3 hover_position = Vector3.zero; private readonly Quaternion hover_rotation = Quaternion.identity; private const int hover_layer_sort_order = 100; private const float hover_duration = 0.15f; // ========= 处于手牌中的信息 ========= private Vector3 hand_position; private Quaternion hand_rotation; private Vector3 hand_scale; private int hand_sort_order; private Canvas canvas; private void Awake() { sprite_renderer = GetComponent(); default_scale = transform.localScale; hover_scale = default_scale * 2f; transform.localScale = initialize_scale; canvas = transform.Find("Canvas").GetComponent(); if (canvas.renderMode == RenderMode.WorldSpace && canvas.worldCamera == null) { canvas.worldCamera = Camera.main; } } private void OnMouseDrag() { transform.DOMove(hover_position, hover_duration); transform.DOScale(hover_scale, hover_duration); transform.DORotateQuaternion(hover_rotation, hover_duration); sprite_renderer.sortingOrder = hover_layer_sort_order; canvas.sortingOrder = hover_layer_sort_order + 1; // transform.position = hover_position; // transform.localScale = hover_scale; } private void OnMouseUp() { // print("hello"); transform.DOMove(hand_position, hover_duration); transform.DOScale(hand_scale, hover_duration); transform.DORotateQuaternion(hand_rotation, hover_duration); sprite_renderer.sortingOrder = hand_sort_order; canvas.sortingOrder = hand_sort_order + 1; } public void m_recv_draw_a_card(Vector3 move_position, Quaternion rotation, float duration, int layer_sort_order) { move_position.z = -layer_sort_order * 0.5f; hand_position = move_position; hand_rotation = rotation; hand_scale = default_scale; hand_sort_order = layer_sort_order * 2; sprite_renderer.sortingOrder = hand_sort_order; // 精灵排序图层 canvas.sortingOrder = hand_sort_order + 1; transform.DOMove(move_position, duration); transform.DORotateQuaternion(rotation, duration); transform.DOScale(default_scale, duration); } public void m_recv_drop_a_card(Vector3 drop_position, float duration) { Sequence seq = DOTween.Sequence(); seq.Append(transform.DOScale(new Vector3(0.05f, 0.05f, 0.05f), duration)); seq.Append( DOTween.Sequence() .Join(transform.DOMove(drop_position, duration)) .Join(transform.DORotateQuaternion(Quaternion.identity, duration)) ); seq.OnComplete(() => { Destroy(gameObject); }); } }