using System; using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; public class Card : MonoBehaviour { // ========= serializeField ======== [SerializeField] private int coast = 9; // ========= private ========= private int ID; 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 CardStatus card_status; private struct CardStatus { public Vector3 POSITION; public Quaternion ROTATION; public Vector3 SCALE; public int SORTING_ORDER; } // ========= debug ========= private readonly Vector3 debug_draw_position = Vector3.zero; private void Awake() { sprite_renderer = GetComponent(); canvas = transform.Find("Canvas").GetComponent(); if (canvas.renderMode == RenderMode.WorldSpace && canvas.worldCamera == null) { canvas.worldCamera = Camera.main; } card_status.SCALE = transform.localScale; transform.localScale = Vector3.zero; } public void SetID(int id) => ID = id; // ******* Mouse *********** // private void OnMouseDrag() // { // if (is_drag) return; // if (CombatScenarioEventOS.Instance.LOCK_GET(EVENT_EXCLUSIVE_LOCK.LOCK_I_DRAG_CARD) && !is_drag) return; // if (!CombatScenarioEventOS.Instance.LOCK_APPLY(EVENT_EXCLUSIVE_LOCK.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(() => // { // CombatScenarioEventOS.Instance.LOCK_RELEASE(EVENT_EXCLUSIVE_LOCK.LOCK_I_DRAG_CARD); // is_drag = false; // }); // sprite_renderer.sortingOrder = card_status.SORTING_ORDER; // canvas.sortingOrder = card_status.SORTING_ORDER + 1; // } // // ************************** public void DrawCard(EVENT_STRUCT.STRUCT_EVENT_CARD_DRAW_CARD args) { if (args.METHOD != EVENT_METHODS.POST) { Debug.LogError($"消息回调失败: [{args.GetType()}], 不允许的消息类型: {args.METHOD}"); return; } if (args.ID != ID) return; // 不接受其他ID的卡牌以及其他消息 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.DOScale(card_status.SCALE, duration)); seq.Join(transform.DORotateQuaternion(rotation, duration)); seq.OnComplete(() => { // 记录默认数值 card_status.POSITION = move_position; card_status.ROTATION = rotation; card_status.SORTING_ORDER = layer_sort_order * 2; }); } // private void register_drop_card(bool is_register = true) // 注册弃牌事件 // { // if (is_register) // CombatScenarioEventOS.Instance.EVENT_REGISTER // (EVENT_ENUM.EVENT_LET_CARD_DROP_SELF, callback); // else // CombatScenarioEventOS.Instance.EVENT_UNREGISTER // (EVENT_ENUM.EVENT_LET_CARD_DROP_SELF, callback); // // return; // // void callback(EVENT_STRUCT.STRUCT_EVENT_CARD_DROP_CARD args) // { // if (args.METHOD != EVENT_METHODS.DELETE) // { // Debug.LogError($"消息回调失败: [{args.GetType()}], 不允许的消息类型: {args.METHOD}"); // return; // } // // if (args.ID != ID) return; // 不接受其他ID的卡牌以及其他消息 // float duration_scale = args.DURATION / 3f; // float duration_move = args.DURATION - duration_scale; // Sequence seq = DOTween.Sequence(); // seq.Append(transform.DOScale(new Vector3(0.05f, 0.05f, 0.05f), duration_scale)); // seq.Append(DOTween.Sequence() // .Join(transform.DOMove(args.POSITION, duration_move)) // .Join(transform.DORotateQuaternion(Quaternion.identity, duration_move))); // seq.OnComplete(() => { Destroy(gameObject); }); // } // } }