package magic.model.action; import java.util.LinkedList; import java.util.List; import magic.model.MagicCard; import magic.model.MagicCardList; import magic.model.MagicGame; import magic.model.MagicLocationType; import magic.model.MagicPermanent; import magic.model.MagicPlayer; public class ReturnLinkedExileAction extends MagicAction { private final MagicPermanent source; private final MagicLocationType location; private final MagicPlayer controller; private final List<MagicPermanentAction> modifications = new LinkedList<MagicPermanentAction>();; private MagicCardList exiledList; public ReturnLinkedExileAction(final MagicPermanent aSource, final MagicLocationType aLocation, final MagicPlayer aController) { source = aSource; location = aLocation; controller = aController; } public ReturnLinkedExileAction(final MagicPermanent source, final MagicLocationType location) { this(source, location, MagicPlayer.NONE); } public ReturnLinkedExileAction(final MagicPermanent aSource, final MagicLocationType aLocation, final MagicPlayer aController, final MagicPermanentAction aModification) { this(aSource, aLocation, aController); modifications.add(aModification); } public ReturnLinkedExileAction(final MagicPermanent source, final MagicLocationType location, final MagicPermanentAction aModification) { this(source, location); modifications.add(aModification); } @Override public void doAction(final MagicGame game) { final MagicCardList cardList = source.getExiledCards(); exiledList = new MagicCardList(source.getExiledCards()); for (final MagicCard card : cardList) { if (card.isInExile()) { if (location == MagicLocationType.Battlefield) { game.doAction(new ReturnCardAction( MagicLocationType.Exile, card, controller.isValid() ? controller : card.getOwner(), modifications )); } else { game.doAction(new ShiftCardAction(card,MagicLocationType.Exile,location)); } } } cardList.clear(); } @Override public void undoAction(final MagicGame game) { source.getExiledCards().addAll(exiledList); } }