package magic.model.phase;
import magic.model.MagicAbility;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicPermanentState;
import magic.model.MagicPlayer;
import magic.model.action.ChangeStateAction;
import magic.model.action.UntapAction;
import magic.model.trigger.MagicTriggerType;
public class MagicUntapPhase extends MagicPhase {
private static final MagicPhase INSTANCE=new MagicUntapPhase();
private MagicUntapPhase() {
super(MagicPhaseType.Untap);
}
public static MagicPhase getInstance() {
return INSTANCE;
}
private static void untap(final MagicGame game) {
final MagicPlayer player=game.getTurnPlayer();
for (final MagicPermanent permanent : player.getPermanents()) {
if (permanent.hasState(MagicPermanentState.Summoned)) {
game.doAction(ChangeStateAction.Clear(permanent,MagicPermanentState.Summoned));
game.doAction(ChangeStateAction.Set(permanent,MagicPermanentState.MustPayEchoCost));
}
if (permanent.hasState(MagicPermanentState.DoesNotUntapDuringNext)) {
game.doAction(ChangeStateAction.Clear(permanent,MagicPermanentState.DoesNotUntapDuringNext));
} else if (permanent.isTapped() && !permanent.hasAbility(MagicAbility.DoesNotUntap)) {
game.doAction(new UntapAction(permanent));
}
}
}
@Override
public void executeBeginStep(final MagicGame game) {
game.executeTrigger(MagicTriggerType.AtUntap, game.getTurnPlayer());
untap(game);
game.setStep(MagicStep.NextPhase);
}
}