Changing KillEffect and DiscardCardsEffect to use single removeFromZone call.

This commit is contained in:
marcins78@gmail.com
2011-10-24 23:01:01 +00:00
parent ef1a899801
commit c3559c7621
3 changed files with 41 additions and 29 deletions

View File

@@ -56,28 +56,27 @@ public class DiscardCardsFromPlayEffect extends AbstractPreventableCardEffect {
@Override
protected Collection<? extends EffectResult> playoutEffectOn(LotroGame game, Collection<PhysicalCard> cards) {
Set<PhysicalCard> discardedCards = new HashSet<PhysicalCard>();
Set<PhysicalCard> toMoveFromZoneToDiscard = new HashSet<PhysicalCard>();
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<PhysicalCard> 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<PhysicalCard> 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));

View File

@@ -38,38 +38,50 @@ public class KillEffect extends AbstractSuccessfulEffect {
@Override
public Collection<? extends EffectResult> playEffect(LotroGame game) {
GameState gameState = game.getGameState();
for (PhysicalCard card : _cards)
gameState.sendMessage(GameUtils.getCardLink(card) + " gets killed");
// For result
Set<PhysicalCard> discardedCards = new HashSet<PhysicalCard>();
Set<PhysicalCard> killedCards = new HashSet<PhysicalCard>();
GameState gameState = game.getGameState();
// Prepare the moves
Set<PhysicalCard> toRemoveFromZone = new HashSet<PhysicalCard>();
Set<PhysicalCard> toAddToDeadPile = new HashSet<PhysicalCard>();
Set<PhysicalCard> toAddToDiscard = new HashSet<PhysicalCard>();
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<PhysicalCard> 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<PhysicalCard> 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) {

View File

@@ -49,6 +49,7 @@ var GempLotrHallUI = Class.extend({
});
buttonsDiv.append(editDeck);
buttonsDiv.append(" | ");
this.supportedFormatsSelect = $("<select></select>");
this.supportedFormatsSelect.hide();