using System.Collections; using System.Collections.Generic; using UnityEngine; using TcgEngine.Client; namespace TcgEngine.Client { /// /// Same as HandCardArea but for the opponents hand /// Simpler version with display only (no draging of card) /// public class OpponentHand : MonoBehaviour { public GameObject card_prefab; public RectTransform card_area; public float card_spacing = 100f; public float card_angle = 10f; public float card_offset_y = 10f; [Header("Cardback Settings")] [Tooltip("是否使用路径方式加载卡背图片")] public bool usePathMode = false; [Tooltip("卡背图片路径,仅在 usePathMode 为 true 时使用")] public string cardback_path = ""; private List cards = new List(); void Start() { } void Update() { if (!GameClient.Get().IsReady()) return; Game gdata = GameClient.Get().GetGameData(); Player player = gdata.GetPlayer(GameClient.Get().GetOpponentPlayerID()); if (cards.Count < player.cards_hand.Count) { GameObject new_card = Instantiate(card_prefab, card_area); HandCardBack hand_card = new_card.GetComponent(); // 根据设置选择加载方式 if (usePathMode && !string.IsNullOrEmpty(cardback_path)) { // 使用路径方式 hand_card.SetCardbackPath(cardback_path); } else { // 使用传统的 CardbackData 方式 CardbackData cbdata = CardbackData.Get(player.cardback); hand_card.SetCardback(cbdata); } RectTransform card_rect = new_card.GetComponent(); card_rect.anchoredPosition = new Vector2(0f, 100f); cards.Add(hand_card); } if (cards.Count > player.cards_hand.Count) { HandCardBack card = cards[cards.Count - 1]; cards.RemoveAt(cards.Count - 1); Destroy(card.gameObject); } int nb_cards = Mathf.Min(cards.Count, player.cards_hand.Count); for (int i = 0; i < nb_cards; i++) { HandCardBack card = cards[i]; RectTransform crect = card.GetRect(); float half = nb_cards / 2f; Vector3 tpos = new Vector3((i - half) * card_spacing, (i - half) * (i - half) * card_offset_y); float tangle = (i - half) * card_angle; crect.anchoredPosition = Vector3.Lerp(crect.anchoredPosition, tpos, 4f * Time.deltaTime); card.transform.localRotation = Quaternion.Slerp(card.transform.localRotation, Quaternion.Euler(0f, 0f, tangle), 4f * Time.deltaTime); } } } }