package forge.card.spellability;
import com.esotericsoftware.minlog.Log;
import forge.*;
/**
* <p>Abstract Ability class.</p>
*
* @author Forge
* @version $Id: $
*/
abstract public class Ability extends SpellAbility {
//Slight hack for Pithing Needle
private String sourceCardName;
/**
* <p>Constructor for Ability.</p>
*
* @param sourceCard a {@link forge.Card} object.
* @param manaCost a {@link java.lang.String} object.
*/
public Ability(Card sourceCard, String manaCost) {
super(SpellAbility.Ability, sourceCard);
setManaCost(manaCost);
sourceCardName = sourceCard.getName();
}
/**
* <p>Constructor for Ability.</p>
*
* @param sourceCard a {@link forge.Card} object.
* @param manaCost a {@link java.lang.String} object.
* @param stackDescription a {@link java.lang.String} object.
*/
public Ability(Card sourceCard, String manaCost, String stackDescription) {
this(sourceCard, manaCost);
setStackDescription(stackDescription);
Log.debug("an ability is being played from" + sourceCard.getName());
}
/** {@inheritDoc} */
@Override
public boolean canPlay() {
if (AllZone.getStack().isSplitSecondOnStack()) 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 c) {
return c.getSVar("PithingTarget").equals(sourceCardName);
}
});
return AllZoneUtil.isCardInPlay(getSourceCard()) && !getSourceCard().isFaceDown() && getSourceCard().getName().equals("Spreading Seas") == false && pithing.size() == 0;
}
}