package magic.model.action;
import magic.ai.ArtificialScoringSystem;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicPermanentState;
import magic.model.trigger.MagicTriggerType;
// Must check if creature is untapped.
public class TapAction extends MagicAction {
private final MagicPermanent permanent;
private boolean isUntapped;
private final boolean hasScore;
public TapAction(final MagicPermanent permanent) {
this(permanent, true);
}
public static TapAction Enters(final MagicPermanent permanent) {
return new TapAction(permanent, false);
}
private TapAction(final MagicPermanent aPermanent,final boolean aHasScore) {
permanent = aPermanent;
hasScore = aHasScore;
}
@Override
public void doAction(final MagicGame game) {
isUntapped=!permanent.hasState(MagicPermanentState.Tapped);
if (isUntapped) {
permanent.setState(MagicPermanentState.Tapped);
if (hasScore) {
setScore(permanent.getController(),ArtificialScoringSystem.getTappedScore(permanent));
game.executeTrigger(MagicTriggerType.WhenBecomesTapped,permanent);
}
game.setStateCheckRequired();
}
}
@Override
public void undoAction(final MagicGame game) {
if (isUntapped) {
permanent.clearState(MagicPermanentState.Tapped);
}
}
@Override
public String toString() {
return getClass().getSimpleName()+" ("+permanent.getName()+')';
}
}