"Sindri"
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package com.gempukku.lotro.cards.set9.dwarven;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractCompanion;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
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.modifiers.AbstractModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Reflections
|
||||
* Side: Free
|
||||
* Culture: Dwarven
|
||||
* Twilight Cost: 2
|
||||
* Type: Companion • Dwarf
|
||||
* Strength: 6
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Game Text: You may play [DWARVEN] skirmish events stacked on [DWARVEN] conditions as if from hand.
|
||||
*/
|
||||
public class Card9_010 extends AbstractCompanion {
|
||||
public Card9_010() {
|
||||
super(2, 6, 3, Culture.DWARVEN, Race.DWARF, null, "Sindri", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getAlwaysOnModifiers(final LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(
|
||||
new AbstractModifier(self, null, Filters.and(Culture.DWARVEN, CardType.EVENT, Keyword.SKIRMISH, Filters.stackedOn(Culture.DWARVEN, CardType.CONDITION)), ModifierEffect.EXTRA_ACTION_MODIFIER) {
|
||||
@Override
|
||||
public List<? extends Action> getExtraPhaseActionFromStacked(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
if (card.getBlueprint().checkPlayRequirements(card.getOwner(), game, card, 0, false))
|
||||
return Collections.singletonList(
|
||||
card.getBlueprint().getPlayCardAction(card.getOwner(), game, card, 0, false));
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -580,6 +580,15 @@ public class Filters {
|
||||
};
|
||||
}
|
||||
|
||||
public static Filter stackedOn(final Filterable... filters) {
|
||||
return new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return physicalCard.getStackedOn() != null && Filters.and(filters).accepts(gameState, modifiersQuerying, physicalCard.getStackedOn());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static Filter siteControlledByShadowPlayer(final String fellowshipPlayer) {
|
||||
return new Filter() {
|
||||
@Override
|
||||
|
||||
@@ -11,7 +11,6 @@ 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.results.PlayCardResult;
|
||||
import com.gempukku.lotro.logic.timing.rules.CharacterDeathRule;
|
||||
|
||||
@@ -445,4 +444,37 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
|
||||
return _actions;
|
||||
}
|
||||
}
|
||||
|
||||
private class GatherPlayableActionsFromStackedVisitor extends CompletePhysicalCardVisitor {
|
||||
private LotroGame _game;
|
||||
private String _playerId;
|
||||
|
||||
private List<Action> _actions = new LinkedList<Action>();
|
||||
|
||||
public GatherPlayableActionsFromStackedVisitor(LotroGame game, String playerId) {
|
||||
_game = game;
|
||||
_playerId = playerId;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doVisitPhysicalCard(PhysicalCard physicalCard) {
|
||||
List<? extends Action> list = physicalCard.getBlueprint().getPhaseActionsFromStacked(_playerId, _game, physicalCard);
|
||||
if (list != null)
|
||||
_actions.addAll(list);
|
||||
final List<? extends Action> extraActions = _game.getModifiersQuerying().getExtraPhaseActionsFromStacked(_game.getGameState(), physicalCard);
|
||||
if (extraActions != null) {
|
||||
for (Action action : extraActions) {
|
||||
if (action != null)
|
||||
_actions.add(action);
|
||||
else
|
||||
System.out.println("Null action from: " + physicalCard.getBlueprint().getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<? extends Action> getActions() {
|
||||
return _actions;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -178,6 +178,11 @@ public abstract class AbstractModifier implements Modifier {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Action> getExtraPhaseActionFromStacked(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHavePlayedOn(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard playedCard, PhysicalCard target) {
|
||||
return true;
|
||||
|
||||
@@ -73,6 +73,8 @@ public interface Modifier {
|
||||
|
||||
public List<? extends ActivateCardAction> getExtraPhaseAction(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public List<? extends Action> getExtraPhaseActionFromStacked(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public boolean canHavePlayedOn(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard playedCard, PhysicalCard target);
|
||||
|
||||
public boolean canHaveTransferredOn(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard playedCard, PhysicalCard target);
|
||||
|
||||
@@ -572,6 +572,21 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
return activateCardActions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Action> getExtraPhaseActionsFromStacked(GameState gameState, PhysicalCard target) {
|
||||
List<Action> activateCardActions = new LinkedList<Action>();
|
||||
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.EXTRA_ACTION_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, target, modifier)) {
|
||||
List<? extends Action> actions = modifier.getExtraPhaseActionFromStacked(gameState, this, target);
|
||||
if (actions != null)
|
||||
activateCardActions.addAll(actions);
|
||||
}
|
||||
}
|
||||
|
||||
return activateCardActions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidAssignments(GameState gameState, Side side, Map<PhysicalCard, List<PhysicalCard>> assignments) {
|
||||
|
||||
|
||||
@@ -86,6 +86,8 @@ public interface ModifiersQuerying {
|
||||
|
||||
public List<? extends ActivateCardAction> getExtraPhaseActions(GameState gameState, PhysicalCard target);
|
||||
|
||||
public List<? extends Action> getExtraPhaseActionsFromStacked(GameState gameState, PhysicalCard target);
|
||||
|
||||
// Others
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source);
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
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 GatherPlayableActionsFromStackedVisitor extends CompletePhysicalCardVisitor {
|
||||
private LotroGame _game;
|
||||
private String _playerId;
|
||||
|
||||
private List<Action> _actions = new LinkedList<Action>();
|
||||
|
||||
public GatherPlayableActionsFromStackedVisitor(LotroGame game, String playerId) {
|
||||
_game = game;
|
||||
_playerId = playerId;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doVisitPhysicalCard(PhysicalCard physicalCard) {
|
||||
List<? extends Action> list = physicalCard.getBlueprint().getPhaseActionsFromStacked(_playerId, _game, physicalCard);
|
||||
if (list != null)
|
||||
_actions.addAll(list);
|
||||
}
|
||||
|
||||
public List<? extends Action> getActions() {
|
||||
return _actions;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user