diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect.java new file mode 100644 index 000000000..744b2bb44 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect.java @@ -0,0 +1,48 @@ +package com.gempukku.lotro.cards.effects; + +import com.gempukku.lotro.common.Filterable; +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.StrengthModifier; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; +import com.gempukku.lotro.logic.timing.AbstractEffect; + +public class SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect extends AbstractEffect { + private PhysicalCard _source; + private Filterable[] _filters; + private Evaluator _evaluator; + + public SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect(PhysicalCard source, Evaluator evaluator, Filterable... filter) { + _source = source; + _evaluator = evaluator; + _filters = filter; + } + + @Override + public String getText(LotroGame game) { + return "Apply strength modifier"; + } + + @Override + protected FullEffectResult playEffectReturningResult(LotroGame game) { + for (PhysicalCard physicalCard : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filters)) { + final int modifier = _evaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), physicalCard); + if (modifier != 0) + game.getModifiersEnvironment().addUntilEndOfPhaseModifier( + new StrengthModifier(_source, physicalCard, modifier), game.getGameState().getCurrentPhase()); + } + + return new FullEffectResult(true); + } + + @Override + public Type getType() { + return null; + } + + @Override + public boolean isPlayableInFull(LotroGame game) { + return true; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/VitalityEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/VitalityEvaluator.java new file mode 100644 index 000000000..ea27e34b9 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/VitalityEvaluator.java @@ -0,0 +1,25 @@ +package com.gempukku.lotro.cards.modifiers.evaluator; + +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; + +public class VitalityEvaluator implements Evaluator { + private int _multiplier; + private PhysicalCard _physicalCard; + + public VitalityEvaluator(PhysicalCard physicalCard) { + this(physicalCard, 1); + } + + public VitalityEvaluator(PhysicalCard physicalCard, int multiplier) { + _physicalCard = physicalCard; + _multiplier = multiplier; + } + + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) { + return _multiplier * modifiersQuerying.getVitality(gameState, _physicalCard); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set0/gondor/Card0_058.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set0/gondor/Card0_058.java index 45088a9b4..784aaa143 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set0/gondor/Card0_058.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set0/gondor/Card0_058.java @@ -2,18 +2,14 @@ package com.gempukku.lotro.cards.set0.gondor; import com.gempukku.lotro.cards.AbstractCompanion; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect; -import com.gempukku.lotro.cards.modifiers.evaluator.SingleMemoryEvaluator; +import com.gempukku.lotro.cards.modifiers.evaluator.VitalityEvaluator; import com.gempukku.lotro.common.*; 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.ActivateCardAction; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; -import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import java.util.Collections; import java.util.List; @@ -43,15 +39,9 @@ public class Card0_058 extends AbstractCompanion { action.appendCost( new ChooseAndPlayCardFromHandEffect(playerId, game, Culture.GONDOR, CardType.EVENT, Keyword.SKIRMISH)); action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(self, Filters.in(Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.and(CardType.MINION, Filters.inSkirmishAgainst(self)))), null, - new SingleMemoryEvaluator( - new Evaluator() { - @Override - public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) { - return -modifiersQuerying.getVitality(game.getGameState(), self); - } - })), Phase.SKIRMISH)); + new SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect(self, + new VitalityEvaluator(self, -1), + CardType.MINION, Filters.inSkirmishAgainst(self))); return Collections.singletonList(action); } return null;