using System; using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; public class Card : MonoBehaviour { // ========= serializeField ======== [SerializeField] private int coast = 9; [HideInInspector] public int ID; // ========= private ========= // *************************** private Canvas canvas; private SpriteRenderer sprite_renderer; private bool is_drag = false; // ========= Hover Message ========= private readonly Vector3 hover_position = Vector3.zero; private readonly Quaternion hover_rotation = Quaternion.identity; private const int hover_layer_sort_order = 100; private readonly float hover_duration = 0.15f; private struct CardStatus { public Vector3 POSITION; public Quaternion ROTATION; public Vector3 SCALE; public int SORTING_ORDER; } private CardStatus card_status = new CardStatus(); // ========= debug ========= private readonly Vector3 debug_draw_position = Vector3.zero; // **************************** // ========= private ========= private void Awake() { sprite_renderer = GetComponent(); canvas = transform.Find("Canvas").GetComponent(); if (canvas.renderMode == RenderMode.WorldSpace && canvas.worldCamera == null) { canvas.worldCamera = Camera.main; } m_msg_draw_card(); } // ******* Mouse *********** private void OnMouseDrag() { if (is_drag) return; if (CardOS.Instance.LOCK_GET(CardEventData.LOCK_EXCLUSIVE_CARD_ENUM.SORRY_PLEASE_LOCK_I_DRAG_CARD) && !is_drag) return; if (!CardOS.Instance.LOCK_APPLY(CardEventData.LOCK_EXCLUSIVE_CARD_ENUM.SORRY_PLEASE_LOCK_I_DRAG_CARD)) return; Sequence seq = DOTween.Sequence(); seq.Join(transform.DOMove(hover_position, hover_duration)); seq.Join(transform.DOScale(card_status.SCALE * 2f, hover_duration)); seq.Join(transform.DORotateQuaternion(hover_rotation, hover_duration)); sprite_renderer.sortingOrder = hover_layer_sort_order; canvas.sortingOrder = hover_layer_sort_order + 1; is_drag = true; } private void OnMouseUp() { Sequence seq = DOTween.Sequence(); seq.Join(transform.DOMove(card_status.POSITION, hover_duration)); seq.Join(transform.DOScale(card_status.SCALE, hover_duration)); seq.Join(transform.DORotateQuaternion(card_status.ROTATION, hover_duration)); seq.OnComplete(() => { CardOS.Instance.LOCK_RELEASE(CardEventData.LOCK_EXCLUSIVE_CARD_ENUM.SORRY_PLEASE_LOCK_I_DRAG_CARD); is_drag = false; }); sprite_renderer.sortingOrder = card_status.SORTING_ORDER; canvas.sortingOrder = card_status.SORTING_ORDER + 1; } // ************************** private void m_msg_draw_card() { CardOS.Instance.EVENT_REGISTER( CardEventData.EVENT_REGISTER_CARD_ENUM.EXCUSE_ME_PLEASE_LET_ME_DRAW_CARD, callback); void callback(CardEventData.STRUCT_EVENT_DRAW_CARD args) { // 不接受其他ID的卡牌以及其他消息 if (args.ID != ID) return; Vector3 move_position = args.POSITION; Quaternion rotation = args.ROTATION; float duration = args.DURATION; int layer_sort_order = args.LAYER_SORT_ORDER; move_position.z = -layer_sort_order * 0.5f; sprite_renderer.sortingOrder = layer_sort_order * 2; canvas.sortingOrder = layer_sort_order * 2 + 1; Sequence seq = DOTween.Sequence(); seq.Join(transform.DOMove(move_position, duration)); seq.Join(transform.DORotateQuaternion(rotation, duration)); seq.OnComplete(() => { // 记录默认数值 card_status.POSITION = move_position; card_status.ROTATION = rotation; card_status.SCALE = transform.localScale; card_status.SORTING_ORDER = layer_sort_order * 2; }); } } private void m_msg_drop_card() { // string event_name = "ExcuseMePleaseLetMeDropCard"; // CardEventSystem.Instance.event_register(event_name); } private void m_animation_drop_card() { } }