Preparing for spot modification cards for Ents.

This commit is contained in:
marcins78@gmail.com
2012-02-17 09:46:10 +00:00
parent 14a63124d4
commit ff314dc26f
22 changed files with 105 additions and 91 deletions

View File

@@ -25,6 +25,7 @@ public abstract class ForEachYouSpotDecision extends IntegerAwaitingDecision {
public Map<String, Object> getDecisionParameters() {
Map<String, Object> result = super.getDecisionParameters();
int count = Filters.countSpottable(_lotroGame.getGameState(), _lotroGame.getModifiersQuerying(), _filter);
count += _lotroGame.getModifiersQuerying().getSpotBonus(_lotroGame.getGameState(), _filter);
_max = count;
result.put("max", String.valueOf(count));
if (_defaultValue > _max)

View File

@@ -1,34 +0,0 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.cards.modifiers.spotting.SimpleLotroCardBlueprint;
import com.gempukku.lotro.cards.modifiers.spotting.SimplePhysicalCard;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class KeywordSpotModifier extends AbstractModifier {
private Keyword _keyword;
public KeywordSpotModifier(PhysicalCard source, Keyword keyword) {
super(source, "Spotting modifier", null, ModifierEffect.SPOT_MODIFIER);
_keyword = keyword;
}
@Override
public int getSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter) {
if (filter.accepts(gameState, modifiersQuerying,
new SimplePhysicalCard(
new SimpleLotroCardBlueprint() {
@Override
public boolean hasKeyword(Keyword keyword) {
return keyword == _keyword;
}
})))
return +1;
return 0;
}
}

View File

@@ -1,9 +1,7 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.cards.modifiers.spotting.SimpleLotroCardBlueprint;
import com.gempukku.lotro.cards.modifiers.spotting.SimplePhysicalCard;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.common.PossessionClass;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
@@ -18,16 +16,10 @@ public class PossessionClassSpotModifier extends AbstractModifier {
_possessionClass = possessionClass;
}
@Override
public int getSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter) {
if (filter.accepts(gameState, modifiersQuerying,
new SimplePhysicalCard(
new SimpleLotroCardBlueprint() {
@Override
public PossessionClass getPossessionClass() {
return _possessionClass;
}
})))
public int getSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, Filterable filter) {
if (filter == _possessionClass)
return 1;
return 0;
}

View File

@@ -3,9 +3,12 @@ package com.gempukku.lotro.cards.set15.gandalf;
import com.gempukku.lotro.cards.AbstractCompanion;
import com.gempukku.lotro.common.Culture;
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.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
/**
@@ -26,6 +29,13 @@ public class Card15_028 extends AbstractCompanion {
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new StrengthModifier(self, self, new SpotCondition(3, Race.ENT), 2);
return new StrengthModifier(self, self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Race.ENT)
+ modifiersQuerying.getSpotBonus(gameState, Race.ENT) >= 3;
}
}, 2);
}
}

View File

@@ -6,9 +6,9 @@ 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.logic.modifiers.Condition;
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.StrengthModifier;
/**
@@ -29,11 +29,19 @@ public class Card15_030 extends AbstractCompanion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
return -Filters.countSpottable(gameState, modifiersQuerying, Race.ENT);
return -Filters.countActive(gameState, modifiersQuerying, Race.ENT)
- modifiersQuerying.getSpotBonus(gameState, Race.ENT);
}
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new StrengthModifier(self, self, new SpotCondition(4, Filters.not(self), Race.ENT), 4);
public Modifier getAlwaysOnModifier(final PhysicalCard self) {
return new StrengthModifier(self, self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Filters.not(self), Race.ENT)
+ modifiersQuerying.getSpotBonus(gameState, Race.ENT) >= 4;
}
}, 4);
}
}

View File

@@ -1,12 +1,12 @@
package com.gempukku.lotro.cards.set15.gandalf;
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.ChoiceEffect;
import com.gempukku.lotro.cards.effects.ShuffleDeckEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPutCardFromDeckIntoHandEffect;
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;
@@ -31,23 +31,21 @@ public class Card15_032 extends AbstractEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& PlayConditions.canSpot(game, Race.ENT);
&& (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Race.ENT) + game.getModifiersQuerying().getSpotBonus(game.getGameState(), Race.ENT)) > 1;
}
@Override
public PlayEventAction getPlayCardAction(final String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayEventAction action = new PlayEventAction(self);
List<Effect> possibleEffects = new LinkedList<Effect>();
if (PlayConditions.canSpot(game, Race.ENT)) {
possibleEffects.add(
new ChooseAndPutCardFromDeckIntoHandEffect(action, playerId, 1, 1, Culture.GANDALF, CardType.COMPANION) {
@Override
public String getText(LotroGame game) {
return "Take a GANDALF companion into hand from your draw deck";
}
});
}
if (PlayConditions.canSpot(game, 2, Race.ENT)) {
possibleEffects.add(
new ChooseAndPutCardFromDeckIntoHandEffect(action, playerId, 1, 1, Culture.GANDALF, CardType.COMPANION) {
@Override
public String getText(LotroGame game) {
return "Take a GANDALF companion into hand from your draw deck";
}
});
if ((Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Race.ENT) + game.getModifiersQuerying().getSpotBonus(game.getGameState(), Race.ENT)) >= 2) {
possibleEffects.add(
new ChooseAndPutCardFromDeckIntoHandEffect(action, playerId, 1, 1, Culture.GANDALF, CardType.COMPANION) {
@Override

View File

@@ -35,7 +35,8 @@ public class Card15_034 extends AbstractCompanion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
return -Filters.countSpottable(gameState, modifiersQuerying, Race.ENT);
return -Filters.countSpottable(gameState, modifiersQuerying, Race.ENT)
- modifiersQuerying.getSpotBonus(gameState, Race.ENT);
}
@Override

View File

@@ -10,10 +10,12 @@ 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.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
@@ -39,7 +41,14 @@ public class Card15_036 extends AbstractCompanion {
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new StrengthModifier(self, self, new SpotCondition(4, Race.ENT), 3);
return new StrengthModifier(self, self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Race.ENT)
+ modifiersQuerying.getSpotBonus(gameState, Race.ENT) >= 4;
}
}, 3);
}
@Override

View File

@@ -6,10 +6,13 @@ import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.ConditionEvaluator;
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;
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
/**
* Set: Rise of Saruman
@@ -37,7 +40,14 @@ public class Card17_025 extends AbstractEvent {
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, CardType.COMPANION));
action.appendEffect(
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId,
new ConditionEvaluator(3, 4, new SpotCondition(3, Race.ENT)), Culture.GANDALF, CardType.COMPANION));
new ConditionEvaluator(3, 4,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Race.ENT)
+ modifiersQuerying.getSpotBonus(gameState, Race.ENT) >= 3;
}
}), Culture.GANDALF, CardType.COMPANION));
return action;
}
}

View File

@@ -3,10 +3,13 @@ package com.gempukku.lotro.cards.set6.gandalf;
import com.gempukku.lotro.cards.AbstractCompanion;
import com.gempukku.lotro.common.Culture;
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.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import java.util.Collections;
@@ -31,6 +34,13 @@ public class Card6_027 extends AbstractCompanion {
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new StrengthModifier(self, self, new SpotCondition(3, Race.ENT), 2));
new StrengthModifier(self, self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return Filters.countActive(gameState, modifiersQuerying, Race.ENT)
+ modifiersQuerying.getSpotBonus(gameState, Race.ENT) >= 3;
}
}, 2));
}
}

View File

@@ -43,7 +43,9 @@ public class Card6_028 extends AbstractCompanion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
return -2 * Filters.countSpottable(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)));
return -2 * (
Filters.countActive(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)))
+ modifiersQuerying.getSpotBonus(gameState, Race.ENT));
}
@Override

View File

@@ -36,6 +36,7 @@ public class Card6_032 extends AbstractCompanion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
return -2 * Filters.countSpottable(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)));
return -2 * (Filters.countSpottable(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)))
+ modifiersQuerying.getSpotBonus(gameState, Race.ENT));
}
}

View File

@@ -26,6 +26,7 @@ public class Card6_033 extends AbstractCompanion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
return -Filters.countSpottable(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)));
return -Filters.countSpottable(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)))
- modifiersQuerying.getSpotBonus(gameState, Race.ENT);
}
}

View File

@@ -40,7 +40,8 @@ public class Card6_034 extends AbstractEvent {
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.ENT) {
@Override
protected void forEachCardExertedCallback(PhysicalCard character) {
int bonus = Math.min(4, Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ENT));
int bonus = Math.min(4, Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Race.ENT)
+ game.getModifiersQuerying().getSpotBonus(game.getGameState(), Race.ENT));
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, character, bonus), Phase.SKIRMISH));

View File

@@ -40,7 +40,8 @@ public class Card6_035 extends AbstractCompanion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
return -Filters.countSpottable(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)));
return -Filters.countSpottable(gameState, modifiersQuerying, Filters.or(Race.ENT, Filters.and(Race.HOBBIT, Filters.unboundCompanion)))
- modifiersQuerying.getSpotBonus(gameState, Race.ENT);
}
@Override

View File

@@ -36,7 +36,7 @@ public class Card9_024 extends AbstractAttachable {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, Filter additionalAttachmentFilter, int twilightModifier) {
return super.checkPlayRequirements(playerId, game, self, additionalAttachmentFilter, twilightModifier)
&& PlayConditions.canSpot(game, Race.ENT);
&& (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Race.ENT) + game.getModifiersQuerying().getSpotBonus(game.getGameState(), Race.ENT)) >= 1;
}
@Override

View File

@@ -5,16 +5,19 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.PreventCardEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator;
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.actions.ActivateCardAction;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import com.gempukku.lotro.logic.timing.Effect;
import java.util.Collections;
@@ -41,7 +44,13 @@ public class Card9_025 extends AbstractCompanion {
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new StrengthModifier(self, self, null, new CountSpottableEvaluator(Race.ENT)));
new StrengthModifier(self, self, null,
new Evaluator() {
@Override
public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
return Filters.countActive(gameState, modifiersQuerying, Race.ENT) + modifiersQuerying.getSpotBonus(gameState, Race.ENT);
}
}));
}
@Override

View File

@@ -71,10 +71,7 @@ public class Filters {
}
public static int countSpottable(GameState gameState, ModifiersQuerying modifiersQuerying, Filterable... filters) {
Filter filter = Filters.and(filters);
GetCardsMatchingFilterVisitor visitor = new GetCardsMatchingFilterVisitor(gameState, modifiersQuerying, filter);
gameState.iterateActiveCards(visitor);
return modifiersQuerying.getSpotCount(gameState, filter, visitor.getCounter());
return countActive(gameState, modifiersQuerying, filters);
}
public static Collection<PhysicalCard> filterActive(GameState gameState, ModifiersQuerying modifiersQuerying, Filterable... filters) {

View File

@@ -298,7 +298,7 @@ public abstract class AbstractModifier implements Modifier {
}
@Override
public int getSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter) {
public int getSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, Filterable filter) {
return 0;
}

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
@@ -119,7 +118,7 @@ public interface Modifier {
public boolean canDiscardCardsFromTopOfDeck(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId, PhysicalCard source);
public int getSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter);
public int getSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, Filterable filter);
public boolean hasFlagActive(GameState gameState, ModifiersQuerying modifiersQuerying, ModifierFlag modifierFlag);

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
@@ -866,8 +865,8 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
}
@Override
public int getSpotCount(GameState gameState, Filter filter, int inPlayCount) {
int result = inPlayCount;
public int getSpotBonus(GameState gameState, Filterable filter) {
int result = 0;
for (Modifier modifier : getModifiers(gameState, ModifierEffect.SPOT_MODIFIER))
result += modifier.getSpotCountModifier(gameState, this, filter);
return Math.max(0, result);

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
@@ -119,7 +118,7 @@ public interface ModifiersQuerying {
public Side hasInitiative(GameState gameState);
public int getSpotCount(GameState gameState, Filter filter, int inPlayCount);
public int getSpotBonus(GameState gameState, Filterable filter);
public boolean hasFlagActive(GameState gameState, ModifierFlag modifierFlag);