package magic.model.action;
import magic.model.MagicAbility;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicPermanentState;
import magic.model.MagicPlayer;
import magic.model.choice.MagicDeclareAttackersResult;
import magic.model.trigger.MagicTriggerType;
public class DeclareAttackersAction extends MagicAction {
private final MagicDeclareAttackersResult attackers;
private final MagicPlayer active;
public DeclareAttackersAction(final MagicPlayer player, final MagicDeclareAttackersResult result) {
active = player;
attackers = result;
}
@Override
public void doAction(final MagicGame game) {
// 508.1f The active player taps the chosen creatures.
for (final MagicPermanent attacker : attackers) {
if (!attacker.hasAbility(MagicAbility.Vigilance)) {
game.doAction(new TapAction(attacker));
}
}
// 508.1j Each chosen creature still controlled by the active player becomes an attacking creature.
for (final MagicPermanent attacker : attackers) {
if (attacker.getController() == active) {
game.doAction(new DeclareAttackerAction(attacker));
}
}
// 508.2. Any abilities that triggered on attackers being declared go on the stack.
for (final MagicPermanent attacker : attackers) {
if (attacker.hasState(MagicPermanentState.Attacking)) {
game.executeTrigger(MagicTriggerType.WhenAttacks,attacker);
}
}
}
@Override
public void undoAction(final MagicGame game) {
}
}