From 439670269b2fb29b429b9c60d8916713e1b014bb Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 20 Oct 2011 21:00:59 +0000 Subject: [PATCH] "Agents of Orthanc" --- .../evaluator/CountCulturesEvaluator.java | 32 ++++++++++++++ .../lotro/cards/set6/isengard/Card6_057.java | 43 +++++++++++++++++++ .../logic/modifiers/KeywordModifier.java | 27 +++++++++--- 3 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CountCulturesEvaluator.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_057.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CountCulturesEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CountCulturesEvaluator.java new file mode 100644 index 000000000..3afd466ea --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CountCulturesEvaluator.java @@ -0,0 +1,32 @@ +package com.gempukku.lotro.cards.modifiers.evaluator; + +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Filterable; +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.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; + +import java.util.HashSet; +import java.util.Set; + +public class CountCulturesEvaluator implements Evaluator { + private Filterable[] _filters; + private int _multiplier; + private int _over; + + public CountCulturesEvaluator(int over, int multiplier, Filterable... filters) { + _over = over; + _multiplier = multiplier; + _filters = filters; + } + + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { + Set cultures = new HashSet(); + for (PhysicalCard physicalCard : Filters.filterActive(gameState, modifiersQuerying, _filters)) + cultures.add(physicalCard.getBlueprint().getCulture()); + return _multiplier * Math.max(0, cultures.size() - _over); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_057.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_057.java new file mode 100644 index 000000000..6148a7563 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_057.java @@ -0,0 +1,43 @@ +package com.gempukku.lotro.cards.set6.isengard; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountCulturesEvaluator; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Race; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; + +import java.util.LinkedList; +import java.util.List; + +/** + * Set: Ents of Fangorn + * Side: Shadow + * Culture: Isengard + * Twilight Cost: 5 + * Type: Minion • Man + * Strength: 9 + * Vitality: 3 + * Site: 3 + * Game Text: This minion is strength +2 and damage +1 for each Free Peoples culture that you can spot over 2. + */ +public class Card6_057 extends AbstractMinion { + public Card6_057() { + super(5, 9, 3, 3, Race.MAN, Culture.ISENGARD, "Agents of Orthanc"); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + List modifiers = new LinkedList(); + modifiers.add( + new StrengthModifier(self, self, null, new CountCulturesEvaluator(2, 2, Side.FREE_PEOPLE))); + modifiers.add( + new KeywordModifier(self, self, null, Keyword.DAMAGE, new CountCulturesEvaluator(2, 1, Side.FREE_PEOPLE))); + return modifiers; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/KeywordModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/KeywordModifier.java index b424059e3..8ae432413 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/KeywordModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/KeywordModifier.java @@ -4,25 +4,38 @@ import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; public class KeywordModifier extends AbstractModifier { private Keyword _keyword; - private int _count; + private Evaluator _evaluator; public KeywordModifier(PhysicalCard physicalCard, Filterable affectFilter, Keyword keyword) { this(physicalCard, affectFilter, keyword, 1); } public KeywordModifier(PhysicalCard physicalCard, Filterable affectFilter, Keyword keyword, int count) { - super(physicalCard, "Has " + keyword.getHumanReadable() + ((count > 1) ? (" +" + count) : ""), affectFilter, new ModifierEffect[]{ModifierEffect.KEYWORD_MODIFIER}); - _keyword = keyword; - _count = count; + this(physicalCard, affectFilter, null, keyword, count); } public KeywordModifier(PhysicalCard physicalCard, Filterable affectFilter, Condition condition, Keyword keyword, int count) { - super(physicalCard, "Has " + keyword.getHumanReadable() + ((count > 1) ? (" +" + count) : ""), affectFilter, condition, new ModifierEffect[]{ModifierEffect.KEYWORD_MODIFIER}); + this(physicalCard, affectFilter, condition, keyword, new ConstantEvaluator(count)); + } + + public KeywordModifier(PhysicalCard physicalCard, Filterable affectFilter, Condition condition, Keyword keyword, Evaluator evaluator) { + super(physicalCard, null, affectFilter, condition, new ModifierEffect[]{ModifierEffect.KEYWORD_MODIFIER}); _keyword = keyword; - _count = count; + _evaluator = evaluator; + } + + @Override + public String getText(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { + if (_keyword.isMultiples()) { + int count = _evaluator.evaluateExpression(gameState, modifiersQuerying, self); + return _keyword.getHumanReadable() + " +" + count; + } + return _keyword.getHumanReadable(); } @Override @@ -33,7 +46,7 @@ public class KeywordModifier extends AbstractModifier { @Override public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result) { if (keyword == _keyword) - return result + _count; + return result + _evaluator.evaluateExpression(gameState, modifiersQuerying, physicalCard); else return result; }