package mw.server.card.gold.ugw;
import mw.server.list.CardList;
import mw.server.list.CardListFilter;
import mw.server.model.Ability;
import mw.server.model.Card;
import mw.server.model.Spell;
import mw.server.model.SpellAbility;
import mw.server.model.cost.ManaCost;
import mw.server.ChoiceCommand;
import mw.server.GameManager;
import mw.server.MWPlayer;
@SuppressWarnings("serial")
public class Wargate {
public static Card getCard(final GameManager game, final Card card) {
final SpellAbility searchAbility = new Ability(card, "0") {
public void resolve() {
if (getTargetCard() != null) {
int pid = getSourceCard().getControllerID();
MWPlayer p = game.getPlayerById(pid);
Card c = getTargetCard();
p.removeFromLibrary(c);
p.shuffleLibrary();
game.getManager().revealCard(c);
game.getBattlefield().addPermanent(c);
}
}
};
/**
* Forms the list of permanent cards with converted mana cost X or less
*/
final ChoiceCommand runtime = new ChoiceCommand() {
public void execute() {
int aid = card.getControllerID();
CardList permanents = game.getPlayerById(aid).getLibrary().getCardList();
final int X = card.getSpellAbility()[0].getXValue();
permanents = permanents.filter(new CardListFilter() {
@Override
public boolean addCard(Card c) {
ManaCost manaCost = new ManaCost(c.getManaCost());
return c.isPermanent() && manaCost.getConverted() <= X;
}
});
setInputChoice(permanents);
}
};
final SpellAbility spell = new Spell(card) {
public void resolve() {
searchAbility.setChoiceCommand(runtime);
searchAbility.setNeedsToChooseCard(true);
game.getPlayerById(card.getControllerID()).getGameStatistics().setSearchedLibraryForCardThisTurn(true);
game.getStack().add(searchAbility);
}
};
spell.setStackDescription(card + ": Search your library for a permanent card with converted mana cost X or less, put it into play, then shuffle your library.");
spell.setNeedsToChooseX(true);
card.clearSpellAbility();
card.addSpellAbility(spell);
return card;
}
}
|