From 2a345430fb7a8d065da0d7e9fd5fc4ebc16ee999 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Fri, 14 Oct 2011 13:23:54 +0000 Subject: [PATCH] Returning cards to hand fixing. --- .../effects/ReturnCardsToHandEffect.java | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java index d1c31cda9..a6b93f029 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java @@ -10,7 +10,10 @@ import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class ReturnCardsToHandEffect extends AbstractEffect { private PhysicalCard _source; @@ -40,32 +43,45 @@ public class ReturnCardsToHandEffect extends AbstractEffect { protected FullEffectResult playEffectReturningResult(LotroGame game) { Collection cardsToReturnToHand = Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filter); - Set discardedCards = new HashSet(); + // Preparation, figure out, what's going where... + Set stoppedAffecting = new HashSet(); + Set discardedFromPlay = new HashSet(); + Set removedFromZone = new HashSet(); + for (PhysicalCard card : cardsToReturnToHand) { + final List attachedCards = game.getGameState().getAttachedCards(card); - GameState gameState = game.getGameState(); - gameState.stopAffecting(card); - gameState.removeCardsFromZone(Collections.singleton(card)); - gameState.addCardToZone(card, Zone.HAND); + stoppedAffecting.add(card); + stoppedAffecting.addAll(attachedCards); - List attachedCards = gameState.getAttachedCards(card); - for (PhysicalCard attachedCard : attachedCards) { - discardedCards.add(attachedCard); + discardedFromPlay.addAll(attachedCards); - gameState.stopAffecting(attachedCard); - gameState.removeCardsFromZone(Collections.singleton(attachedCard)); - gameState.addCardToZone(attachedCard, Zone.DISCARD); - } - - List stackedCards = gameState.getStackedCards(card); - for (PhysicalCard stackedCard : stackedCards) { - gameState.removeCardsFromZone(Collections.singleton(stackedCard)); - gameState.addCardToZone(stackedCard, Zone.DISCARD); - } + removedFromZone.add(card); + removedFromZone.addAll(attachedCards); + removedFromZone.addAll(game.getGameState().getStackedCards(card)); } - if (discardedCards.size() > 0) - return new FullEffectResult(new EffectResult[]{new DiscardCardsFromPlayResult(discardedCards)}, true, true); + discardedFromPlay.removeAll(cardsToReturnToHand); + + // Now do the actual things + GameState gameState = game.getGameState(); + // Stop affecting + for (PhysicalCard card : stoppedAffecting) + gameState.stopAffecting(card); + + // Remove from their zone + gameState.removeCardsFromZone(removedFromZone); + + // Add cards to hand + for (PhysicalCard card : cardsToReturnToHand) + gameState.addCardToZone(card, Zone.HAND); + + // Add discarded to discard + for (PhysicalCard card : discardedFromPlay) + gameState.addCardToZone(card, Zone.DISCARD); + + if (discardedFromPlay.size() > 0) + return new FullEffectResult(new EffectResult[]{new DiscardCardsFromPlayResult(discardedFromPlay)}, true, true); return new FullEffectResult(null, true, true); }