Consolidated ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck into ShuffleCardsFromPlayIntoDrawDeck

This commit is contained in:
Christian 'ketura' McCarty
2024-06-01 16:21:46 -05:00
parent 84536eed09
commit 077c068951
5 changed files with 24 additions and 64 deletions

View File

@@ -749,7 +749,7 @@
type: event
effect: [
{
type: shuffleCardsFromPlayAndStackedOnThemIntoDrawDeck
type: ShuffleCardsFromPlayIntoDrawDeck
select: choose(culture(dwarven),condition)
count: any
}
@@ -792,9 +792,9 @@
},
effect: [
{
type: shuffleCardsFromPlayAndStackedOnThemIntoDrawDeck
type: ShuffleCardsFromPlayIntoDrawDeck
select: choose(culture(dwarven),condition)
memorizeStackedCards: stackedCards
memorizeStacked: stackedCards
}
{
type: repeat

View File

@@ -173,7 +173,6 @@ public class EffectAppenderFactory {
effectAppenderProducers.put("shufflecardsfromdiscardintodrawdeck", new ShuffleCardsFromDiscardIntoDrawDeck());
effectAppenderProducers.put("shufflecardsfromhandintodrawdeck", new ShuffleCardsFromHandIntoDrawDeck());
effectAppenderProducers.put("shufflecardsfromplayintodrawdeck", new ShuffleCardsFromPlayIntoDrawDeck());
effectAppenderProducers.put("shufflecardsfromplayandstackedonthemintodrawdeck", new ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck());
effectAppenderProducers.put("shuffledeck", new ShuffleDeck());
effectAppenderProducers.put("shufflehandintodrawdeck", new ShuffleHandIntoDrawDeck());
effectAppenderProducers.put("spot", new Spot());

View File

@@ -25,7 +25,7 @@ public class RevealCardsFromAdventureDeck implements EffectAppenderProducer {
final String player = FieldUtils.getString(effectObject.get("player"), "player", "you");
final String select = FieldUtils.getString(effectObject.get("select"), "select");
if (select == null)
throw new InvalidCardDefinitionException("Filter is required");
throw new InvalidCardDefinitionException("'select' is required for RevealCardsFromAdventureDeck effect.");
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp");
final ValueSource countSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);

View File

@@ -1,57 +0,0 @@
package com.gempukku.lotro.cards.build.field.effect.appender;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.effects.ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect;
import com.gempukku.lotro.logic.timing.Effect;
import org.json.simple.JSONObject;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "memorize", "memorizeStackedCards");
String player = FieldUtils.getString(effectObject.get("player"), "player", "you");
final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment);
final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)");
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp");
final String memorizeStackedCards = FieldUtils.getString(effectObject.get("memorizeStackedCards"), "memorizeStackedCards");
MultiEffectAppender result = new MultiEffectAppender();
result.addEffectAppender(
CardResolver.resolveCards(select, valueSource, memorize, player, "Choose cards to shuffle into your deck", environment));
result.addEffectAppender(
new DelayedAppender() {
@Override
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
final Collection<? extends PhysicalCard> cardsInPlay = actionContext.getCardsFromMemory(memorize);
if (memorizeStackedCards != null) {
GameState gameState = actionContext.getGame().getGameState();
Set<PhysicalCard> stackedCards = new HashSet<>();
cardsInPlay.forEach(card -> stackedCards.addAll(gameState.getStackedCards(card)));
actionContext.setCardMemory(memorizeStackedCards, stackedCards);
}
return new ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay);
}
});
return result;
}
}

View File

@@ -8,23 +8,29 @@ import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolve
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.effects.ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect;
import com.gempukku.lotro.logic.effects.ShuffleCardsFromPlayIntoDeckEffect;
import com.gempukku.lotro.logic.timing.Effect;
import org.json.simple.JSONObject;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class ShuffleCardsFromPlayIntoDrawDeck implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "memorize");
FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "includeStacked", "memorize", "memorizeStacked");
String player = FieldUtils.getString(effectObject.get("player"), "player", "you");
final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment);
final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)");
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
final boolean includeStacked = FieldUtils.getBoolean(effectObject.get("includeStacked"), "includeStacked", false);
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp");
final String memorizeStackedCards = FieldUtils.getString(effectObject.get("memorizeStacked"), "memorizeStacked");
MultiEffectAppender result = new MultiEffectAppender();
@@ -36,7 +42,19 @@ public class ShuffleCardsFromPlayIntoDrawDeck implements EffectAppenderProducer
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
final Collection<? extends PhysicalCard> cardsInPlay = actionContext.getCardsFromMemory(memorize);
return new ShuffleCardsFromPlayIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay);
if(includeStacked) {
if (memorizeStackedCards != null) {
GameState gameState = actionContext.getGame().getGameState();
Set<PhysicalCard> stackedCards = new HashSet<>();
cardsInPlay.forEach(card -> stackedCards.addAll(gameState.getStackedCards(card)));
actionContext.setCardMemory(memorizeStackedCards, stackedCards);
}
return new ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay);
}
else {
return new ShuffleCardsFromPlayIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay);
}
}
});