From c3559c7621c34454b07d11bccd637a3e343fe933 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 24 Oct 2011 23:01:01 +0000 Subject: [PATCH] Changing KillEffect and DiscardCardsEffect to use single removeFromZone call. --- .../effects/DiscardCardsFromPlayEffect.java | 27 ++++++------ .../lotro/logic/effects/KillEffect.java | 42 ++++++++++++------- .../src/main/webapp/js/hallUi.js | 1 + 3 files changed, 41 insertions(+), 29 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java index 37f4f8eda..89c90e510 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java @@ -56,28 +56,27 @@ public class DiscardCardsFromPlayEffect extends AbstractPreventableCardEffect { @Override protected Collection playoutEffectOn(LotroGame game, Collection cards) { Set discardedCards = new HashSet(); + + Set toMoveFromZoneToDiscard = new HashSet(); + + GameState gameState = game.getGameState(); + for (PhysicalCard card : cards) { discardedCards.add(card); - - GameState gameState = game.getGameState(); - gameState.removeCardsFromZone(Collections.singleton(card)); - gameState.addCardToZone(game, card, Zone.DISCARD); + toMoveFromZoneToDiscard.add(card); List attachedCards = gameState.getAttachedCards(card); - for (PhysicalCard attachedCard : attachedCards) { - discardedCards.add(attachedCard); - - gameState.removeCardsFromZone(Collections.singleton(attachedCard)); - gameState.addCardToZone(game, attachedCard, Zone.DISCARD); - } + discardedCards.addAll(attachedCards); + toMoveFromZoneToDiscard.addAll(attachedCards); List stackedCards = gameState.getStackedCards(card); - for (PhysicalCard stackedCard : stackedCards) { - gameState.removeCardsFromZone(Collections.singleton(stackedCard)); - gameState.addCardToZone(game, stackedCard, Zone.DISCARD); - } + toMoveFromZoneToDiscard.addAll(stackedCards); } + gameState.removeCardsFromZone(toMoveFromZoneToDiscard); + for (PhysicalCard card : toMoveFromZoneToDiscard) + gameState.addCardToZone(game, card, Zone.DISCARD); + if (_source != null && discardedCards.size() > 0) game.getGameState().sendMessage(_source.getOwner() + " discards " + getAppendedNames(discardedCards) + " from play using " + GameUtils.getCardLink(_source)); return Collections.singleton(new DiscardCardsFromPlayResult(discardedCards)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java index 8a725c98e..0d2807acd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java @@ -38,38 +38,50 @@ public class KillEffect extends AbstractSuccessfulEffect { @Override public Collection playEffect(LotroGame game) { + GameState gameState = game.getGameState(); + + for (PhysicalCard card : _cards) + gameState.sendMessage(GameUtils.getCardLink(card) + " gets killed"); + + // For result Set discardedCards = new HashSet(); Set killedCards = new HashSet(); - GameState gameState = game.getGameState(); + // Prepare the moves + Set toRemoveFromZone = new HashSet(); + Set toAddToDeadPile = new HashSet(); + Set toAddToDiscard = new HashSet(); for (PhysicalCard card : _cards) { - gameState.sendMessage(GameUtils.getCardLink(card) + " gets killed"); - gameState.removeCardsFromZone(Collections.singleton(card)); + toRemoveFromZone.add(card); + if (card.getBlueprint().getSide() == Side.FREE_PEOPLE) { killedCards.add(card); - gameState.addCardToZone(game, card, Zone.DEAD); + toAddToDeadPile.add(card); } else { killedCards.add(card); discardedCards.add(card); - gameState.addCardToZone(game, card, Zone.DISCARD); + toAddToDiscard.add(card); } List attachedCards = gameState.getAttachedCards(card); - for (PhysicalCard attachedCard : attachedCards) { - discardedCards.add(attachedCard); - - gameState.removeCardsFromZone(Collections.singleton(attachedCard)); - gameState.addCardToZone(game, attachedCard, Zone.DISCARD); - } + discardedCards.addAll(attachedCards); + toRemoveFromZone.addAll(attachedCards); + toAddToDiscard.addAll(attachedCards); List stackedCards = gameState.getStackedCards(card); - for (PhysicalCard stackedCard : stackedCards) { - gameState.removeCardsFromZone(Collections.singleton(stackedCard)); - gameState.addCardToZone(game, stackedCard, Zone.DISCARD); - } + toRemoveFromZone.addAll(stackedCards); + toAddToDiscard.addAll(stackedCards); } + gameState.removeCardsFromZone(toRemoveFromZone); + + for (PhysicalCard deadCard : toAddToDeadPile) + gameState.addCardToZone(game, deadCard, Zone.DEAD); + + for (PhysicalCard discardedCard : toAddToDiscard) + gameState.addCardToZone(game, discardedCard, Zone.DISCARD); + if (killedCards.size() > 0 && discardedCards.size() > 0) { return Arrays.asList(new KillResult(killedCards), new DiscardCardsFromPlayResult(discardedCards)); } else if (killedCards.size() > 0) { diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/hallUi.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/hallUi.js index 03d19deb6..230aabfc1 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/hallUi.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/hallUi.js @@ -49,6 +49,7 @@ var GempLotrHallUI = Class.extend({ }); buttonsDiv.append(editDeck); + buttonsDiv.append(" | "); this.supportedFormatsSelect = $(""); this.supportedFormatsSelect.hide();