91 lines
3.3 KiB
C#
91 lines
3.3 KiB
C#
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); });
|
|
}
|
|
} |