From e5b13e572dd56e0bc789282e4659ba6d98b9c1d7 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 31 Aug 2011 12:26:47 +0000 Subject: [PATCH] "Uruk Slayer" --- .../lotro/cards/effects/CheckLimitEffect.java | 37 ++++++++++++ .../lotro/cards/set1/isengard/Card1_153.java | 57 +++++++++++++++++++ .../logic/modifiers/DefaultLimitCounter.java | 11 ++++ .../lotro/logic/modifiers/LimitCounter.java | 5 ++ .../logic/modifiers/ModifiersEnvironment.java | 3 + .../lotro/logic/modifiers/ModifiersLogic.java | 20 +++++++ 6 files changed, 133 insertions(+) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckLimitEffect.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckLimitEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckLimitEffect.java new file mode 100644 index 000000000..76eaf3b76 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckLimitEffect.java @@ -0,0 +1,37 @@ +package com.gempukku.lotro.cards.effects; + +import com.gempukku.lotro.common.Phase; +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.timing.Effect; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; + +public class CheckLimitEffect extends UnrespondableEffect { + private CostToEffectAction _action; + private PhysicalCard _card; + private int _limit; + private Phase _phase; + private boolean _cost; + private Effect _limitedEffect; + + public CheckLimitEffect(CostToEffectAction action, PhysicalCard card, int limit, Phase phase, boolean cost, Effect limitedEffect) { + _card = card; + _limit = limit; + _phase = phase; + _limitedEffect = limitedEffect; + _action = action; + _cost = cost; + } + + @Override + public void playEffect(LotroGame game) { + int count = game.getModifiersEnvironment().getUntilEndOfPhaseLimitCounter(_card, _phase).incrementCounter(); + if (count <= _limit) { + if (_cost) + _action.addCost(_limitedEffect); + else + _action.addEffect(_limitedEffect); + } + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java new file mode 100644 index 000000000..6a736bd4d --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java @@ -0,0 +1,57 @@ +package com.gempukku.lotro.cards.set1.isengard; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.CheckLimitEffect; +import com.gempukku.lotro.cards.effects.RemoveTwilightEffect; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Phase; +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.timing.Action; + +import java.util.LinkedList; +import java.util.List; + +/** + * Set: The Fellowship of the Ring + * Side: Shadow + * Culture: Isengard + * Twilight Cost: 4 + * Type: Minion • Uruk-Hai + * Strength: 9 + * Vitality: 2 + * Site: 5 + * Game Text: Damage +1. Skirmish: Remove (1) to make this minion strength +1 (limit +3). + */ +public class Card1_153 extends AbstractMinion { + public Card1_153() { + super(4, 9, 2, 5, Culture.ISENGARD, "Uruk Slayer", "1_153"); + addKeyword(Keyword.URUK_HAI); + addKeyword(Keyword.DAMAGE); + } + + @Override + public List getPlayablePhaseActions(String playerId, LotroGame game, PhysicalCard self) { + List actions = new LinkedList(); + appendPlayMinionAction(actions, game, self); + + if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self, 1)) { + final CostToEffectAction action = new CostToEffectAction(self, "Remove (1) to make this minion strength +1 (limit +3)."); + action.addCost(new RemoveTwilightEffect(1)); + action.addEffect( + new CheckLimitEffect(action, self, 3, Phase.SKIRMISH, false, + new AddUntilEndOfPhaseModifierEffect( + new StrengthModifier(self, Filters.sameCard(self), 1), Phase.SKIRMISH))); + + actions.add(action); + } + + return actions; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java new file mode 100644 index 000000000..54b0e87a7 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java @@ -0,0 +1,11 @@ +package com.gempukku.lotro.logic.modifiers; + +public class DefaultLimitCounter implements LimitCounter { + private int _count; + + @Override + public int incrementCounter() { + _count++; + return _count; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java new file mode 100644 index 000000000..b67694ab7 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java @@ -0,0 +1,5 @@ +package com.gempukku.lotro.logic.modifiers; + +public interface LimitCounter { + public int incrementCounter(); +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java index d64d21d12..823c54137 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java @@ -1,8 +1,11 @@ package com.gempukku.lotro.logic.modifiers; import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.game.PhysicalCard; public interface ModifiersEnvironment { + public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase); + public ModifierHook addAlwaysOnModifier(Modifier modifier); public void addUntilStartOfPhaseModifier(Modifier modifier, Phase phase); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index 75f057a86..6b678f26c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -17,6 +17,23 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { private Set _skipSet = new HashSet(); + private Map> _counters = new HashMap>(); + + @Override + public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase) { + Map limitCounterMap = _counters.get(phase); + if (limitCounterMap == null) { + limitCounterMap = new HashMap(); + _counters.put(phase, limitCounterMap); + } + LimitCounter limitCounter = limitCounterMap.get(card); + if (limitCounter == null) { + limitCounter = new DefaultLimitCounter(); + limitCounterMap.put(card, limitCounter); + } + return limitCounter; + } + @Override public ModifierHook addAlwaysOnModifier(Modifier modifier) { _modifiers.add(modifier); @@ -29,6 +46,9 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { _modifiers.removeAll(list); list.clear(); } + Map counterMap = _counters.get(phase); + if (counterMap != null) + counterMap.clear(); } public void removeStartOfPhase(Phase phase) {