2025-11-18 18:53:06 +08:00

145 lines
5.5 KiB
C#

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<SpriteRenderer>();
canvas = transform.Find("Canvas").GetComponent<Canvas>();
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_STRUCT.STRUCT_EVENT_CARD_DROP_CARD>
// (EVENT_ENUM.EVENT_LET_CARD_DROP_SELF, callback);
// else
// CombatScenarioEventOS.Instance.EVENT_UNREGISTER<EVENT_STRUCT.STRUCT_EVENT_CARD_DROP_CARD>
// (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); });
// }
// }
}