From 3a6080facdf02eb56aada480365b074cb4e8471d Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 29 Aug 2011 13:57:29 +0000 Subject: [PATCH] Simplifying Modifiers. --- .../OverwhelmedByMultiplierModifier.java | 22 +++ .../cards/modifiers/StrengthModifier.java | 2 +- .../cards/modifiers/VitalityModifier.java | 23 +++ .../gempukku/lotro/cards/set1/Card1_001.java | 28 ++-- .../gempukku/lotro/cards/set1/Card1_002.java | 21 ++- .../lotro/cards/set1/dwarven/Card1_008.java | 11 +- .../lotro/cards/set1/dwarven/Card1_014.java | 29 +--- .../lotro/cards/set1/dwarven/Card1_021.java | 2 +- .../lotro/cards/set1/elven/Card1_041.java | 2 +- .../lotro/cards/set1/isengard/Card1_146.java | 2 +- .../com/gempukku/lotro/common/Keyword.java | 2 + .../logic/modifiers/CompositeModifier.java | 133 ++++++++++++++++++ .../logic}/modifiers/KeywordModifier.java | 4 +- .../logic/modifiers/TwilightCostModifier.java | 19 +++ .../lotro/logic/timing/rules/RoamingRule.java | 32 +++-- 15 files changed, 248 insertions(+), 84 deletions(-) create mode 100644 gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java create mode 100644 gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/VitalityModifier.java create mode 100644 gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java rename gemp-lotr/{lotro-cards/src/main/java/com/gempukku/lotro/cards => lotro-logic/src/main/java/com/gempukku/lotro/logic}/modifiers/KeywordModifier.java (82%) create mode 100644 gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/TwilightCostModifier.java diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java new file mode 100644 index 000000000..93285a40b --- /dev/null +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java @@ -0,0 +1,22 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; + +public class OverwhelmedByMultiplierModifier extends AbstractModifier { + private int _multiplier; + + public OverwhelmedByMultiplierModifier(PhysicalCard source, Filter affectFilter, int multiplier) { + super(source, "Cannot be overwhelmed unless his strength is *" + multiplier, affectFilter); + _multiplier = multiplier; + } + + @Override + public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result) { + return (opposingStrength >= strength * _multiplier); + } + +} diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java index 21eca82c8..91a05486e 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java @@ -10,7 +10,7 @@ public class StrengthModifier extends AbstractModifier { private int _modifier; public StrengthModifier(PhysicalCard source, Filter affectFilter, int modifier) { - super(source, "Strength +" + modifier, affectFilter); + super(source, "Strength " + ((modifier < 0) ? modifier : ("+" + modifier)), affectFilter); _modifier = modifier; } diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/VitalityModifier.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/VitalityModifier.java new file mode 100644 index 000000000..49a233f12 --- /dev/null +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/VitalityModifier.java @@ -0,0 +1,23 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; + +public class VitalityModifier extends AbstractModifier { + private int _modifier; + + public VitalityModifier(PhysicalCard source, Filter affectFilter, int modifier) { + super(source, "Vitality " + ((modifier < 0) ? modifier : ("+" + modifier)), affectFilter); + _modifier = modifier; + } + + @Override + public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { + if (affectsCard(gameState, modifiersQuerying, physicalCard)) + return result + _modifier; + return result; + } +} diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java index 393bca094..733f46638 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java @@ -4,6 +4,8 @@ import com.gempukku.lotro.cards.AbstractLotroCardBlueprint; import com.gempukku.lotro.cards.effects.AddBurdenEffect; import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect; import com.gempukku.lotro.cards.effects.CancelEffect; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.VitalityModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; @@ -11,12 +13,11 @@ import com.gempukku.lotro.common.Side; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.CompositeModifier; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; @@ -40,22 +41,13 @@ public class Card1_001 extends AbstractLotroCardBlueprint { @Override public Modifier getAlwaysOnEffect(PhysicalCard self) { - return new AbstractModifier(self, "Adds +1 Str and +1 Vit, bearer is Ring-Bound and Ring-Bearer", Filters.sameCard(self.getAttachedTo())) { - @Override - public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { - return (result || (keyword == Keyword.RING_BOUND || keyword == Keyword.RING_BEARER)); - } + List modifiers = new LinkedList(); + modifiers.add(new StrengthModifier(null, null, 1)); + modifiers.add(new VitalityModifier(null, null, 1)); + modifiers.add(new KeywordModifier(null, null, Keyword.RING_BEARER)); + modifiers.add(new KeywordModifier(null, null, Keyword.RING_BOUND)); - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + 1; - } - - @Override - public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + 1; - } - }; + return new CompositeModifier(self, Filters.sameCard(self.getAttachedTo()), modifiers); } @Override diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java index ed575c027..1844f3cf8 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java @@ -4,6 +4,7 @@ import com.gempukku.lotro.cards.AbstractLotroCardBlueprint; import com.gempukku.lotro.cards.effects.AddBurdenEffect; import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect; import com.gempukku.lotro.cards.effects.CancelEffect; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; @@ -11,12 +12,11 @@ import com.gempukku.lotro.common.Side; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.CompositeModifier; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; @@ -40,17 +40,12 @@ public class Card1_002 extends AbstractLotroCardBlueprint { @Override public Modifier getAlwaysOnEffect(PhysicalCard self) { - return new AbstractModifier(self, "Adds +1 Str, bearer is Ring-Bound and Ring-Bearer", Filters.sameCard(self.getAttachedTo())) { - @Override - public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { - return (result || (keyword == Keyword.RING_BOUND || keyword == Keyword.RING_BEARER)); - } + List modifiers = new LinkedList(); + modifiers.add(new StrengthModifier(null, null, 1)); + modifiers.add(new KeywordModifier(null, null, Keyword.RING_BEARER)); + modifiers.add(new KeywordModifier(null, null, Keyword.RING_BOUND)); - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + 1; - } - }; + return new CompositeModifier(self, Filters.sameCard(self.getAttachedTo()), modifiers); } @Override diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_008.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_008.java index 197b39ca3..fec7aa644 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_008.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_008.java @@ -1,16 +1,14 @@ package com.gempukku.lotro.cards.set1.dwarven; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; +import com.gempukku.lotro.cards.modifiers.OverwhelmedByMultiplierModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; 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.game.state.LotroGame; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import java.util.LinkedList; @@ -44,11 +42,6 @@ public class Card1_008 extends AbstractAttachableFPPossession { @Override public Modifier getAlwaysOnEffect(PhysicalCard self) { - return new AbstractModifier(self, "Bearer may not be overwhelmed unless his strength is tripled", Filters.sameCard(self.getAttachedTo())) { - @Override - public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result) { - return (opposingStrength >= strength * 3); - } - }; + return new OverwhelmedByMultiplierModifier(self, Filters.sameCard(self.getAttachedTo()), 3); } } diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_014.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_014.java index 809a27a0a..816d32b44 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_014.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_014.java @@ -2,19 +2,19 @@ package com.gempukku.lotro.cards.set1.dwarven; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; 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.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.WoundEffect; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.CompositeModifier; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; @@ -52,25 +52,10 @@ public class Card1_014 extends AbstractAttachableFPPossession { @Override public Modifier getAlwaysOnEffect(PhysicalCard self) { - return new AbstractModifier(self, "Strength +2, Damage +1", Filters.sameCard(self.getAttachedTo())) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + 2; - } - - @Override - public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result) { - if (keyword == Keyword.DAMAGE) - return result + 1; - else - return result; - } - - @Override - public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { - return (result || keyword == Keyword.DAMAGE); - } - }; + List modifiers = new LinkedList(); + modifiers.add(new StrengthModifier(null, null, 2)); + modifiers.add(new KeywordModifier(null, null, Keyword.DAMAGE)); + return new CompositeModifier(self, Filters.sameCard(self.getAttachedTo()), modifiers); } @Override diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_021.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_021.java index d3702155c..e273a0d87 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_021.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_021.java @@ -2,11 +2,11 @@ package com.gempukku.lotro.cards.set1.dwarven; import com.gempukku.lotro.cards.AbstractLotroCardBlueprint; import com.gempukku.lotro.cards.actions.PlayPermanentFromHandAction; -import com.gempukku.lotro.cards.modifiers.KeywordModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; 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 com.gempukku.lotro.logic.timing.Action; diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_041.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_041.java index 6cee63fcb..3e266c869 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_041.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_041.java @@ -1,13 +1,13 @@ package com.gempukku.lotro.cards.set1.elven; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; -import com.gempukku.lotro.cards.modifiers.KeywordModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; 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 com.gempukku.lotro.logic.timing.Action; diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java index 07a53cda1..a5f2ce528 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java +++ b/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java @@ -2,7 +2,6 @@ package com.gempukku.lotro.cards.set1.isengard; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.KeywordModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; @@ -11,6 +10,7 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.timing.Action; import java.util.LinkedList; diff --git a/gemp-lotr/lotro-common/src/main/java/com/gempukku/lotro/common/Keyword.java b/gemp-lotr/lotro-common/src/main/java/com/gempukku/lotro/common/Keyword.java index db5b58910..dcd2e6e2a 100644 --- a/gemp-lotr/lotro-common/src/main/java/com/gempukku/lotro/common/Keyword.java +++ b/gemp-lotr/lotro-common/src/main/java/com/gempukku/lotro/common/Keyword.java @@ -8,6 +8,8 @@ public enum Keyword { RING_BOUND, RING_BEARER, + ROAMING, + WEATHER, TALE, RIVER, PLAINS, UNDERGROUND, diff --git a/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java new file mode 100644 index 000000000..41ba0c233 --- /dev/null +++ b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java @@ -0,0 +1,133 @@ +package com.gempukku.lotro.logic.modifiers; + +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; + +import java.util.List; + +public class CompositeModifier implements Modifier { + private PhysicalCard _source; + private Filter _affectFilter; + private List _modifiers; + + public CompositeModifier(PhysicalCard source, Filter affectFilter, List modifiers) { + _source = source; + _affectFilter = affectFilter; + _modifiers = modifiers; + } + + @Override + public PhysicalCard getSource() { + return _source; + } + + @Override + public String getText() { + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (Modifier modifier : _modifiers) { + if (!first) + sb.append(", "); + sb.append(modifier.getText()); + first = false; + } + + return sb.toString(); + } + + @Override + public boolean affectsCard(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return _affectFilter.accepts(gameState, modifiersQuerying, physicalCard); + } + + @Override + public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { + for (Modifier modifier : _modifiers) + result = modifier.hasKeyword(gameState, modifiersQuerying, physicalCard, keyword, result); + + return result; + } + + @Override + public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result) { + for (Modifier modifier : _modifiers) + result = modifier.getKeywordCount(gameState, modifiersQuerying, physicalCard, keyword, result); + + return result; + } + + @Override + public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { + for (Modifier modifier : _modifiers) + result = modifier.getStrength(gameState, modifiersQuerying, physicalCard, result); + + return result; + } + + @Override + public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { + for (Modifier modifier : _modifiers) + result = modifier.getVitality(gameState, modifiersQuerying, physicalCard, result); + + return result; + } + + @Override + public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { + for (Modifier modifier : _modifiers) + result = modifier.getTwilightCost(gameState, modifiersQuerying, physicalCard, result); + + return result; + } + + @Override + public int getPlayOnTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, PhysicalCard target, int result) { + for (Modifier modifier : _modifiers) + result = modifier.getPlayOnTwilightCost(gameState, modifiersQuerying, physicalCard, target, result); + + return result; + } + + @Override + public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result) { + for (Modifier modifier : _modifiers) + result = modifier.isOverwhelmedByStrength(gameState, modifiersQuerying, physicalCard, strength, opposingStrength, result); + + return result; + } + + @Override + public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result) { + for (Modifier modifier : _modifiers) + result = modifier.canTakeWound(gameState, modifiersQuerying, physicalCard, result); + + return result; + } + + @Override + public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite) { + for (Modifier modifier : _modifiers) + allyOnCurrentSite = modifier.isAllyOnCurrentSite(gameState, modifiersQuerying, card, allyOnCurrentSite); + + return allyOnCurrentSite; + } + + @Override + public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result) { + for (Modifier modifier : _modifiers) + result = modifier.getArcheryTotal(gameState, modifiersQuerying, side, result); + + return result; + } + + @Override + public int getMoveLimit(GameState gameState, ModifiersQuerying modifiersQuerying, int result) { + for (Modifier modifier : _modifiers) + result = modifier.getMoveLimit(gameState, modifiersQuerying, result); + + return result; + } +} diff --git a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/KeywordModifier.java b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/KeywordModifier.java similarity index 82% rename from gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/KeywordModifier.java rename to gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/KeywordModifier.java index 923a659c1..52c4e71f8 100644 --- a/gemp-lotr/lotro-cards/src/main/java/com/gempukku/lotro/cards/modifiers/KeywordModifier.java +++ b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/KeywordModifier.java @@ -1,11 +1,9 @@ -package com.gempukku.lotro.cards.modifiers; +package com.gempukku.lotro.logic.modifiers; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; public class KeywordModifier extends AbstractModifier { private Keyword _keyword; diff --git a/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/TwilightCostModifier.java b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/TwilightCostModifier.java new file mode 100644 index 000000000..1899ab4ab --- /dev/null +++ b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/modifiers/TwilightCostModifier.java @@ -0,0 +1,19 @@ +package com.gempukku.lotro.logic.modifiers; + +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; + +public class TwilightCostModifier extends AbstractModifier { + private int _twilightCostModifier; + + public TwilightCostModifier(PhysicalCard source, Filter affectFilter, int twilightCostModifier) { + super(source, "Twilight cost " + ((twilightCostModifier < 0) ? twilightCostModifier : ("+" + twilightCostModifier)), affectFilter); + _twilightCostModifier = twilightCostModifier; + } + + @Override + public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int result) { + return result + _twilightCostModifier; + } +} diff --git a/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/RoamingRule.java b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/RoamingRule.java index 646bd5063..4a3b7ca72 100644 --- a/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/RoamingRule.java +++ b/gemp-lotr/lotro-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/RoamingRule.java @@ -1,13 +1,15 @@ package com.gempukku.lotro.logic.timing.rules; import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Keyword; 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.AbstractModifier; -import com.gempukku.lotro.logic.modifiers.ModifiersLogic; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.*; + +import java.util.LinkedList; +import java.util.List; public class RoamingRule { private ModifiersLogic _modifiersLogic; @@ -17,18 +19,18 @@ public class RoamingRule { } public void applyRule() { + Filter roamingFilter = Filters.and(Filters.type(CardType.MINION), new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return (physicalCard.getBlueprint().getSiteNumber() > gameState.getCurrentSiteNumber()); + } + }); + + List modifiers = new LinkedList(); + modifiers.add(new KeywordModifier(null, null, Keyword.ROAMING)); + modifiers.add(new TwilightCostModifier(null, null, 2)); + _modifiersLogic.addAlwaysOnModifier( - new AbstractModifier(null, "Roaming - +2 Twilight cost", Filters.and(Filters.type(CardType.MINION), new Filter() { - @Override - public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return (physicalCard.getBlueprint().getSiteNumber() > gameState.getCurrentSiteNumber()); - } - })) { - @Override - public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int result) { - return 2 + result; - } - } - ); + new CompositeModifier(null, roamingFilter, modifiers)); } }