Improving performance of trying to spot multiples. Now it doesn't count them, just counts UP to the number you need to spot.

This commit is contained in:
marcins78@gmail.com
2011-12-04 04:15:03 +00:00
parent c1e034113a
commit b6015ab65c
48 changed files with 114 additions and 112 deletions

View File

@@ -153,7 +153,7 @@ public class PlayConditions {
}
public static boolean canSpot(LotroGame game, int count, Filterable... filters) {
return Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), filters) >= count;
return Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), count, filters);
}
public static boolean canSpotThreat(LotroGame game, int count) {
@@ -282,11 +282,11 @@ public class PlayConditions {
}
public static boolean canCardAssignToSkirmish(PhysicalCard source, LotroGame game, Filterable filter) {
return Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.canBeAssignedToSkirmishByEffect(source.getBlueprint().getSide()), filter) > 0;
return Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.canBeAssignedToSkirmishByEffect(source.getBlueprint().getSide()), filter);
}
public static boolean canRemoveAnyCultureTokens(LotroGame game, int count, Filterable... fromFilters) {
return Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.and(fromFilters, Filters.hasAnyCultureTokens(count))).size() > 0;
return Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.and(fromFilters, Filters.hasAnyCultureTokens(count)));
}
public static boolean canRemoveTokens(LotroGame game, PhysicalCard from, Token token) {

View File

@@ -17,7 +17,7 @@ public class SpotEffect extends AbstractEffect {
@Override
public boolean isPlayableInFull(LotroGame game) {
return Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), _filters) >= _count;
return Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), _count, _filters);
}
@Override

View File

@@ -28,7 +28,7 @@ public class CountActiveEvaluator implements Evaluator {
@Override
public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
final int active = Math.max(0, Filters.countSpottable(gameState, modifiersQuerying, _filters) - _over);
final int active = Math.max(0, Filters.countActive(gameState, modifiersQuerying, _filters) - _over);
if (_limit == null)
return active;
return Math.min(_limit, active);

View File

@@ -36,7 +36,7 @@ public class Card1_123 extends AbstractOldEvent {
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& PlayConditions.canExert(self, game, Culture.ISENGARD, CardType.MINION)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 5;
&& PlayConditions.canSpot(game, 5, CardType.COMPANION);
}
@Override

View File

@@ -37,7 +37,7 @@ public class Card1_125 extends AbstractPermanent {
@Override
public List<? extends Action> getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 2)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 6) {
&& PlayConditions.canSpot(game, 6, CardType.COMPANION)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new RemoveTwilightEffect(2));
action.appendEffect(

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
@@ -38,7 +39,7 @@ public class Card1_139 extends AbstractOldEvent {
new ChooseActiveCardEffect(self, playerId, "Choose an Uruk-hai", Race.URUK_HAI) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard urukHai) {
if (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 5) {
if (PlayConditions.canSpot(game, 5, CardType.COMPANION)) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(urukHai), 4), Phase.REGROUP));

View File

@@ -4,7 +4,6 @@ import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.common.*;
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.ActivateCardAction;
@@ -34,7 +33,7 @@ public class Card1_146 extends AbstractMinion {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 5) {
&& PlayConditions.canSpot(game, 5, CardType.COMPANION)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(new AddUntilStartOfPhaseModifierEffect(new KeywordModifier(self, self, Keyword.FIERCE), Phase.REGROUP));

View File

@@ -4,7 +4,6 @@ import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.common.*;
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.ActivateCardAction;
@@ -34,7 +33,7 @@ public class Card1_156 extends AbstractMinion {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 6) {
&& PlayConditions.canSpot(game, 6, CardType.COMPANION)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set1.moria;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignMinionToCompanionEffect;
import com.gempukku.lotro.common.CardType;
@@ -27,7 +28,7 @@ public class Card1_169 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.MORIA, CardType.MINION) >= 5;
&& PlayConditions.canSpot(game, 5, Culture.MORIA, CardType.MINION);
}
@Override

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set1.moria;
import com.gempukku.lotro.cards.AbstractResponseOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.CancelEventEffect;
@@ -8,7 +9,6 @@ import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -39,7 +39,7 @@ public class Card1_194 extends AbstractResponseOldEvent {
@Override
public List<PlayEventAction> getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, CardType.EVENT, Keyword.STEALTH)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.MORIA, CardType.MINION) >= 3
&& PlayConditions.canSpot(game, 3, Culture.MORIA, CardType.MINION)
&& checkPlayRequirements(playerId, game, self, 0, false, false)) {
PlayEventAction action = new PlayEventAction(self);
action.appendEffect(new CancelEventEffect(self, (PlayEventResult) effectResult));

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set1.sauron;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.common.*;
@@ -26,8 +27,8 @@ public class Card1_239 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Culture.SAURON, Race.ORC)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 5;
&& PlayConditions.canSpot(game, Culture.SAURON, Race.ORC)
&& PlayConditions.canSpot(game, 5, CardType.COMPANION);
}
@Override

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set1.sauron;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
@@ -27,7 +28,7 @@ public class Card1_251 extends AbstractOldEvent {
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Culture.SAURON, Race.ORC)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 6;
&& PlayConditions.canSpot(game, 6, CardType.COMPANION);
}
@Override

View File

@@ -5,13 +5,10 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayPermanentAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.common.*;
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.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
/**
@@ -45,15 +42,6 @@ public class Card1_253 extends AbstractPermanent {
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new TwilightCostModifier(self,
Filters.and(
CardType.COMPANION,
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return Filters.countSpottable(gameState, modifiersQuerying, CardType.COMPANION) >= 5;
}
}
), 2);
return new TwilightCostModifier(self, CardType.COMPANION, new SpotCondition(5, CardType.COMPANION), 2);
}
}

View File

@@ -3,12 +3,9 @@ package com.gempukku.lotro.cards.set1.sauron;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
/**
* Set: The Fellowship of the Ring
@@ -27,13 +24,6 @@ public class Card1_260 extends AbstractPermanent {
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new MoveLimitModifier(self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countSpottable(gameState, modifiersQuerying, CardType.COMPANION) >= 7;
}
},
-1);
return new MoveLimitModifier(self, new SpotCondition(7, CardType.COMPANION), -1);
}
}

View File

@@ -41,7 +41,7 @@ public class Card1_262 extends AbstractMinion {
@Override
protected List<? extends Action> getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.ASSIGNMENT, self, 0)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.HOBBIT, CardType.COMPANION) >= 2
&& PlayConditions.canSpot(game, 2, Race.HOBBIT, CardType.COMPANION)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), self, Filters.notAssignedToSkirmish, Filters.canBeAssignedToSkirmish(Side.SHADOW))) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(

View File

@@ -4,11 +4,7 @@ import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
import com.gempukku.lotro.common.Block;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
@@ -33,7 +29,7 @@ public class Card1_359 extends AbstractSite {
@Override
public List<? extends Action> getPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseSiteDuringPhase(game, Phase.SHADOW, self)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ORC) >= 5) {
&& PlayConditions.canSpot(game, 5, CardType.MINION, Race.ORC)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new AddUntilEndOfTurnModifierEffect(

View File

@@ -35,10 +35,8 @@ public class Card1_231 extends AbstractMinion {
@Override
protected List<? extends Action> getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0)
&& PlayConditions.canExert(self, game, self)
&& (
Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 6
|| game.getGameState().getBurdens() >= 5)) {
&& PlayConditions.canSelfExert(self, game)
&& (PlayConditions.canSpotBurdens(game, 5) || PlayConditions.canSpot(game, 6, CardType.COMPANION))) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(self));

View File

@@ -6,7 +6,6 @@ import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
@@ -33,7 +32,7 @@ public class Card10_111 extends AbstractEvent {
@Override
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayEventAction action = new PlayEventAction(self);
final int discardCount = (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.HOBBIT, CardType.COMPANION) >= 4) ? 2 : 1;
final int discardCount = (PlayConditions.canSpot(game, 4, Race.HOBBIT, CardType.COMPANION)) ? 2 : 1;
action.appendEffect(
new ChooseOpponentEffect(playerId) {
@Override

View File

@@ -41,8 +41,7 @@ public class Card2_039 extends AbstractOldEvent {
PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI));
int companions = Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION);
if (companions >= 6)
if (PlayConditions.canSpot(game, 6, CardType.COMPANION))
action.appendEffect(
new DiscardCardsFromPlayEffect(self,
Filters.and(

View File

@@ -1,10 +1,10 @@
package com.gempukku.lotro.cards.set2.shire;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
@@ -26,7 +26,7 @@ public class Card2_099 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.HOBBIT) >= 2;
&& PlayConditions.canSpot(game, 2, Race.HOBBIT);
}
@Override

View File

@@ -1,10 +1,10 @@
package com.gempukku.lotro.cards.set2.shire;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
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.RequiredTriggerAction;
@@ -32,7 +32,7 @@ public class Card2_107 extends AbstractPermanent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.HOBBIT) >= 2;
&& PlayConditions.canSpot(game, 2, Race.HOBBIT);
}
@Override

View File

@@ -1,11 +1,11 @@
package com.gempukku.lotro.cards.set3.elven;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.common.Zone;
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.OptionalTriggerAction;
@@ -32,7 +32,7 @@ public class Card3_015 extends AbstractPermanent {
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.WHEN_FELLOWSHIP_MOVES
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.ELVEN, CardType.ALLY) >= 3) {
&& PlayConditions.canSpot(game, 3, Culture.ELVEN, CardType.ALLY)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndWoundCharactersEffect(action, playerId, 1, 1, CardType.MINION));

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set3.elven;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
@@ -28,7 +29,7 @@ public class Card3_022 extends AbstractOldEvent {
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.name("Elrond"))
|| Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.ELVEN, CardType.ALLY) >= 2);
|| PlayConditions.canSpot(game, 2, Culture.ELVEN, CardType.ALLY));
}
@Override

View File

@@ -39,8 +39,7 @@ public class Card3_060 extends AbstractMinion {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(self));
int characterSpot = Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION);
if (characterSpot >= 5) {
if (PlayConditions.canSpot(game, 5, CardType.COMPANION)) {
action.appendEffect(
new DiscardCardsFromPlayEffect(self, Filters.and(Side.FREE_PEOPLE, CardType.POSSESSION)));
} else {

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set3.moria;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.common.*;
@@ -27,7 +28,7 @@ public class Card3_078 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.SHIRE, CardType.COMPANION) >= 2;
&& PlayConditions.canSpot(game, 2, Culture.SHIRE, CardType.COMPANION);
}
@Override

View File

@@ -1,8 +1,8 @@
package com.gempukku.lotro.cards.set3.shire;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.common.*;
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.OptionalTriggerAction;
@@ -30,7 +30,7 @@ public class Card3_113 extends AbstractPermanent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.SHIRE, CardType.COMPANION) >= 2;
&& PlayConditions.canSpot(game, 2, Culture.SHIRE, CardType.COMPANION);
}
@Override

View File

@@ -1,10 +1,10 @@
package com.gempukku.lotro.cards.set3.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.RemoveBurdenEffect;
import com.gempukku.lotro.common.Block;
import com.gempukku.lotro.common.Race;
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.OptionalTriggerAction;
@@ -32,7 +32,7 @@ public class Card3_119 extends AbstractSite {
if (effectResult.getType() == EffectResult.Type.WHEN_MOVE_TO
&& playerId.equals(game.getGameState().getCurrentPlayerId())
&& game.getGameState().getCurrentSite() == self
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF) >= 2) {
&& PlayConditions.canSpot(game, 2, Race.ELF)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new RemoveBurdenEffect(playerId, self));

View File

@@ -30,7 +30,7 @@ public class Card3_120 extends AbstractSite {
@Override
public List<? extends Action> getPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseSiteDuringPhase(game, Phase.MANEUVER, self)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 4
&& PlayConditions.canSpot(game, 4, CardType.COMPANION)
&& PlayConditions.canExert(self, game, Filters.owner(playerId), Culture.ISENGARD, Race.ORC)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set4.dunland;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.common.*;
@@ -26,9 +27,8 @@ public class Card4_003 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& (
Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.DUNLAND, CardType.MINION) >= 3
|| Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.siteControlled(playerId)));
&& (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.siteControlled(playerId))
|| PlayConditions.canSpot(game, 3, Culture.DUNLAND, CardType.MINION));
}
@Override

View File

@@ -1,13 +1,13 @@
package com.gempukku.lotro.cards.set4.dunland;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.Side;
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.OptionalTriggerAction;
@@ -37,7 +37,7 @@ public class Card4_013 extends AbstractMinion {
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, self)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
int max = (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 6) ? 2 : 1;
int max = (PlayConditions.canSpot(game, 6, CardType.COMPANION)) ? 2 : 1;
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, max, Side.FREE_PEOPLE, CardType.POSSESSION));
return Collections.singletonList(action);

View File

@@ -39,7 +39,7 @@ public class Card4_030 extends AbstractAttachable {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.REGROUP, self, 0)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.DUNLAND, Race.MAN) >= 2) {
&& PlayConditions.canSpot(game, 2, Culture.DUNLAND, Race.MAN)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfDiscardEffect(self));

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set4.dunland;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.common.*;
@@ -24,7 +25,7 @@ public class Card4_035 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.siteControlled(playerId)) >= 2;
return PlayConditions.canSpot(game, 2, Filters.siteControlled(playerId));
}
@Override

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set4.dunland;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.common.*;
@@ -24,7 +25,7 @@ public class Card4_039 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.DUNLAND, Race.MAN) >= 3;
&& PlayConditions.canSpot(game, 3, Culture.DUNLAND, Race.MAN);
}
@Override

View File

@@ -1,9 +1,9 @@
package com.gempukku.lotro.cards.set4.elven;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
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;
@@ -34,7 +34,7 @@ public class Card4_060 extends AbstractPermanent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF) >= 3;
&& PlayConditions.canSpot(game, 3, Race.ELF);
}
@Override

View File

@@ -1,10 +1,10 @@
package com.gempukku.lotro.cards.set4.elven;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
@@ -24,7 +24,7 @@ public class Card4_061 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF, CardType.COMPANION) >= 2;
&& PlayConditions.canSpot(game, 2, Race.ELF, CardType.COMPANION);
}
@Override

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set4.elven;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
@@ -31,7 +32,7 @@ public class Card4_072 extends AbstractPermanent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF) >= 3;
&& PlayConditions.canSpot(game, 3, Race.ELF);
}
@Override

View File

@@ -5,7 +5,6 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
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.actions.ActivateCardAction;
@@ -33,7 +32,7 @@ public class Card4_075 extends AbstractAttachableFPPossession {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, Filter additionalAttachmentFilter, int twilightModifier) {
return super.checkPlayRequirements(playerId, game, self, additionalAttachmentFilter, twilightModifier)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF) >= 3;
&& PlayConditions.canSpot(game, 3, Race.ELF);
}
@Override

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set4.elven;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
@@ -31,7 +32,7 @@ public class Card4_077 extends AbstractPermanent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF) >= 3;
&& PlayConditions.canSpot(game, 3, Race.ELF);
}
@Override

View File

@@ -1,12 +1,10 @@
package com.gempukku.lotro.cards.set4.elven;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
@@ -33,7 +31,7 @@ public class Card4_083 extends AbstractOldEvent {
new ChooseActiveCardEffect(self, playerId, "Choose an Elf", Race.ELF) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
int bonus = (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF) >= 3) ? 3 : 2;
int bonus = (PlayConditions.canSpot(game, 3, CardType.COMPANION, Race.ELF)) ? 3 : 2;
action.insertEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(card), bonus), Phase.SKIRMISH));

View File

@@ -1,12 +1,12 @@
package com.gempukku.lotro.cards.set4.elven;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.LiberateASiteEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.Effect;
@@ -30,7 +30,7 @@ public class Card4_084 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ELF) >= 3;
&& PlayConditions.canSpot(game, 3, CardType.COMPANION, Race.ELF);
}
@Override

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set4.raider;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.common.*;
@@ -30,7 +31,7 @@ public class Card4_241 extends AbstractOldEvent {
new ChooseActiveCardEffect(self, playerId, "Choose RAIDER Man", Culture.RAIDER, Race.MAN) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
int bonus = (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 6) ? 5 : 3;
int bonus = (PlayConditions.canSpot(game, 6, CardType.COMPANION)) ? 5 : 3;
action.insertEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(card), bonus), Phase.SKIRMISH));

View File

@@ -8,7 +8,6 @@ import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
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.ActivateCardAction;
@@ -44,7 +43,7 @@ public class Card6_068 extends AbstractMinion {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Culture.ISENGARD, Race.ORC));
int count = (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION) >= 6) ? 2 : 1;
int count = (PlayConditions.canSpot(game, 6, CardType.COMPANION)) ? 2 : 1;
action.appendEffect(
new ChooseAndWoundCharactersEffect(action, playerId, count, count, CardType.COMPANION));
return Collections.singletonList(action);

View File

@@ -68,7 +68,7 @@ public class Card6_109 extends AbstractAttachable {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.REGROUP, self)
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), CardType.MINION) == 0) {
&& !PlayConditions.canSpot(game, CardType.MINION)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new SelfDiscardEffect(self));

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set7.gandalf;
import com.gempukku.lotro.cards.AbstractCompanion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
@@ -37,7 +38,7 @@ public class Card7_036 extends AbstractCompanion {
}
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
public List<? extends Modifier> getAlwaysOnModifiers(final LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new StrengthModifier(self, self,
new Condition() {
@@ -48,7 +49,7 @@ public class Card7_036 extends AbstractCompanion {
companionCultures.add(companion.getBlueprint().getCulture());
for (Culture companionCulture : companionCultures) {
if (Filters.countSpottable(gameState, modifiersQuerying, CardType.COMPANION, companionCulture) >= 3)
if (PlayConditions.canSpot(game, 3, CardType.COMPANION, companionCulture))
return false;
}

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set7.gondor;
import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.common.*;
@@ -33,7 +34,7 @@ public class Card7_099 extends AbstractEvent {
protected void cardSelected(LotroGame game, PhysicalCard card) {
game.getModifiersEnvironment().addUntilEndOfPhaseModifier(
new StrengthModifier(self, card, 2), Phase.SKIRMISH);
if (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Culture.GONDOR, Keyword.FORTIFICATION) >= 2) {
if (PlayConditions.canSpot(game, 2, Culture.GONDOR, Keyword.FORTIFICATION)) {
action.appendEffect(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.inSkirmishAgainst(card)));
}

View File

@@ -37,7 +37,7 @@ public class Card9_003 extends AbstractCompanion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
if (Filters.countSpottable(gameState, modifiersQuerying, Race.DWARF) >= 2)
if (Filters.canSpot(gameState, modifiersQuerying, 2, Race.DWARF))
return -2;
return 0;
}

View File

@@ -60,8 +60,13 @@ public class Filters {
public static boolean canSpot(GameState gameState, ModifiersQuerying modifiersQuerying, Filterable... filters) {
Filter filter = Filters.and(filters);
SpotFilterCardInPlayVisitor visitor = new SpotFilterCardInPlayVisitor(gameState, modifiersQuerying, filter);
gameState.iterateActiveCards(visitor);
return visitor.isSpotted();
return gameState.iterateActiveCards(visitor);
}
public static boolean canSpot(GameState gameState, ModifiersQuerying modifiersQuerying, int count, Filterable... filters) {
Filter filter = Filters.and(filters);
SpotCountFilterCardInPlayVisitor visitor = new SpotCountFilterCardInPlayVisitor(gameState, modifiersQuerying, count, filter);
return gameState.iterateActiveCards(visitor);
}
public static int countSpottable(GameState gameState, ModifiersQuerying modifiersQuerying, Filterable... filters) {
@@ -771,15 +776,36 @@ public class Filters {
return false;
}
public boolean isSpotted() {
return _card != null;
}
public PhysicalCard getCard() {
return _card;
}
}
private static class SpotCountFilterCardInPlayVisitor implements PhysicalCardVisitor {
private GameState _gameState;
private ModifiersQuerying _modifiersQuerying;
private Filter _filter;
private int _spottedCount;
private int _searchingToSpot;
private SpotCountFilterCardInPlayVisitor(GameState gameState, ModifiersQuerying modifiersQuerying, int count, Filter filter) {
_gameState = gameState;
_modifiersQuerying = modifiersQuerying;
_searchingToSpot = count;
_filter = filter;
}
@Override
public boolean visitPhysicalCard(PhysicalCard physicalCard) {
if (_filter.accepts(_gameState, _modifiersQuerying, physicalCard)) {
_spottedCount++;
if (_spottedCount >= _searchingToSpot)
return true;
}
return false;
}
}
private static class GetCardsMatchingFilterVisitor extends CompletePhysicalCardVisitor {
private GameState _gameState;
private ModifiersQuerying _modifiersQuerying;

View File

@@ -19,7 +19,7 @@ public class SpotCondition implements Condition {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countSpottable(gameState, modifiersQuerying, _filter) >= _count;
return Filters.canSpot(gameState, modifiersQuerying, _count, _filter);
}
}