package com.vdom.core; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import com.vdom.api.ActionCard; import com.vdom.api.Card; public class VariableCardPile extends AbstractCardPile { HashMap<String, SingleCardPile> piles; public VariableCardPile(PileType piletype, int count) { this.type = piletype; this.cards = new ArrayList<Card>(); this.piles = new HashMap<String, SingleCardPile>(); // TODO: put in checks to make sure template card is never // "put into play". switch (this.type) { case RuinsPile: cards = this.generateRuinsPile(count); break; case KnightsPile: for (Card c: Cards.knightsCards) { cards.add(c); } Collections.shuffle(cards); break; default: break; } } @Override public Card card() { if (cards.isEmpty()) { switch (type) { case RuinsPile: return Cards.virtualRuins; case KnightsPile: return Cards.virtualKnight; default: return null; } } if (piles.isEmpty()) { return null; } return piles.get(topCard().getName()).card(); } public void addLinkedPile(SingleCardPile p) { this.piles.put(p.card().getName(), p); } @Override public void addCard(Card card) { ActionCard ac = null; if (card instanceof ActionCard) { ac = (ActionCard) card; } else return; piles.get(card.getName()).addCard(card); switch (type) { case KnightsPile: if (ac.isKnight()) { cards.add(0, card); } break; case RuinsPile: if (ac.isRuins()) { cards.add(0, card); } break; default: break; } } @Override public Card removeCard() { if (cards.isEmpty()) { return null; } return cards.remove(0); } private ArrayList<Card> generateRuinsPile(int count) { ArrayList<Card> ruins = new ArrayList<Card>(); ArrayList<Card> ret = new ArrayList<Card>(); for (int i = 0; i < 10; i++) { ruins.add(Cards.abandonedMine); ruins.add(Cards.ruinedLibrary); ruins.add(Cards.ruinedMarket); ruins.add(Cards.ruinedVillage); ruins.add(Cards.survivors); } Collections.shuffle(ruins); for (Card c : ruins) { ret.add(c); if (ret.size() >= count) break; } return ret; } public SingleCardPile getTopLinkedPile() { if (topCard() == null) return null; return piles.get(topCard().getName()); } private Card topCard() { if (cards.isEmpty()) return null; return cards.get(0); } }