From 9a64fb17fc63e22c4de6bd671ea41762fee58171 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 1 Sep 2011 01:33:44 +0000 Subject: [PATCH] "Tol Brandir" --- .../lotro/cards/set1/site/Card1_363.java | 98 +++++++++++++++++++ .../com/gempukku/lotro/common/Keyword.java | 2 +- .../effects/ChooseArbitraryCardsEffect.java | 12 ++- 3 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_363.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_363.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_363.java new file mode 100644 index 000000000..b46b57b21 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_363.java @@ -0,0 +1,98 @@ +package com.gempukku.lotro.cards.set1.site; + +import com.gempukku.lotro.cards.AbstractSite; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Phase; +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.ChooseArbitraryCardsEffect; +import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + * Set: The Fellowship of the Ring + * Twilight Cost: 9 + * Type: Site + * Site: 9 + * Game Text: River. Shadow: Play up to 3 trackers from your discard pile; end your Shadow phase. + */ +public class Card1_363 extends AbstractSite { + public Card1_363() { + super("Tol Brandir", 9, 9, Direction.LEFT); + addKeyword(Keyword.RIVER); + } + + @Override + public List getPlayablePhaseActions(final String playerId, final LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseSiteDuringPhase(game.getGameState(), Phase.SHADOW, self)) { + final CostToEffectAction action = new CostToEffectAction(self, Keyword.SHADOW, "Play up to 3 trackers from your discard pile; end your Shadow phase."); + action.addEffect( + new ChooseTrackerToPlay(action, game, 1, playerId, "Choose tracker to play", + new LinkedList(game.getGameState().getDiscard(playerId)), + Filters.and( + Filters.keyword(Keyword.TRACKER), + new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + List playableActions = physicalCard.getBlueprint().getPlayablePhaseActions(playerId, game, physicalCard); + return (playableActions != null && playableActions.size() > 0); + } + }), 0, 1)); + return Collections.singletonList(action); + } + return null; + } + + private class ChooseTrackerToPlay extends ChooseArbitraryCardsEffect { + private CostToEffectAction _action; + private LotroGame _game; + private int _count; + private String _playerId; + private String _choiceText; + private Filter _filter; + + private ChooseTrackerToPlay(CostToEffectAction action, LotroGame game, int count, String playerId, String choiceText, List cards, Filter filter, int minimum, int maximum) { + super(playerId, choiceText, cards, filter, minimum, maximum); + _action = action; + _game = game; + _count = count; + _playerId = playerId; + _choiceText = choiceText; + _filter = filter; + } + + @Override + protected void cardsSelected(List selectedCards) { + if (selectedCards.size() > 0) { + PhysicalCard selectedCard = selectedCards.get(0); + _game.getActionsEnvironment().addActionToStack(selectedCard.getBlueprint().getPlayablePhaseActions(_playerId, _game, selectedCard).get(0)); + + LinkedList remainingCards = new LinkedList(_game.getGameState().getDiscard(_playerId)); + remainingCards.remove(selectedCard); + if (_count < 3) + _action.addEffect(new ChooseTrackerToPlay(_action, _game, _count + 1, _playerId, _choiceText, remainingCards, _filter, 0, 1)); + else + _action.addEffect( + new AddUntilEndOfPhaseModifierEffect( + new AbstractModifier(null, "End Shadow Phase", null) { + @Override + public boolean canPlayAction(GameState gameState, ModifiersQuerying modifiersQuerying, Action action, boolean result) { + return false; + } + }, Phase.SHADOW + )); + } + } + } +} diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Keyword.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Keyword.java index 959b5fee1..b87df9a65 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Keyword.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Keyword.java @@ -16,7 +16,7 @@ public enum Keyword { RIVER("River"), PLAINS("Plains"), UNDERGROUND("Underground"), SANCTUARY("Sanctuary"), FOREST("Forest"), MARSH("Marsh"), MOUNTAIN("Mountain"), - DAMAGE("Damage"), DEFENDER("Defender"), FIERCE("Fierce"), ARCHER("Archer"), RANGER("Ranger"), + DAMAGE("Damage"), DEFENDER("Defender"), FIERCE("Fierce"), ARCHER("Archer"), RANGER("Ranger"), TRACKER("Tracker"), HAND_WEAPON("Hand Weapon"), ARMOR("Armor"), HELM("Helm"), MOUNT("Mount"), RANGED_WEAPON("Ranged Weapon"), CLOAK("Cloak"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseArbitraryCardsEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseArbitraryCardsEffect.java index 826f98f33..1c0868b61 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseArbitraryCardsEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseArbitraryCardsEffect.java @@ -1,5 +1,7 @@ package com.gempukku.lotro.logic.effects; +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.decisions.ArbitraryCardsSelectionDecision; @@ -12,26 +14,32 @@ public abstract class ChooseArbitraryCardsEffect extends UnrespondableEffect { private String _playerId; private String _choiceText; private List _cards; + private Filter _filter; private int _minimum; private int _maximum; public ChooseArbitraryCardsEffect(String playerId, String choiceText, List cards, int minimum, int maximum) { + this(playerId, choiceText, cards, Filters.any(), minimum, maximum); + } + + public ChooseArbitraryCardsEffect(String playerId, String choiceText, List cards, Filter filter, int minimum, int maximum) { _playerId = playerId; _choiceText = choiceText; _cards = cards; + _filter = filter; _minimum = minimum; _maximum = maximum; } @Override public boolean canPlayEffect(LotroGame game) { - return (_cards.size() >= _minimum); + return (Filters.filter(_cards, game.getGameState(), game.getModifiersQuerying(), _filter).size() >= _minimum); } @Override public void playEffect(LotroGame game) { game.getUserFeedback().sendAwaitingDecision(_playerId, - new ArbitraryCardsSelectionDecision(1, _choiceText, _cards, _minimum, _maximum) { + new ArbitraryCardsSelectionDecision(1, _choiceText, Filters.filter(_cards, game.getGameState(), game.getModifiersQuerying(), _filter), _minimum, _maximum) { @Override public void decisionMade(String result) throws DecisionResultInvalidException { cardsSelected(getSelectedCardsByResponse(result));