Simplifying PossessionClass filtering.

This commit is contained in:
marcins78@gmail.com
2011-11-17 12:32:53 +00:00
parent 2fb4f26ee4
commit 48f611aead
27 changed files with 57 additions and 50 deletions

View File

@@ -1,6 +1,6 @@
package com.gempukku.lotro.cards.decisions;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
@@ -10,11 +10,11 @@ import java.util.Map;
public abstract class ForEachYouSpotDecision extends IntegerAwaitingDecision {
private LotroGame _lotroGame;
private Filter _filter;
private Filterable _filter;
private int _defaultValue;
private int _max;
protected ForEachYouSpotDecision(int id, String text, LotroGame lotroGame, Filter filter, int defaultValue) {
protected ForEachYouSpotDecision(int id, String text, LotroGame lotroGame, Filterable filter, int defaultValue) {
super(id, text, 0);
_lotroGame = lotroGame;
_filter = filter;

View File

@@ -28,7 +28,7 @@ public class Card1_003 extends AbstractOldEvent {
action.appendEffect(
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId,
new CardMatchesEvaluator(2, 3,
Filters.hasAttached(Culture.DWARVEN, Filters.possessionClass(PossessionClass.HAND_WEAPON))),
Filters.hasAttached(Culture.DWARVEN, PossessionClass.HAND_WEAPON)),
Filters.race(Race.DWARF)));
return action;

View File

@@ -45,7 +45,7 @@ public class Card1_074 extends AbstractAttachableFPPossession {
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.keyword(Keyword.PIPEWEED), CardType.POSSESSION));
action.appendEffect(
new PlayoutDecisionEffect(game.getUserFeedback(), playerId,
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, Filters.possessionClass(PossessionClass.PIPE), Integer.MAX_VALUE) {
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, PossessionClass.PIPE, Integer.MAX_VALUE) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int spotCount = getValidatedResult(result);

View File

@@ -47,7 +47,7 @@ public class Card1_091 extends AbstractAttachableFPPossession {
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.keyword(Keyword.PIPEWEED), CardType.POSSESSION));
action.appendEffect(
new PlayoutDecisionEffect(game.getUserFeedback(), playerId,
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, Filters.possessionClass(PossessionClass.PIPE), Integer.MAX_VALUE) {
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, PossessionClass.PIPE, Integer.MAX_VALUE) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int spotCount = getValidatedResult(result);

View File

@@ -28,7 +28,7 @@ public class Card1_102 extends AbstractOldEvent {
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose GONDOR of SHIRE companion bearing a hand weapon", Filters.or(Culture.GONDOR, Culture.SHIRE), CardType.COMPANION, Filters.hasAttached(Filters.possessionClass(PossessionClass.HAND_WEAPON))) {
new ChooseActiveCardEffect(self, playerId, "Choose GONDOR of SHIRE companion bearing a hand weapon", Filters.or(Culture.GONDOR, Culture.SHIRE), CardType.COMPANION, Filters.hasAttached(PossessionClass.HAND_WEAPON)) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard companion) {
action.appendEffect(

View File

@@ -49,7 +49,7 @@ public class Card1_285 extends AbstractAttachableFPPossession {
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.keyword(Keyword.PIPEWEED), CardType.POSSESSION));
action.appendEffect(
new PlayoutDecisionEffect(game.getUserFeedback(), playerId,
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, Filters.possessionClass(PossessionClass.PIPE), Integer.MAX_VALUE) {
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, PossessionClass.PIPE, Integer.MAX_VALUE) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int spotCount = getValidatedResult(result);

View File

@@ -45,7 +45,7 @@ public class Card1_292 extends AbstractAttachableFPPossession {
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.keyword(Keyword.PIPEWEED), CardType.POSSESSION));
action.appendEffect(
new PlayoutDecisionEffect(game.getUserFeedback(), playerId,
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, Filters.possessionClass(PossessionClass.PIPE), Integer.MAX_VALUE) {
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, PossessionClass.PIPE, Integer.MAX_VALUE) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int spotCount = getValidatedResult(result);

View File

@@ -39,8 +39,8 @@ public class Card1_345 extends AbstractSite {
Filters.and(
Filters.side(Side.SHADOW),
Filters.or(
Filters.possessionClass(PossessionClass.HAND_WEAPON),
Filters.possessionClass(PossessionClass.RANGED_WEAPON))
PossessionClass.HAND_WEAPON,
PossessionClass.RANGED_WEAPON)
)));
return Collections.singletonList(action);
}

View File

@@ -31,7 +31,7 @@ public class Card1_347 extends AbstractSite {
CardType.COMPANION,
CardType.MINION),
Filters.hasAttached(
Filters.possessionClass(PossessionClass.HAND_WEAPON))
PossessionClass.HAND_WEAPON)
), Keyword.DAMAGE);
}
}

View File

@@ -31,7 +31,7 @@ public class Card2_005 extends AbstractOldEvent {
new ChooseActiveCardEffect(self, playerId, "Choose a Dwarf", Filters.race(Race.DWARF)) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard dwarf) {
boolean has2Weapons = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.attachedTo(Filters.sameCard(dwarf)), Filters.possessionClass(PossessionClass.HAND_WEAPON)) == 2;
boolean has2Weapons = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.attachedTo(Filters.sameCard(dwarf)), PossessionClass.HAND_WEAPON) == 2;
if (has2Weapons) {
action.appendEffect(

View File

@@ -37,10 +37,10 @@ public class Card2_025 extends AbstractAlly {
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new TwilightCostModifier(self,
Filters.or(
Filters.possessionClass(PossessionClass.SHIELD),
Filters.possessionClass(PossessionClass.ARMOR),
Filters.possessionClass(PossessionClass.HELM),
Filters.possessionClass(PossessionClass.HAND_WEAPON)
PossessionClass.SHIELD,
PossessionClass.ARMOR,
PossessionClass.HELM,
PossessionClass.HAND_WEAPON
), 1);
}
}

View File

@@ -36,7 +36,7 @@ public class Card2_027 extends AbstractOldEvent {
List<PhysicalCard> attachedToGandalf = game.getGameState().getAttachedCards(gandalf);
if (gandalf != null
&& PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), 2, Filters.sameCard(gandalf))
&& Filters.filter(attachedToGandalf, game.getGameState(), game.getModifiersQuerying(), Filters.possessionClass(PossessionClass.STAFF)).size() > 0)
&& Filters.filter(attachedToGandalf, game.getGameState(), game.getModifiersQuerying(), PossessionClass.STAFF).size() > 0)
return true;
return false;
}
@@ -45,7 +45,7 @@ public class Card2_027 extends AbstractOldEvent {
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.possessionClass(PossessionClass.STAFF), Filters.attachedTo(Filters.gandalf)));
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, PossessionClass.STAFF, Filters.attachedTo(Filters.gandalf)));
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.gandalf));
action.appendCost(

View File

@@ -28,7 +28,7 @@ public class Card2_030 extends AbstractOldEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier, ignoreRoamingPenalty)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.gandalf, Filters.hasAttached(Filters.possessionClass(PossessionClass.STAFF)));
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.gandalf, Filters.hasAttached(PossessionClass.STAFF));
}
@Override

View File

@@ -49,9 +49,9 @@ public class Card2_039 extends AbstractOldEvent {
Filters.side(Side.FREE_PEOPLE),
CardType.POSSESSION,
Filters.or(
Filters.possessionClass(PossessionClass.ARMOR),
Filters.possessionClass(PossessionClass.HELM),
Filters.possessionClass(PossessionClass.SHIELD)
PossessionClass.ARMOR,
PossessionClass.HELM,
PossessionClass.SHIELD
))));
else
action.appendEffect(
@@ -59,9 +59,9 @@ public class Card2_039 extends AbstractOldEvent {
action, playerId, 1, 1,
CardType.POSSESSION,
Filters.or(
Filters.possessionClass(PossessionClass.ARMOR),
Filters.possessionClass(PossessionClass.HELM),
Filters.possessionClass(PossessionClass.SHIELD)
PossessionClass.ARMOR,
PossessionClass.HELM,
PossessionClass.SHIELD
)));
return action;
}

View File

@@ -46,7 +46,7 @@ public class Card2_056 extends AbstractPermanent {
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.balrog));
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.possessionClass(PossessionClass.RANGED_WEAPON)));
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, PossessionClass.RANGED_WEAPON));
return Collections.singletonList(action);
}
return null;

View File

@@ -53,9 +53,9 @@ public class Card2_074 extends AbstractAttachable {
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1,
Filters.or(
Filters.possessionClass(PossessionClass.HELM),
Filters.possessionClass(PossessionClass.SHIELD),
Filters.possessionClass(PossessionClass.ARMOR)),
PossessionClass.HELM,
PossessionClass.SHIELD,
PossessionClass.ARMOR),
Filters.attachedTo(
Filters.inSkirmishAgainst(Filters.hasAttached(self)))));
return Collections.singletonList(action);

View File

@@ -46,7 +46,7 @@ public class Card3_107 extends AbstractAttachableFPPossession {
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.keyword(Keyword.PIPEWEED), CardType.POSSESSION));
action.appendEffect(
new PlayoutDecisionEffect(game.getUserFeedback(), playerId,
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, Filters.possessionClass(PossessionClass.PIPE), Integer.MAX_VALUE) {
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, PossessionClass.PIPE, Integer.MAX_VALUE) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
final int spotCount = getValidatedResult(result);

View File

@@ -49,7 +49,7 @@ public class Card3_084 extends AbstractOldEvent {
final int twilightCost = revealedCard.getBlueprint().getTwilightCost();
if (twilightCost > 0) {
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose companion", CardType.COMPANION, Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) {
new ChooseActiveCardEffect(self, playerId, "Choose companion", CardType.COMPANION, Filters.hasAttached(PossessionClass.RANGED_WEAPON)) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
for (int i = 0; i < twilightCost; i++)

View File

@@ -46,7 +46,7 @@ public class Card4_065 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}, 1));
modifiers.add(
@@ -54,7 +54,7 @@ public class Card4_065 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}, Keyword.DAMAGE, 1));
modifiers.add(
@@ -62,7 +62,7 @@ public class Card4_065 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}));
return modifiers;

View File

@@ -41,7 +41,7 @@ public class Card4_080 extends AbstractCompanion {
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, final PhysicalCard self) {
return Collections.singletonList(
new AbstractModifier(self, "The twilight cost of each ranged weapon played on Ordulus is -1.", Filters.possessionClass(PossessionClass.RANGED_WEAPON), ModifierEffect.TWILIGHT_COST_MODIFIER) {
new AbstractModifier(self, "The twilight cost of each ranged weapon played on Ordulus is -1.", PossessionClass.RANGED_WEAPON, ModifierEffect.TWILIGHT_COST_MODIFIER) {
@Override
public int getPlayOnTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, PhysicalCard target) {
if (target == self)

View File

@@ -48,7 +48,7 @@ public class Card4_081 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}, 2));
modifiers.add(
@@ -56,7 +56,7 @@ public class Card4_081 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}));
return modifiers;

View File

@@ -50,7 +50,7 @@ public class Card4_086 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}, -2));
modifiers.add(
@@ -58,7 +58,7 @@ public class Card4_086 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}));
return modifiers;

View File

@@ -43,7 +43,7 @@ public class Card4_100 extends AbstractAttachableFPPossession {
@Override
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
return Collections.singletonList(
new MayNotBearModifier(self, Filters.hasAttached(self), Filters.possessionClass(PossessionClass.HAND_WEAPON)));
new MayNotBearModifier(self, Filters.hasAttached(self), PossessionClass.HAND_WEAPON));
}
@Override
@@ -51,7 +51,7 @@ public class Card4_100 extends AbstractAttachableFPPossession {
if (PlayConditions.played(game.getGameState(), game.getModifiersQuerying(), effectResult, Filters.sameCard(self))) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new DiscardCardsFromPlayEffect(self, Filters.and(Filters.attachedTo(Filters.hasAttached(self)), Filters.possessionClass(PossessionClass.HAND_WEAPON))));
new DiscardCardsFromPlayEffect(self, Filters.and(Filters.attachedTo(Filters.hasAttached(self)), PossessionClass.HAND_WEAPON)));
return Collections.singletonList(action);
}
if (effectResult.getType() == EffectResult.Type.START_OF_PHASE

View File

@@ -50,7 +50,7 @@ public class Card4_196 extends AbstractAttachable {
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.hasAttached(self)));
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.side(Side.FREE_PEOPLE), Filters.possessionClass(PossessionClass.MOUNT)));
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.side(Side.FREE_PEOPLE), PossessionClass.MOUNT));
return Collections.singletonList(action);
}
return null;

View File

@@ -47,7 +47,7 @@ public class Card5_013 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}, 2));
modifiers.add(
@@ -55,7 +55,7 @@ public class Card5_013 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}));
return modifiers;

View File

@@ -47,7 +47,7 @@ public class Card6_023 extends AbstractCompanion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(PossessionClass.RANGED_WEAPON)) > 0;
}
}));
modifiers.add(

View File

@@ -85,7 +85,14 @@ public class Filters {
};
}
public static Filter possessionClass(final PossessionClass possessionClass) {
public static final Map<PossessionClass, Filter> _possessionClassFilterMap = new HashMap<PossessionClass, Filter>();
static {
for (PossessionClass possessionClass : PossessionClass.values())
_possessionClassFilterMap.put(possessionClass, possessionClass(possessionClass));
}
private static Filter possessionClass(final PossessionClass possessionClass) {
return new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
@@ -231,7 +238,7 @@ public class Filters {
public static final Filter galadriel = Filters.name("Galadriel");
public static final Filter weapon = Filters.or(Filters.possessionClass(PossessionClass.HAND_WEAPON), Filters.possessionClass(PossessionClass.RANGED_WEAPON));
public static final Filter weapon = Filters.or(PossessionClass.HAND_WEAPON, PossessionClass.RANGED_WEAPON);
public static final Filter inSkirmish = new Filter() {
@Override
@@ -622,7 +629,7 @@ public class Filters {
else if (filter instanceof Keyword)
return Filters.keyword((Keyword) filter);
else if (filter instanceof PossessionClass)
return Filters.possessionClass((PossessionClass) filter);
return _possessionClassFilterMap.get((PossessionClass) filter);
else if (filter instanceof Race)
return Filters.race((Race) filter);
else if (filter instanceof Side)
@@ -682,7 +689,7 @@ public class Filters {
public static final Filter unboundCompanion = Filters.and(CardType.COMPANION, Filters.not(Filters.keyword(Keyword.RING_BOUND)));
public static final Filter roaminMinion = Filters.and(CardType.MINION, Filters.keyword(Keyword.ROAMING));
public static final Filter mounted = Filters.hasAttached(Filters.possessionClass(PossessionClass.MOUNT));
public static final Filter mounted = Filters.hasAttached(PossessionClass.MOUNT);
private static class SpotFilterCardInPlayVisitor implements PhysicalCardVisitor {
private GameState _gameState;