From 08616b6ec9a537c17e3791c54216bc10d9118015 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 20 Apr 2019 09:00:04 +0400 Subject: [PATCH] * Mind's Desire - improved exile windows; --- Mage.Sets/src/mage/cards/m/MindsDesire.java | 18 +++++++------ Mage/src/main/java/mage/game/Exile.java | 30 ++++++++++++--------- Mage/src/main/java/mage/game/ExileZone.java | 22 +++++++++++---- Mage/src/main/java/mage/game/GameState.java | 1 + 4 files changed, 46 insertions(+), 25 deletions(-) diff --git a/Mage.Sets/src/mage/cards/m/MindsDesire.java b/Mage.Sets/src/mage/cards/m/MindsDesire.java index 49f6b5ac8d3..b270cd023c5 100644 --- a/Mage.Sets/src/mage/cards/m/MindsDesire.java +++ b/Mage.Sets/src/mage/cards/m/MindsDesire.java @@ -1,7 +1,5 @@ - package mage.cards.m; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.AsThoughEffectImpl; import mage.abilities.effects.ContinuousEffect; @@ -19,8 +17,9 @@ import mage.players.Player; import mage.target.targetpointer.FixedTargets; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author emerald000 */ public final class MindsDesire extends CardImpl { @@ -68,11 +67,14 @@ class MindsDesireEffect extends OneShotEffect { controller.shuffleLibrary(source, game); Card card = controller.getLibrary().getFromTop(game); if (card != null) { - UUID exileId = UUID.randomUUID(); - controller.moveCardsToExile(card, source, game, true, exileId, CardUtil.createObjectRealtedWindowTitle(source, game, null)); - ContinuousEffect effect = new MindsDesireCastFromExileEffect(); - effect.setTargetPointer(new FixedTargets(game.getExile().getExileZone(exileId).getCards(game), game)); - game.addEffect(effect, source); + UUID exileId = CardUtil.getExileZoneId(controller.getId().toString() + "-" + game.getState().getTurnNum() + "-" + MindsDesire.class.toString(), game); + String exileName = "Mind's Desire free cast on " + game.getState().getTurnNum() + " turn for " + controller.getName(); + game.getExile().createZone(exileId, exileName).setCleanupOnEndTurn(true); + if (controller.moveCardsToExile(card, source, game, true, exileId, exileName)) { + ContinuousEffect effect = new MindsDesireCastFromExileEffect(); + effect.setTargetPointer(new FixedTargets(game.getExile().getExileZone(exileId).getCards(game), game)); + game.addEffect(effect, source); + } } return true; } diff --git a/Mage/src/main/java/mage/game/Exile.java b/Mage/src/main/java/mage/game/Exile.java index 304bbe07ec7..a8a4474e402 100644 --- a/Mage/src/main/java/mage/game/Exile.java +++ b/Mage/src/main/java/mage/game/Exile.java @@ -1,22 +1,15 @@ - package mage.game; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; -import java.util.stream.Collectors; - import mage.cards.Card; import mage.filter.FilterCard; import mage.util.Copyable; +import java.io.Serializable; +import java.util.*; +import java.util.Map.Entry; +import java.util.stream.Collectors; + /** - * * @author BetaSteward_at_googlemail.com */ public class Exile implements Serializable, Copyable { @@ -114,4 +107,17 @@ public class Exile implements Serializable, Copyable { exile.clear(); } } + + public void cleanupEndOfTurnZones(Game game) { + // moves cards from outdated zone to main exile zone + ExileZone mainZone = getExileZone(PERMANENT); + for (ExileZone zone : exileZones.values()) { + if (zone.isCleanupOnEndTurn()) { + for (Card card : zone.getCards(game)) { + mainZone.add(card); + zone.remove(card); + } + } + } + } } diff --git a/Mage/src/main/java/mage/game/ExileZone.java b/Mage/src/main/java/mage/game/ExileZone.java index 2b9395ee122..451d2bb249d 100644 --- a/Mage/src/main/java/mage/game/ExileZone.java +++ b/Mage/src/main/java/mage/game/ExileZone.java @@ -1,13 +1,10 @@ - - package mage.game; -import java.util.UUID; - import mage.cards.CardsImpl; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public class ExileZone extends CardsImpl { @@ -15,16 +12,22 @@ public class ExileZone extends CardsImpl { private UUID id; private String name; private boolean hidden; + private boolean cleanupOnEndTurn = false; // moved cards from that zone to default on end of turn (to cleanup exile windows) public ExileZone(UUID id, String name) { this(id, name, false); } public ExileZone(UUID id, String name, boolean hidden) { + this(id, name, false, false); + } + + public ExileZone(UUID id, String name, boolean hidden, boolean cleanupOnEndTurn) { super(); this.id = id; this.name = name; this.hidden = hidden; + this.cleanupOnEndTurn = cleanupOnEndTurn; } public ExileZone(final ExileZone zone) { @@ -32,6 +35,7 @@ public class ExileZone extends CardsImpl { this.id = zone.id; this.name = zone.name; this.hidden = zone.hidden; + this.cleanupOnEndTurn = zone.cleanupOnEndTurn; } public UUID getId() { @@ -46,6 +50,14 @@ public class ExileZone extends CardsImpl { return hidden; } + public boolean isCleanupOnEndTurn() { + return cleanupOnEndTurn; + } + + public void setCleanupOnEndTurn(boolean cleanupOnEndTurn) { + this.cleanupOnEndTurn = cleanupOnEndTurn; + } + @Override public ExileZone copy() { return new ExileZone(this); diff --git a/Mage/src/main/java/mage/game/GameState.java b/Mage/src/main/java/mage/game/GameState.java index fb7f030e747..1c71d6c6f27 100644 --- a/Mage/src/main/java/mage/game/GameState.java +++ b/Mage/src/main/java/mage/game/GameState.java @@ -579,6 +579,7 @@ public class GameState implements Serializable, Copyable { public void removeEotEffects(Game game) { effects.removeEndOfTurnEffects(); delayed.removeEndOfTurnAbilities(); + exile.cleanupEndOfTurnZones(game); game.applyEffects(); }