package forge.card.spellability; import forge.*; /** * <p>Abstract Ability_Activated class.</p> * * @author Forge * @version $Id: $ */ abstract public class Ability_Activated extends SpellAbility implements java.io.Serializable { /** Constant <code>serialVersionUID=1L</code> */ private static final long serialVersionUID = 1L; /** * <p>Constructor for Ability_Activated.</p> * * @param card a {@link forge.Card} object. * @param manacost a {@link java.lang.String} object. */ public Ability_Activated(Card card, String manacost) { this(card, new Cost(manacost, card.getName(), true), null); } /** * <p>Constructor for Ability_Activated.</p> * * @param sourceCard a {@link forge.Card} object. * @param abCost a {@link forge.card.spellability.Cost} object. * @param tgt a {@link forge.card.spellability.Target} object. */ public Ability_Activated(Card sourceCard, Cost abCost, Target tgt) { super(SpellAbility.Ability, sourceCard); setManaCost(abCost.getTotalMana()); setPayCosts(abCost); if (tgt != null && tgt.doesTarget()) setTarget(tgt); } /** {@inheritDoc} */ @Override public boolean canPlay() { if (AllZone.getStack().isSplitSecondOnStack()) return false; final Card c = getSourceCard(); if (c.isFaceDown() && isIntrinsic()) // Intrinsic abilities can't be activated by face down cards return false; if (c.hasKeyword("CARDNAME's activated abilities can't be activated.")) return false; CardList pithing = AllZoneUtil.getPlayerCardsInPlay(AllZone.getHumanPlayer()); pithing.addAll(AllZoneUtil.getPlayerCardsInPlay(AllZone.getComputerPlayer())); pithing = pithing.getName("Pithing Needle"); pithing = pithing.filter(new CardListFilter() { public boolean addCard(Card crd) { return crd.getSVar("PithingTarget").equals(c.getName()); } }); if (pithing.size() != 0) return false; if (!(getRestrictions().canPlay(c, this))) return false; return Cost_Payment.canPayAdditionalCosts(payCosts, this); } }