* Hollow One - Fixed counting of discarded/cycled cards if returned to hand during a turn.

This commit is contained in:
LevelX2 2017-12-28 16:52:51 +01:00
parent 6d17199129
commit d808b15569
2 changed files with 28 additions and 14 deletions

View file

@ -28,9 +28,12 @@
package mage.watchers.common;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import mage.MageObjectReference;
import mage.cards.Card;
import mage.cards.Cards;
import mage.cards.CardsImpl;
@ -47,6 +50,7 @@ import mage.watchers.Watcher;
public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher {
private final Map<UUID, Cards> cycledOrDiscardedCardsThisTurn = new HashMap<>();
private final Map<UUID, Set<MageObjectReference>> numberOfCycledOrDiscardedCardsThisTurn = new HashMap<>();
public CardsCycledOrDiscardedThisTurnWatcher() {
super(CardsCycledOrDiscardedThisTurnWatcher.class.getSimpleName(), WatcherScope.GAME);
@ -57,11 +61,17 @@ public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher {
for (Entry<UUID, Cards> entry : watcher.cycledOrDiscardedCardsThisTurn.entrySet()) {
cycledOrDiscardedCardsThisTurn.put(entry.getKey(), entry.getValue().copy());
}
for (Entry<UUID, Set<MageObjectReference>> entry : watcher.numberOfCycledOrDiscardedCardsThisTurn.entrySet()) {
Set<MageObjectReference> cycledOrDiscardedCards = new HashSet<>();
cycledOrDiscardedCards.addAll(entry.getValue());
numberOfCycledOrDiscardedCardsThisTurn.put(entry.getKey(), cycledOrDiscardedCards);
}
numberOfCycledOrDiscardedCardsThisTurn.putAll(watcher.numberOfCycledOrDiscardedCardsThisTurn);
}
@Override
public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.DISCARDED_CARD
if (event.getType() == GameEvent.EventType.DISCARDED_CARD
|| event.getType() == GameEvent.EventType.CYCLED_CARD
&& event.getPlayerId() != null) {
Card card = game.getCard(event.getTargetId());
@ -69,6 +79,12 @@ public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher {
Cards c = getCardsCycledOrDiscardedThisTurn(event.getPlayerId());
c.add(card);
cycledOrDiscardedCardsThisTurn.put(event.getPlayerId(), c);
Set<MageObjectReference> cycledOrDiscardedCards = numberOfCycledOrDiscardedCardsThisTurn.get(event.getPlayerId());
if (cycledOrDiscardedCards == null) {
cycledOrDiscardedCards = new HashSet<>();
numberOfCycledOrDiscardedCardsThisTurn.put(event.getPlayerId(), cycledOrDiscardedCards);
}
cycledOrDiscardedCards.add(new MageObjectReference(card, game));
}
}
}
@ -77,10 +93,18 @@ public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher {
return cycledOrDiscardedCardsThisTurn.getOrDefault(playerId, new CardsImpl());
}
public int getNumberOfCardsCycledOrDiscardedThisTurn(UUID playerId) {
if (numberOfCycledOrDiscardedCardsThisTurn.containsKey(playerId)) {
return numberOfCycledOrDiscardedCardsThisTurn.get(playerId).size();
}
return 0;
}
@Override
public void reset() {
super.reset();
cycledOrDiscardedCardsThisTurn.clear();
numberOfCycledOrDiscardedCardsThisTurn.clear();
}
@Override