using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TcgEngine.UI; namespace TcgEngine.Client { /// /// Represents the visual deck on the board /// Will show number of cards in deck/discard when hovering /// public class BoardDeck : MonoBehaviour { public bool opponent; public UIPanel hover_panel; public SpriteRenderer deck_render; public Text deck_value; public Text discard_value; private bool hover = false; private string prev_deck_path = null; void Start() { if (GameTool.IsMobile()) { hover_panel?.SetVisible(true); } } void Update() { Refresh(); } private void Refresh() { if (!GameClient.Get().IsReady()) return; Player player = opponent ? GameClient.Get().GetOpponentPlayer() : GameClient.Get().GetPlayer(); if (player == null) return; CardbackData cb = CardbackData.Get(player.cardback); string targetDeckPath = cb != null && !string.IsNullOrEmpty(cb.deck_path) ? cb.deck_path : "Cardbacks/Load_card_group.png"; if (deck_render != null && (deck_render.sprite == null || prev_deck_path != targetDeckPath)) { Sprite sprite = SpriteLoader.Get()?.LoadSprite(targetDeckPath); if (sprite != null) { deck_render.sprite = sprite; deck_render.gameObject.transform.localScale = Vector3.one; prev_deck_path = targetDeckPath; } else { Debug.LogWarning($"[BoardDeck] {(opponent ? "敌方" : "我方")} 牌组图片加载失败: {targetDeckPath}"); } } if (deck_value != null) deck_value.text = player.cards_deck.Count.ToString(); if (discard_value != null) discard_value.text = player.cards_discard.Count.ToString(); } public void ShowDeckCards() { Player player = GameClient.Get().GetPlayer(); CardSelector.Get().Show(player.cards_deck, "DECK"); } public void ShowDiscardCards() { Player player = opponent ? GameClient.Get().GetOpponentPlayer() : GameClient.Get().GetPlayer(); CardSelector.Get().Show(player.cards_discard, "DISCARD"); } private void ShowHover(bool hover) { if(!GameTool.IsMobile()) hover_panel?.SetVisible(hover); } private void OnMouseEnter() { hover = true; ShowHover(hover); Refresh(); } private void OnMouseExit() { hover = false; ShowHover(hover); } private void OnDisable() { hover = false; ShowHover(hover); } private void OnMouseOver() { if (!opponent && Input.GetMouseButtonDown(0)) ShowDeckCards(); //Cannot see opponent deck else if(Input.GetMouseButtonDown(1)) ShowDiscardCards(); //Cant see both player discard } } }