"Doors of Durin"

This commit is contained in:
marcins78@gmail.com
2012-01-16 11:36:47 +00:00
parent e2bdc24080
commit 3cb51cf20f

View File

@@ -0,0 +1,67 @@
package com.gempukku.lotro.cards.set13.site;
import com.gempukku.lotro.cards.AbstractNewSite;
import com.gempukku.lotro.cards.modifiers.conditions.NotCondition;
import com.gempukku.lotro.cards.modifiers.conditions.PhaseCondition;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import java.util.HashMap;
import java.util.Map;
/**
* Set: Bloodlines
* Twilight Cost: 0
* Type: Site
* Game Text: Marsh. Each companion of a race that has the most companions is strength -1 until the regroup phase.
*/
public class Card13_190 extends AbstractNewSite {
public Card13_190() {
super("Doors of Durin", 0, Direction.LEFT);
addKeyword(Keyword.MARSH);
}
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new StrengthModifier(self,
Filters.and(CardType.COMPANION,
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
final Race race = physicalCard.getBlueprint().getRace();
if (race != null && isRaceMostCommonRaceAmongCompanions(gameState, modifiersQuerying, race))
return true;
return false;
}
}), new NotCondition(new PhaseCondition(Phase.REGROUP)), -1);
}
private boolean isRaceMostCommonRaceAmongCompanions(GameState gameState, ModifiersQuerying modifiersQuerying, Race race) {
Map<Race, Integer> counts = new HashMap<Race, Integer>();
for (PhysicalCard companion : Filters.filterActive(gameState, modifiersQuerying, CardType.COMPANION)) {
final Race companionRace = companion.getBlueprint().getRace();
if (companionRace != null) {
Integer count = counts.get(companionRace);
if (count == null)
count = 0;
counts.put(companionRace, count + 1);
}
}
final Integer thisRaceCount = counts.get(race);
for (Map.Entry<Race, Integer> raceCount : counts.entrySet()) {
if (raceCount.getValue() > thisRaceCount)
return false;
}
return true;
}
}