Files
tcg-client/Assets/TcgEngine/Scripts/GameClient/BoardDeck.cs

116 lines
3.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TcgEngine.UI;
namespace TcgEngine.Client
{
/// <summary>
/// Represents the visual deck on the board
/// Will show number of cards in deck/discard when hovering
/// </summary>
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
}
}
}