using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace TcgEngine.UI
{
///
/// Can display a deck in the UI
/// Only shows a few cards and the total amount of cards
///
public class DeckDisplay : MonoBehaviour
{
public Text deck_title;
public Text card_count;
public CardUI[] ui_cards;
private string deck_id;
void Awake()
{
Clear();
}
void Update()
{
}
public void Clear()
{
if (deck_title != null)
deck_title.text = "";
if (card_count != null)
card_count.text = "";
foreach (CardUI card in ui_cards)
card.Hide();
}
public void SetDeck(string tid)
{
UserData user = Authenticator.Get().UserData;
UserDeckData udeck = user.GetDeck(tid);
DeckData ddeck = DeckData.Get(tid);
if (udeck != null)
SetDeck(udeck);
else if (ddeck != null)
SetDeck(ddeck);
else
Clear();
}
public void SetDeck(UserDeckData deck)
{
Clear();
if (deck != null)
{
deck_id = deck.tid;
if (deck_title != null)
deck_title.text = deck.title;
if (card_count != null)
{
card_count.text = deck.GetQuantity().ToString() + " / " + GameplayData.Get().deck_size.ToString();
card_count.color = deck.GetQuantity() >= GameplayData.Get().deck_size ? Color.white : Color.red;
}
List cards = new List();
foreach (UserCardData ucard in deck.cards)
{
CardDataQ card = new CardDataQ();
card.card = CardData.Get(ucard.tid);
card.variant = VariantData.Get(ucard.variant);
card.quantity = ucard.quantity;
if (card.card != null)
cards.Add(card);
}
ShowCards(cards);
}
gameObject.SetActive(deck != null);
}
public void SetDeck(DeckData deck)
{
Clear();
if (deck != null)
{
deck_id = deck.id;
if (deck_title != null)
deck_title.text = deck.title;
if (card_count != null)
{
card_count.text = deck.GetQuantity().ToString() + " / " + GameplayData.Get().deck_size.ToString();
card_count.color = deck.GetQuantity() >= GameplayData.Get().deck_size ? Color.white : Color.red;
}
List dcards = new List();
VariantData variant = VariantData.GetDefault();
foreach (CardData icard in deck.cards)
{
if (icard != null)
{
CardDataQ card = new CardDataQ();
card.card = icard;
card.variant = variant;
card.quantity = 1;
dcards.Add(card);
}
}
if (deck is DeckPuzzleData)
{
DeckPuzzleData pdeck = (DeckPuzzleData)deck;
foreach (DeckCardSlot slot in pdeck.board_cards)
{
if (slot.card != null)
{
CardDataQ card = new CardDataQ();
card.card = slot.card;
card.variant = variant;
card.quantity = 1;
dcards.Add(card);
}
}
}
ShowCards(dcards);
}
gameObject.SetActive(deck != null);
}
public void ShowCards(List cards)
{
cards.Sort((CardDataQ a, CardDataQ b) => { return b.card.mana.CompareTo(a.card.mana); });
int index = 0;
foreach (CardDataQ icard in cards)
{
for (int i = 0; i < icard.quantity; i++)
{
if (index < ui_cards.Length)
{
CardUI card_ui = ui_cards[index];
card_ui.SetCard(icard.card, icard.variant);
index++;
}
}
}
}
public void Hide()
{
gameObject.SetActive(false);
}
public string GetDeck()
{
return deck_id;
}
}
}