From 98bbc808e99a824ccc0907b2ebc1b4fae0b46d17 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Fri, 13 Apr 2012 10:18:32 +0000 Subject: [PATCH] Cards attached to cards, what is this world coming to... --- .../effects/TransferToSupportEffect.java | 14 +++++++++++-- .../gempukku/lotro/game/state/GameState.java | 21 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java index fea199054..fd3c0d9d2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java @@ -7,7 +7,9 @@ import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.results.CardTransferredResult; -import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class TransferToSupportEffect extends AbstractEffect { private PhysicalCard _card; @@ -35,8 +37,16 @@ public class TransferToSupportEffect extends AbstractEffect { protected FullEffectResult playEffectReturningResult(LotroGame game) { if (isPlayableInFull(game)) { PhysicalCard transferredFrom = _card.getAttachedTo(); - game.getGameState().removeCardsFromZone(_card.getOwner(), Collections.singleton(_card)); + + Set transferredCards = new HashSet(); + transferredCards.add(_card); + final List attachedCards = game.getGameState().getAttachedCards(_card); + transferredCards.addAll(attachedCards); + + game.getGameState().removeCardsFromZone(_card.getOwner(), transferredCards); game.getGameState().addCardToZone(game, _card, Zone.SUPPORT); + for (PhysicalCard attachedCard : attachedCards) + game.getGameState().attachCard(game, attachedCard, _card); game.getActionsEnvironment().emitEffectResult( new CardTransferredResult(_card, transferredFrom, null)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index 1e4f554f1..21ac914a4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -166,16 +166,29 @@ public class GameState { for (Map.Entry stringIntegerEntry : _playerPosition.entrySet()) listener.setPlayerPosition(stringIntegerEntry.getKey(), stringIntegerEntry.getValue()); + Set sentCardsFromPlay = new HashSet(); + Set attachedCardsToSend = new HashSet(); + // First non-attached cards for (PhysicalCardImpl physicalCard : _inPlay) { - if (physicalCard.getZone() != Zone.ATTACHED) + if (physicalCard.getZone() != Zone.ATTACHED) { listener.cardCreated(physicalCard); + sentCardsFromPlay.add(physicalCard); + } else + attachedCardsToSend.add(physicalCard); } // Now the attached ones - for (PhysicalCardImpl physicalCard : _inPlay) { - if (physicalCard.getZone() == Zone.ATTACHED) - listener.cardCreated(physicalCard); + while (!attachedCardsToSend.isEmpty()) { + Iterator iter = attachedCardsToSend.iterator(); + while (iter.hasNext()) { + PhysicalCard attachedCard = iter.next(); + if (sentCardsFromPlay.contains(attachedCard.getAttachedTo())) { + listener.cardCreated(attachedCard); + sentCardsFromPlay.add(attachedCard); + iter.remove(); + } + } } // Finally the stacked ones