diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java index 6f93e17c0..95399c490 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java @@ -152,10 +152,16 @@ public abstract class AbstractLotroCardBlueprint implements LotroCardBlueprint { return null; } + @Override public List getPhaseActionsFromStacked(String playerId, LotroGame game, PhysicalCard self) { return null; } + @Override + public List getPhaseActionsFromDiscard(String playerId, LotroGame game, PhysicalCard self) { + return null; + } + @Override public List getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) { return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java index 4b7027af5..fad5715ff 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java @@ -75,6 +75,10 @@ public class PlayConditions { && twilightCost <= gameState.getTwilightPool(); } + public static boolean isPhase(LotroGame game, Phase phase) { + return (game.getGameState().getCurrentPhase() == phase); + } + public static boolean canUseStackedFPCardDuringPhase(GameState gameState, Phase phase, PhysicalCard self) { return (phase == null || gameState.getCurrentPhase() == phase) && self.getZone() == Zone.STACKED; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gollum/Card7_058.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gollum/Card7_058.java new file mode 100644 index 000000000..b696e41fd --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gollum/Card7_058.java @@ -0,0 +1,45 @@ +package com.gempukku.lotro.cards.set7.gollum; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.effects.PlayCardEffect; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Set: The Return of the King + * Side: Shadow + * Culture: Gollum + * Twilight Cost: 2 + * Type: Minion + * Strength: 5 + * Vitality: 4 + * Site: 3 + * Game Text: If you have initiative during the Shadow phase, you may play this minion from your discard pile. + */ +public class Card7_058 extends AbstractMinion { + public Card7_058() { + super(2, 5, 4, 3, null, Culture.GOLLUM, "Gollum", true); + } + + @Override + public List getPhaseActionsFromDiscard(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.isPhase(game, Phase.SHADOW) + && PlayConditions.hasInitiative(game, Side.SHADOW) + && PlayConditions.canPlayFromDiscard(playerId, game, self)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendEffect( + new PlayCardEffect(self)); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java index 2d8d404bd..d14be5969 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java @@ -56,6 +56,8 @@ public interface LotroCardBlueprint { public List getPhaseActionsFromStacked(String playerId, LotroGame game, PhysicalCard self); + public List getPhaseActionsFromDiscard(String playerId, LotroGame game, PhysicalCard self); + public List getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self); public List getOptionalBeforeTriggers(String playerId, LotroGame game, Effect effect, PhysicalCard self); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index dcab43e6b..e41f996c7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -462,8 +462,20 @@ public class GameState { public boolean iterateStackedActivableCards(String player, PhysicalCardVisitor physicalCardVisitor) { for (PhysicalCardImpl physicalCard : _stacked.get(player)) { - if (physicalCardVisitor.visitPhysicalCard(physicalCard)) - return true; + Side playerSide = player.equals(getCurrentPlayerId()) ? Side.FREE_PEOPLE : Side.SHADOW; + if (physicalCard.getBlueprint().getSide() == playerSide) + if (physicalCardVisitor.visitPhysicalCard(physicalCard)) + return true; + } + return false; + } + + public boolean iterateDiscardActivableCards(String player, PhysicalCardVisitor physicalCardVisitor) { + for (PhysicalCardImpl physicalCard : _discards.get(player)) { + Side playerSide = player.equals(getCurrentPlayerId()) ? Side.FREE_PEOPLE : Side.SHADOW; + if (physicalCard.getBlueprint().getSide() == playerSide) + if (physicalCardVisitor.visitPhysicalCard(physicalCard)) + return true; } return false; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java index 5e238af13..742bcb4f0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java @@ -11,6 +11,7 @@ import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.ActionStack; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.processes.GatherPlayableActionsFromDiscardVisitor; import com.gempukku.lotro.logic.timing.processes.GatherPlayableActionsFromStackedVisitor; import com.gempukku.lotro.logic.timing.processes.GatherPlayableActionsVisitor; import com.gempukku.lotro.logic.timing.rules.CharacterDeathRule; @@ -204,6 +205,9 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { GatherPlayableActionsFromStackedVisitor stackedVisitor = new GatherPlayableActionsFromStackedVisitor(_lotroGame, playerId); _lotroGame.getGameState().iterateStackedActivableCards(playerId, stackedVisitor); + GatherPlayableActionsFromDiscardVisitor discardVisitor = new GatherPlayableActionsFromDiscardVisitor(_lotroGame, playerId); + _lotroGame.getGameState().iterateDiscardActivableCards(playerId, discardVisitor); + List playableActions = new LinkedList(); for (Action action : visitor.getActions()) { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/GatherPlayableActionsFromDiscardVisitor.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/GatherPlayableActionsFromDiscardVisitor.java new file mode 100644 index 000000000..40aea1086 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/GatherPlayableActionsFromDiscardVisitor.java @@ -0,0 +1,32 @@ +package com.gempukku.lotro.logic.timing.processes; + +import com.gempukku.lotro.game.CompletePhysicalCardVisitor; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.LinkedList; +import java.util.List; + +public class GatherPlayableActionsFromDiscardVisitor extends CompletePhysicalCardVisitor { + private LotroGame _game; + private String _playerId; + + private List _actions = new LinkedList(); + + public GatherPlayableActionsFromDiscardVisitor(LotroGame game, String playerId) { + _game = game; + _playerId = playerId; + } + + @Override + protected void doVisitPhysicalCard(PhysicalCard physicalCard) { + List list = physicalCard.getBlueprint().getPhaseActionsFromDiscard(_playerId, _game, physicalCard); + if (list != null) + _actions.addAll(list); + } + + public List getActions() { + return _actions; + } +}