package dev.llan.model.cards;
import dev.llan.utils.MathUtil;
import static dev.llan.model.cards.Constants.*;
public class Hand {
private IndexedCard[] cards;
private Deck deck;
public Hand() {
cards = new IndexedCard[MAX_HAND_CARDS];
}
public void initHand(CardCollection collection) {
this.updateDeck(collection);
cards = deck.selectHand();
for(int i = 0; i < cards.length; i++) {
int currentIndex = i;
cards[i].card().setOnPlayed(() -> this.playedCard(currentIndex));
}
}
private void updateDeck(CardCollection cardCollection) {
deck = cardCollection.createNewDeck();
}
public Card cardAt(int index) {
assert MathUtil.within(index, 0, MAX_HAND_CARDS - 1);
return cards[index].card();
}
public void playedCard(int index) {
assert MathUtil.within(index, 0, MAX_HAND_CARDS - 1);
cards[index].card().clearOnPlayed();
deck.addUnusedCard(cards[index].card());
cards[index] = deck.selectOne();
cards[index].card().setOnPlayed(() -> this.playedCard(index));
}
public void updatePlayableCards(double mana) {
for(IndexedCard card : cards) {
if(card.card().getCost() > mana) {
card.card().setCanPlay(false);
} else {
card.card().setCanPlay(true);
}
}
}
public Hand clone(CardCollection clonedCollection) {
Hand clone = new Hand();
for(int i = 0; i < MAX_HAND_CARDS; i++) {
int index = this.cards[i].deckIndex();
clone.cards[i] = new IndexedCard(clonedCollection.getCardAt(index), index);
}
return clone;
}
}