91 lines
3.3 KiB
C#
Raw Normal View History

2025-11-12 18:08:24 +08:00
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<SpriteRenderer>();
default_scale = transform.localScale;
hover_scale = default_scale * 2f;
transform.localScale = initialize_scale;
canvas = transform.Find("Canvas").GetComponent<Canvas>();
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); });
}
}