Remove some of the clunky limits implementations.

This commit is contained in:
marcins78@gmail.com
2012-03-26 11:11:43 +00:00
parent 8fa2162401
commit cfe16d330d
55 changed files with 302 additions and 204 deletions

View File

@@ -3,25 +3,23 @@ package com.gempukku.lotro.cards.effects;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction;
import com.gempukku.lotro.logic.actions.SubAction;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import com.gempukku.lotro.logic.timing.Action;
public class CheckLimitEffect extends UnrespondableEffect {
public class CheckPhaseLimitEffect extends UnrespondableEffect {
private Action _action;
private PhysicalCard _card;
private int _limit;
private Phase _phase;
private Effect _limitedEffect;
public CheckLimitEffect(Action action, PhysicalCard card, int limit, Effect limitedEffect) {
public CheckPhaseLimitEffect(Action action, PhysicalCard card, int limit, Effect limitedEffect) {
this(action, card, limit, null, limitedEffect);
}
public CheckLimitEffect(Action action, PhysicalCard card, int limit, Phase phase, Effect limitedEffect) {
public CheckPhaseLimitEffect(Action action, PhysicalCard card, int limit, Phase phase, Effect limitedEffect) {
_card = card;
_limit = limit;
_phase = phase;
@@ -34,9 +32,9 @@ public class CheckLimitEffect extends UnrespondableEffect {
Phase phase = _phase;
if (phase == null)
phase = game.getGameState().getCurrentPhase();
int count = game.getModifiersEnvironment().getUntilEndOfPhaseLimitCounter(_card, phase).incrementCounter();
if (count <= _limit) {
int incrementedBy = game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(_card, phase).incrementToLimit(_limit, 1);
if (incrementedBy > 0) {
SubAction subAction = new SubAction(_action);
subAction.appendEffect(
_limitedEffect);

View File

@@ -0,0 +1,33 @@
package com.gempukku.lotro.cards.effects;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.SubAction;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
public class CheckTurnLimitEffect extends UnrespondableEffect {
private Action _action;
private PhysicalCard _card;
private int _limit;
private Effect _limitedEffect;
public CheckTurnLimitEffect(Action action, PhysicalCard card, int limit, Effect limitedEffect) {
_card = card;
_limit = limit;
_limitedEffect = limitedEffect;
_action = action;
}
@Override
public void doPlayEffect(LotroGame game) {
int incrementedBy = game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(_card).incrementToLimit(_limit, 1);
if (incrementedBy > 0) {
SubAction subAction = new SubAction(_action);
subAction.appendEffect(
_limitedEffect);
game.getActionsEnvironment().addActionToStack(subAction);
}
}
}

View File

@@ -6,21 +6,27 @@ import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
public class MoveLimitModifier extends AbstractModifier {
private int _moveLimitModifier;
private Evaluator _moveLimitModifier;
public MoveLimitModifier(PhysicalCard source, int moveLimitModifier) {
this(source, null, moveLimitModifier);
}
public MoveLimitModifier(PhysicalCard source, Condition condition, int moveLimitModifier) {
super(source, "Move limit " + ((moveLimitModifier < 0) ? moveLimitModifier : ("+" + moveLimitModifier)), null, condition, ModifierEffect.MOVE_LIMIT_MODIFIER);
this(source, condition, new ConstantEvaluator(moveLimitModifier));
}
public MoveLimitModifier(PhysicalCard source, Condition condition, Evaluator moveLimitModifier) {
super(source, null, null, condition, ModifierEffect.MOVE_LIMIT_MODIFIER);
_moveLimitModifier = moveLimitModifier;
}
@Override
public int getMoveLimitModifier(GameState gameState, ModifiersQuerying modifiersQuerying) {
return _moveLimitModifier;
return _moveLimitModifier.evaluateExpression(gameState, modifiersQuerying, null);
}
}

View File

@@ -8,7 +8,7 @@ import com.gempukku.lotro.logic.modifiers.LimitCounter;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
public class CardLimitEvaluator implements Evaluator {
public class CardPhaseLimitEvaluator implements Evaluator {
private Integer _evaluated;
private Evaluator _evaluator;
@@ -18,7 +18,7 @@ public class CardLimitEvaluator implements Evaluator {
private Phase _phase;
private int _limit;
public CardLimitEvaluator(LotroGame game, PhysicalCard source, Phase phase, int limit, Evaluator evaluator) {
public CardPhaseLimitEvaluator(LotroGame game, PhysicalCard source, Phase phase, int limit, Evaluator evaluator) {
_game = game;
_source = source;
_phase = phase;
@@ -27,7 +27,7 @@ public class CardLimitEvaluator implements Evaluator {
}
private int evaluateOnce(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
LimitCounter limitCounter = _game.getModifiersEnvironment().getUntilEndOfPhaseLimitCounter(_source, _phase);
LimitCounter limitCounter = modifiersQuerying.getUntilEndOfPhaseLimitCounter(_source, _phase);
int internalResult = _evaluator.evaluateExpression(gameState, modifiersQuerying, cardAffected);
return limitCounter.incrementToLimit(_limit, internalResult);
}

View File

@@ -0,0 +1,38 @@
package com.gempukku.lotro.cards.modifiers.evaluator;
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.LimitCounter;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
public class CardTurnLimitEvaluator implements Evaluator {
private Integer _evaluated;
private Evaluator _evaluator;
private LotroGame _game;
private PhysicalCard _source;
private int _limit;
public CardTurnLimitEvaluator(LotroGame game, PhysicalCard source, int limit, Evaluator evaluator) {
_game = game;
_source = source;
_limit = limit;
_evaluator = evaluator;
}
private int evaluateOnce(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
LimitCounter limitCounter = modifiersQuerying.getUntilEndOfTurnLimitCounter(_source);
int internalResult = _evaluator.evaluateExpression(gameState, modifiersQuerying, cardAffected);
return limitCounter.incrementToLimit(_limit, internalResult);
}
@Override
public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
if (_evaluated == null)
_evaluated = evaluateOnce(gameState, modifiersQuerying, cardAffected);
return _evaluated;
}
}

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
@@ -44,7 +44,7 @@ public class Card1_153 extends AbstractMinion {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, self, null,
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3,
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
new ConstantEvaluator(1))), Phase.SKIRMISH));
return Collections.singletonList(action);

View File

@@ -1,6 +1,8 @@
package com.gempukku.lotro.cards.set1.sauron;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.CheckTurnLimitEffect;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
@@ -9,8 +11,6 @@ import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
import java.util.Collections;
import java.util.List;
@@ -33,25 +33,12 @@ public class Card1_266 extends AbstractMinion {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.PLAY) {
PlayCardResult playCardResult = (PlayCardResult) effectResult;
PhysicalCard playedCard = playCardResult.getPlayedCard();
if (playCardResult.getAttachedTo() == self
&& self.getData() == null
&& Filters.weapon.accepts(game.getGameState(), game.getModifiersQuerying(), playedCard)
) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddTwilightEffect(self, 2));
action.appendEffect(
new UnrespondableEffect() {
@Override
public void doPlayEffect(LotroGame game) {
self.storeData(new Object());
}
});
return Collections.singletonList(action);
}
if (TriggerConditions.playedOn(game, effectResult, self, Filters.owner(self.getOwner()), Filters.weapon)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new CheckTurnLimitEffect(action, self, 1,
new AddTwilightEffect(self, 2)));
return Collections.singletonList(action);
}
return null;
}

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
@@ -52,7 +52,7 @@ public class Card1_269 extends AbstractAttachable {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(self.getAttachedTo()), null,
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(1))), Phase.SKIRMISH));
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(1))), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;

View File

@@ -2,7 +2,6 @@ package com.gempukku.lotro.cards.set1.sauron;
import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.actions.AttachPermanentAction;
import com.gempukku.lotro.cards.effects.AddBurdenEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
@@ -13,7 +12,6 @@ import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.AssignmentResult;
import java.util.Collections;
import java.util.List;
@@ -53,15 +51,9 @@ public class Card1_279 extends AbstractAttachable {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.assignedAgainst(game, effectResult, null, Filters.any, CardType.COMPANION)) {
AssignmentResult assignmentResult = (AssignmentResult) effectResult;
if (assignmentResult.getAssignedCard() == self.getAttachedTo())
self.storeData(true);
else if (self.getData() == null)
self.storeData(false);
}
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
&& self.getData() != null && (!((Boolean) self.getData()))) {
&& !game.getActionsEnvironment().wasAssignedThisTurn(game, self)
&& game.getActionsEnvironment().wasAssignedThisTurn(game, CardType.COMPANION)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddBurdenEffect(self, 1));

View File

@@ -2,11 +2,11 @@ package com.gempukku.lotro.cards.set1.shire;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.PossessionClass;
@@ -16,9 +16,8 @@ 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;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collection;
import java.util.Collections;
@@ -60,15 +59,11 @@ public class Card1_313 extends AbstractAttachableFPPossession {
@Override
protected void cardsSelected(List<PhysicalCard> selectedCards) {
Collection<PhysicalCard> orcs = Filters.filter(game.getGameState().getHand(opponentId), game.getGameState(), game.getModifiersQuerying(), Race.ORC);
Integer limit = (Integer) self.getData();
int usedUp = 0;
if (limit != null)
usedUp = limit;
int toRemove = Math.min(4 - usedUp, orcs.size());
if (toRemove > 0) {
self.storeData(usedUp + toRemove);
action.appendEffect(new RemoveTwilightEffect(toRemove));
}
int toRemove = Math.min(orcs.size(), game.getGameState().getTwilightPool());
action.appendEffect(
new RemoveTwilightEffect(
new CardPhaseLimitEvaluator(game, self, game.getGameState().getCurrentPhase(), 4,
new ConstantEvaluator(toRemove))));
}
});
}
@@ -77,11 +72,4 @@ public class Card1_313 extends AbstractAttachableFPPossession {
}
return null;
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.endOfPhase(game, effectResult, Phase.FELLOWSHIP) || TriggerConditions.endOfPhase(game, effectResult, Phase.REGROUP))
self.removeData();
return null;
}
}

View File

@@ -2,12 +2,14 @@ package com.gempukku.lotro.cards.set1.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
import com.gempukku.lotro.common.Block;
import com.gempukku.lotro.common.Keyword;
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;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.List;
@@ -26,11 +28,11 @@ public class Card1_327 extends AbstractSite {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (self.getData() == null
if (game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Keyword.RANGER)) {
self.storeData(new Object());
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
new MoveLimitModifier(self, 1));
new MoveLimitModifier(self, null,
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
}
return null;
}

View File

@@ -41,7 +41,7 @@ public class Card1_338 extends AbstractSite {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return (self.getData() == null);
return modifiersQuerying.getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1;
}
}), -5);
}
@@ -50,7 +50,7 @@ public class Card1_338 extends AbstractSite {
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Race.NAZGUL)
&& PlayConditions.location(game, self))
self.storeData(new Object());
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
return null;
}
}

View File

@@ -3,12 +3,14 @@ package com.gempukku.lotro.cards.set1.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
import com.gempukku.lotro.common.Block;
import com.gempukku.lotro.common.Keyword;
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;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.List;
@@ -30,11 +32,11 @@ public class Card1_342 extends AbstractSite {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (PlayConditions.location(game, self)
&& self.getData() == null
&& game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Keyword.RANGER)) {
self.storeData(new Object());
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
new MoveLimitModifier(self, 1));
new MoveLimitModifier(self, null,
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
}
return null;
}

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set1.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.modifiers.conditions.PhaseCondition;
import com.gempukku.lotro.common.Block;
@@ -42,15 +43,16 @@ public class Card1_350 extends AbstractSite {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return (self.getData() == null);
return modifiersQuerying.getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).getUsedLimit() < 1;
}
}), new PhaseCondition(Phase.SHADOW), -2);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Filters.and(Culture.MORIA, Race.ORC)))
self.storeData(new Object());
if (TriggerConditions.played(game, effectResult, Filters.and(Culture.MORIA, Race.ORC))
&& PlayConditions.isPhase(game, Phase.SHADOW))
game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).incrementToLimit(1, 1);
return null;
}
}

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
@@ -44,7 +44,7 @@ public class Card1_229 extends AbstractMinion {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, self, null,
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 5, new ConstantEvaluator(1))), Phase.SKIRMISH));
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 5, new ConstantEvaluator(1))), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;

View File

@@ -3,6 +3,7 @@ package com.gempukku.lotro.cards.set10.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.CheckTurnLimitEffect;
import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.common.*;
@@ -10,7 +11,6 @@ import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
import java.util.Collections;
@@ -39,7 +39,6 @@ public class Card10_114 extends AbstractPermanent {
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, CardType.MINION)
&& self.getData() == null
&& PlayConditions.canExert(self, game, Race.HOBBIT, CardType.COMPANION)) {
PlayCardResult playResult = (PlayCardResult) effectResult;
PhysicalCard playedCard = playResult.getPlayedCard();
@@ -48,14 +47,8 @@ public class Card10_114 extends AbstractPermanent {
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.HOBBIT, CardType.COMPANION));
action.appendEffect(
new UnrespondableEffect() {
@Override
protected void doPlayEffect(LotroGame game) {
self.storeData(new Object());
}
});
action.appendEffect(
new ExertCharactersEffect(self, playedCard));
new CheckTurnLimitEffect(action, self, 1,
new ExertCharactersEffect(self, playedCard)));
return Collections.singletonList(action);
}
return null;

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set11.elven;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
@@ -53,7 +53,7 @@ public class Card11_023 extends AbstractAttachableFPPossession {
if (playedCard != null && Filters.and(Culture.ELVEN, Filters.or(CardType.CONDITION, CardType.EVENT)).accepts(game.getGameState(), game.getModifiersQuerying(), playedCard)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new CheckLimitEffect(action, self, 1,
new CheckPhaseLimitEffect(action, self, 1,
new HealCharactersEffect(self, self.getAttachedTo())));
return Collections.singletonList(action);
}

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set12.gondor;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
@@ -38,7 +38,7 @@ public class Card12_045 extends AbstractPermanent {
action.appendCost(
new AddTwilightEffect(self, 2));
action.appendEffect(
new CheckLimitEffect(action, self, 1,
new CheckPhaseLimitEffect(action, self, 1,
new AddUntilStartOfPhaseModifierEffect(
new StrengthModifier(self, Filters.unboundCompanion, 1), Phase.REGROUP)));
return Collections.singletonList(action);

View File

@@ -50,15 +50,15 @@ public class Card12_054 extends AbstractMinion {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return self.getData() != null && physicalCard.getBlueprint().getCulture() == (Culture) self.getData();
return self.getWhileInZoneData() != null && physicalCard.getBlueprint().getCulture() == (Culture) self.getWhileInZoneData();
}
}), -1);
}
@Override
public String getDisplayableInformation(PhysicalCard self) {
if (self.getData() != null)
return "Chosen culture is " + ((Culture) self.getData()).getHumanReadable();
if (self.getWhileInZoneData() != null)
return "Chosen culture is " + ((Culture) self.getWhileInZoneData()).getHumanReadable();
return null;
}
@@ -76,7 +76,7 @@ public class Card12_054 extends AbstractMinion {
new MultipleChoiceAwaitingDecision(1, "Choose a culture", possibleCultures.toArray(new String[possibleCultures.size()])) {
@Override
protected void validDecisionMade(int index, String result) {
self.storeData(Culture.findCultureByHumanReadable(result));
self.setWhileInZoneData(Culture.findCultureByHumanReadable(result));
}
}));
return Collections.singletonList(action);

View File

@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.SelfExertEffect;
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard;
@@ -45,7 +45,7 @@ public class Card15_019 extends AbstractCompanion {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new ArcheryTotalModifier(self, Side.FREE_PEOPLE, null,
new CardLimitEvaluator(game, self, Phase.ARCHERY, 3,
new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, 3,
new CountActiveEvaluator(CardType.MINION, Keyword.HUNTER))), Phase.ARCHERY));
return Collections.singletonList(action);
}

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set15.site;
import com.gempukku.lotro.cards.AbstractNewSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.modifiers.conditions.PhaseCondition;
import com.gempukku.lotro.common.CardType;
@@ -41,15 +42,16 @@ public class Card15_188 extends AbstractNewSite {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return (self.getData() == null);
return modifiersQuerying.getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).getUsedLimit() < 1;
}
}), new PhaseCondition(Phase.SHADOW), -2);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Filters.and(CardType.MINION, Keyword.HUNTER)))
self.storeData(new Object());
if (TriggerConditions.played(game, effectResult, Filters.and(CardType.MINION, Keyword.HUNTER))
&& PlayConditions.isPhase(game, Phase.SHADOW))
game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).incrementToLimit(1, 1);
return null;
}
}

View File

@@ -56,7 +56,7 @@ public class Card19_003 extends AbstractAttachable {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(self.getAttachedTo())) {
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(game, self.getAttachedTo())) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new SelfDiscardEffect(self));

View File

@@ -56,7 +56,7 @@ public class Card19_024 extends AbstractAttachable {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(self.getAttachedTo())) {
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(game, self.getAttachedTo())) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new ReturnCardsToHandEffect(self, self));

View File

@@ -46,15 +46,15 @@ public class Card19_038 extends AbstractMinion {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
final Race race = physicalCard.getBlueprint().getRace();
return self.getData() != null && self.getData() == race;
return self.getWhileInZoneData() != null && self.getWhileInZoneData() == race;
}
}), self);
}
@Override
public String getDisplayableInformation(PhysicalCard self) {
if (self.getData() != null)
return "Chosen race is " + ((Race) self.getData()).getHumanReadable();
if (self.getWhileInZoneData() != null)
return "Chosen race is " + ((Race) self.getWhileInZoneData()).getHumanReadable();
return null;
}
@@ -72,7 +72,7 @@ public class Card19_038 extends AbstractMinion {
new MultipleChoiceAwaitingDecision(1, "Choose a race", possibleRaces.toArray(new String[possibleRaces.size()])) {
@Override
protected void validDecisionMade(int index, String result) {
self.storeData(Race.findRaceByHumanReadable(result));
self.setWhileInZoneData(Race.findRaceByHumanReadable(result));
}
}));
return Collections.singletonList(action);

View File

@@ -46,7 +46,7 @@ public class Card19_039 extends AbstractMinion {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
final Set<Integer> data = (Set<Integer>) self.getData();
final Set<Integer> data = (Set<Integer>) self.getWhileInZoneData();
if (data == null)
return false;
return data.contains(physicalCard.getCardId());
@@ -67,7 +67,7 @@ public class Card19_039 extends AbstractMinion {
Set<Integer> data = (Set<Integer>) self.getData();
if (data == null) {
data = new HashSet<Integer>();
self.storeData(data);
self.setWhileInZoneData(data);
}
for (PhysicalCard physicalCard : ((AssignmentResult) effectResult).getAgainst())
data.add(physicalCard.getCardId());

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set2.dwarven;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.DiscardTopCardFromDeckEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
@@ -44,12 +44,12 @@ public class Card2_012 extends AbstractPermanent {
@Override
protected void cardSelected(LotroGame game, PhysicalCard dwarf) {
action.appendEffect(
new CheckLimitEffect(action, self, 3, Phase.SKIRMISH,
new CheckPhaseLimitEffect(action, self, 3, Phase.SKIRMISH,
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(dwarf), 1), Phase.SKIRMISH)));
if (PlayConditions.location(game, Keyword.UNDERGROUND))
action.appendEffect(
new CheckLimitEffect(action, self, 3, Phase.SKIRMISH,
new CheckPhaseLimitEffect(action, self, 3, Phase.SKIRMISH,
new AddUntilEndOfPhaseModifierEffect(
new KeywordModifier(self, Filters.sameCard(dwarf), Keyword.DAMAGE), Phase.SKIRMISH)));
}

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.cards.set2.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.common.Block;
import com.gempukku.lotro.common.Culture;
@@ -43,7 +44,7 @@ public class Card2_118 extends AbstractSite {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return gameState.getCurrentPhase() == Phase.SHADOW && (self.getData() == null);
return gameState.getCurrentPhase() == Phase.SHADOW && modifiersQuerying.getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).getUsedLimit() < 1;
}
}
), -2));
@@ -52,12 +53,8 @@ public class Card2_118 extends AbstractSite {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Filters.and(Culture.MORIA, Keyword.ARCHER))
&& game.getGameState().getCurrentPhase() == Phase.SHADOW
&& game.getGameState().getCurrentSite() == self)
self.storeData(new Object());
if (TriggerConditions.endOfPhase(game, effectResult, Phase.SHADOW)
&& self.getData() != null)
self.removeData();
&& PlayConditions.isPhase(game, Phase.SHADOW))
game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).incrementToLimit(1, 1);
return null;
}
}

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
@@ -46,7 +46,7 @@ public class Card3_035 extends AbstractPermanent {
action.insertEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(card), null,
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3,
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
new CountActiveEvaluator(CardType.COMPANION, Signet.GANDALF))), Phase.SKIRMISH));
}
});

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.cards.set3.gondor;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Side;
@@ -10,7 +9,6 @@ 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;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -31,23 +29,14 @@ public class Card3_040 extends AbstractPermanent {
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.GONDOR, Zone.SUPPORT, "Citadel of Minas Tirith");
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.losesSkirmish(game, effectResult, Filters.or(CardType.COMPANION, CardType.ALLY))) {
self.storeData(new Object());
}
return null;
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.END_OF_TURN) {
if (self.getData() == null) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndHealCharactersEffect(action, playerId, Culture.GONDOR, CardType.COMPANION));
return Collections.singletonList(action);
}
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
&& !game.getActionsEnvironment().hasLostSkirmishThisTurn(game, Filters.or(CardType.COMPANION, CardType.ALLY))) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndHealCharactersEffect(action, playerId, Culture.GONDOR, CardType.COMPANION));
return Collections.singletonList(action);
}
return null;
}

View File

@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.AbstractCompanion;
import com.gempukku.lotro.cards.ExtraFilters;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.AttachPermanentAction;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
@@ -57,7 +57,7 @@ public class Card4_365 extends AbstractCompanion {
AttachPermanentAction attachPermanentAction = ((AbstractAttachable) selectedCard.getBlueprint()).getPlayCardAction(playerId, game, selectedCard, additionalAttachmentFilter, 0);
game.getActionsEnvironment().addActionToStack(attachPermanentAction);
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.FELLOWSHIP,
new CheckPhaseLimitEffect(action, self, 1, Phase.FELLOWSHIP,
new AppendHealTargetEffect(action, attachPermanentAction)));
}
}

View File

@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set4.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
import com.gempukku.lotro.common.Block;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
@@ -10,6 +11,7 @@ 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;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.List;
@@ -28,11 +30,11 @@ public class Card4_326 extends AbstractSite {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (self.getData() == null
if (game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Culture.ROHAN, PossessionClass.MOUNT)) {
self.storeData(new Object());
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
new MoveLimitModifier(self, 1));
new MoveLimitModifier(self, null,
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
}
return null;
}

View File

@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set4.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
import com.gempukku.lotro.common.Block;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
@@ -9,6 +10,7 @@ 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;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.List;
@@ -28,11 +30,11 @@ public class Card4_330 extends AbstractSite {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (self.getData() == null
if (game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Race.HOBBIT, Filters.unboundCompanion)) {
self.storeData(new Object());
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
new MoveLimitModifier(self, 1));
new MoveLimitModifier(self, null,
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
}
return null;
}

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set4.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
import com.gempukku.lotro.common.*;
@@ -36,7 +36,7 @@ public class Card4_339 extends AbstractSite {
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.ROHAN, Race.MAN));
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.FELLOWSHIP,
new CheckPhaseLimitEffect(action, self, 1, Phase.FELLOWSHIP,
new ChooseAndPlayCardFromDeckEffect(playerId, Culture.ROHAN, PossessionClass.MOUNT)));
return Collections.singletonList(action);
}

View File

@@ -40,7 +40,7 @@ public class Card4_347 extends AbstractSite {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return gameState.getCurrentSite() == self && (self.getData() == null);
return gameState.getCurrentSite() == self && modifiersQuerying.getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1;
}
}), -3);
}
@@ -49,7 +49,7 @@ public class Card4_347 extends AbstractSite {
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Race.URUK_HAI)
&& game.getGameState().getCurrentSite() == self)
self.storeData(new Object());
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
return null;
}
}

View File

@@ -9,6 +9,7 @@ import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import java.util.Collections;
import java.util.List;
@@ -26,18 +27,22 @@ public class Card4_359 extends AbstractSite {
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.SHADOW)
&& self.getData() == null
&& game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
&& game.getGameState().getTwilightPool() < 9) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddTwilightEffect(self, 4));
action.appendEffect(
new UnrespondableEffect() {
@Override
protected void doPlayEffect(LotroGame game) {
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
}
});
return Collections.singletonList(action);
}
if (TriggerConditions.endOfPhase(game, effectResult, Phase.SHADOW)) {
self.storeData(new Object());
}
return null;
}
}

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set5.dwarven;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.PutCardFromStackedIntoHandEffect;
import com.gempukku.lotro.cards.effects.StackTopCardsFromDeckEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardStackedCardsEffect;
@@ -41,7 +41,7 @@ public class Card5_009 extends AbstractPermanent {
{
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.MANEUVER,
new CheckPhaseLimitEffect(action, self, 1, Phase.MANEUVER,
new StackTopCardsFromDeckEffect(self, playerId, 1, self)));
actions.add(action);
}

View File

@@ -47,7 +47,7 @@ public class Card5_102 extends AbstractPermanent {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return self.getData() == null;
return modifiersQuerying.getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1;
}
}),
new LocationCondition(Filters.siteNumber(4), Filters.siteBlock(Block.TWO_TOWERS)), -3);
@@ -57,7 +57,7 @@ public class Card5_102 extends AbstractPermanent {
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Culture.SAURON, Race.ORC)
&& Filters.and(Filters.siteNumber(4), Filters.siteBlock(Block.TWO_TOWERS)).accepts(game.getGameState(), game.getModifiersQuerying(), game.getGameState().getCurrentSite()))
self.storeData(new Object());
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
return null;
}

View File

@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard;
@@ -43,7 +43,7 @@ public class Card6_080 extends AbstractMinion {
new RemoveTwilightEffect(3));
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new ArcheryTotalModifier(self, Side.SHADOW, null, new CardLimitEvaluator(game, self, Phase.ARCHERY, 4, new CountActiveEvaluator(4, (Integer) null, CardType.COMPANION))), Phase.ARCHERY));
new ArcheryTotalModifier(self, Side.SHADOW, null, new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, 4, new CountActiveEvaluator(4, (Integer) null, CardType.COMPANION))), Phase.ARCHERY));
return Collections.singletonList(action);
}
return null;

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set6.rohan;
import com.gempukku.lotro.cards.AbstractCompanion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
@@ -52,7 +52,7 @@ public class Card6_095 extends AbstractCompanion {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, self, null,
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(3))), Phase.SKIRMISH));
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(3))), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set7.raider;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard;
@@ -35,7 +35,7 @@ public class Card7_130 extends AbstractPermanent {
action.appendCost(
new RemoveTwilightEffect(3));
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
new AddThreatsEffect(playerId, self, 1)));
return Collections.singletonList(action);
}

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set7.sauron;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndRemoveCultureTokensFromCardEffect;
@@ -48,7 +48,7 @@ public class Card7_281 extends AbstractPermanent {
action.appendCost(
new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, Token.SAURON, 1, CardType.CONDITION));
action.appendEffect(
new CheckLimitEffect(action, self, 2, Phase.SKIRMISH,
new CheckPhaseLimitEffect(action, self, 2, Phase.SKIRMISH,
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 1, Culture.SAURON, Race.ORC)));
return Collections.singletonList(action);
}

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set7.sauron;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.NegativeEvaluator;
import com.gempukku.lotro.common.CardType;
@@ -54,7 +54,7 @@ public class Card7_293 extends AbstractMinion {
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, card, null,
new NegativeEvaluator(
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3,
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
new CountActiveEvaluator(Filters.not(self), Culture.SAURON, Race.ORC)))), Phase.SKIRMISH));
}
});

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
@@ -37,7 +37,7 @@ public class Card7_314 extends AbstractPermanent {
if (TriggerConditions.winsSkirmish(game, effectResult, Filters.owner(playerId), Culture.SAURON, CardType.MINION)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
new AddTokenEffect(self, self, Token.SAURON)));
return Collections.singletonList(action);
}

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set7.site;
import com.gempukku.lotro.cards.AbstractSite;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard;
@@ -30,7 +30,7 @@ public class Card7_329 extends AbstractSite {
&& PlayConditions.canSpot(game, Race.DWARF)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.FELLOWSHIP,
new CheckPhaseLimitEffect(action, self, 1, Phase.FELLOWSHIP,
new ChooseAndPlayCardFromDeckEffect(playerId, Culture.DWARVEN, CardType.CONDITION)));
return Collections.singletonList(action);
}

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.ExhaustCharacterEffect;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
@@ -37,7 +37,7 @@ public class Card7_206 extends AbstractPermanent {
if (TriggerConditions.winsSkirmish(game, effectResult, Filters.owner(playerId), Culture.WRAITH, CardType.MINION)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
new AddTokenEffect(self, self, Token.WRAITH)));
return Collections.singletonList(action);
}

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.RemoveTokenEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
@@ -52,7 +52,7 @@ public class Card8_013 extends AbstractPermanent {
action.appendCost(
new RemoveTokenEffect(self, self, Token.ELVEN));
action.appendEffect(
new CheckLimitEffect(action, self, 2, Phase.ARCHERY,
new CheckPhaseLimitEffect(action, self, 2, Phase.ARCHERY,
new AddUntilEndOfPhaseModifierEffect(
new ArcheryTotalModifier(self, Side.FREE_PEOPLE, 1), Phase.ARCHERY)));
return Collections.singletonList(action);

View File

@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.RemoveTokenEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
@@ -58,7 +58,7 @@ public class Card8_023 extends AbstractPermanent {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.name("Shelob"), null,
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 6,
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 6,
new ConstantEvaluator(3))), Phase.SKIRMISH));
return Collections.singletonList(action);
}

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set8.gondor;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
import com.gempukku.lotro.common.*;
@@ -38,7 +38,7 @@ public class Card8_044 extends AbstractPermanent {
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.GONDOR, Race.MAN));
action.appendEffect(
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.GONDOR, Keyword.FORTIFICATION)));
return Collections.singletonList(action);
}

View File

@@ -1,6 +1,8 @@
package com.gempukku.lotro.game;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
@@ -39,5 +41,9 @@ public interface ActionsEnvironment {
public List<PhysicalCard> getPlayedCardsInCurrentPhase();
public boolean hasWonSkirmishThisTurn(PhysicalCard card);
public boolean hasWonSkirmishThisTurn(LotroGame game, Filterable... filters);
public boolean hasLostSkirmishThisTurn(LotroGame game, Filterable... filters);
public boolean wasAssignedThisTurn(LotroGame game, Filterable... filters);
}

View File

@@ -1,6 +1,8 @@
package com.gempukku.lotro.game.state.actions;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.*;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
@@ -11,6 +13,8 @@ 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.results.AssignmentResult;
import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult;
import com.gempukku.lotro.logic.timing.results.CharacterWonSkirmishResult;
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
import com.gempukku.lotro.logic.timing.rules.CharacterDeathRule;
@@ -30,7 +34,9 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
private Set<EffectResult> _effectResults = new HashSet<EffectResult>();
private Set<Integer> _wonSkirmishesInTurn = new HashSet<Integer>();
private Set<PhysicalCard> _wonSkirmishesInTurn = new HashSet<PhysicalCard>();
private Set<PhysicalCard> _lostSkirmishesInTurn = new HashSet<PhysicalCard>();
private Set<PhysicalCard> _assignedInTurn = new HashSet<PhysicalCard>();
public DefaultActionsEnvironment(LotroGame lotroGame, ActionStack actionStack) {
_lotroGame = lotroGame;
@@ -53,11 +59,34 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
public List<? extends RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) {
if (effectResult.getType() == EffectResult.Type.CHARACTER_WON_SKIRMISH) {
final CharacterWonSkirmishResult winResult = (CharacterWonSkirmishResult) effectResult;
_wonSkirmishesInTurn.add(winResult.getWinner().getCardId());
_wonSkirmishesInTurn.add(winResult.getWinner());
}
return null;
}
});
addAlwaysOnActionProxy(
new AbstractActionProxy() {
@Override
public List<? extends RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) {
if (effectResult.getType() == EffectResult.Type.CHARACTER_LOST_SKIRMISH) {
final CharacterLostSkirmishResult winResult = (CharacterLostSkirmishResult) effectResult;
_lostSkirmishesInTurn.add(winResult.getLoser());
}
return null;
}
});
addAlwaysOnActionProxy(
new AbstractActionProxy() {
@Override
public List<? extends RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) {
if (effectResult.getType() == EffectResult.Type.CHARACTER_ASSIGNED) {
AssignmentResult assignmentResult = (AssignmentResult) effectResult;
_assignedInTurn.add(assignmentResult.getAssignedCard());
}
return null;
}
}
);
}
@Override
@@ -100,6 +129,8 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
_actionProxies.removeAll(_untilEndOfTurnActionProxies);
_untilEndOfTurnActionProxies.clear();
_wonSkirmishesInTurn.clear();
_lostSkirmishesInTurn.clear();
_assignedInTurn.clear();
}
@Override
@@ -309,8 +340,18 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
}
@Override
public boolean hasWonSkirmishThisTurn(PhysicalCard card) {
return _wonSkirmishesInTurn.contains(card.getCardId());
public boolean hasWonSkirmishThisTurn(LotroGame game, Filterable... filters) {
return Filters.filter(_wonSkirmishesInTurn, game.getGameState(), game.getModifiersQuerying(), filters).size() > 0;
}
@Override
public boolean hasLostSkirmishThisTurn(LotroGame game, Filterable... filters) {
return Filters.filter(_lostSkirmishesInTurn, game.getGameState(), game.getModifiersQuerying(), filters).size() > 0;
}
@Override
public boolean wasAssignedThisTurn(LotroGame game, Filterable... filters) {
return Filters.filter(_assignedInTurn, game.getGameState(), game.getModifiersQuerying(), filters).size() > 0;
}
private class GatherRequiredAfterTriggers extends CompletePhysicalCardVisitor {

View File

@@ -3,12 +3,6 @@ package com.gempukku.lotro.logic.modifiers;
public class DefaultLimitCounter implements LimitCounter {
private int _count;
@Override
public int incrementCounter() {
_count++;
return _count;
}
@Override
public int incrementToLimit(int limit, int incrementBy) {
int maxIncrement = limit - _count;
@@ -16,4 +10,9 @@ public class DefaultLimitCounter implements LimitCounter {
_count += finalIncrement;
return finalIncrement;
}
@Override
public int getUsedLimit() {
return _count;
}
}

View File

@@ -1,7 +1,7 @@
package com.gempukku.lotro.logic.modifiers;
public interface LimitCounter {
public int incrementCounter();
public int incrementToLimit(int limit, int incrementBy);
public int getUsedLimit();
}

View File

@@ -4,8 +4,6 @@ import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.game.PhysicalCard;
public interface ModifiersEnvironment {
public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase);
public ModifierHook addAlwaysOnModifier(Modifier modifier);
public void addUntilStartOfPhaseModifier(Modifier modifier, Phase phase);

View File

@@ -18,17 +18,18 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
private Set<Modifier> _skipSet = new HashSet<Modifier>();
private Map<Phase, Map<Integer, LimitCounter>> _counters = new HashMap<Phase, Map<Integer, LimitCounter>>();
private Map<Phase, Map<Integer, LimitCounter>> _phaseLimitCounters = new HashMap<Phase, Map<Integer, LimitCounter>>();
private Map<Integer, LimitCounter> _turnLimitCounters = new HashMap<Integer, LimitCounter>();
private int _drawnThisPhaseCount = 0;
private Map<Integer, Integer> _woundsPerPhaseMap = new HashMap<Integer, Integer>();
@Override
public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase) {
Map<Integer, LimitCounter> limitCounterMap = _counters.get(phase);
Map<Integer, LimitCounter> limitCounterMap = _phaseLimitCounters.get(phase);
if (limitCounterMap == null) {
limitCounterMap = new HashMap<Integer, LimitCounter>();
_counters.put(phase, limitCounterMap);
_phaseLimitCounters.put(phase, limitCounterMap);
}
LimitCounter limitCounter = limitCounterMap.get(card.getCardId());
if (limitCounter == null) {
@@ -38,6 +39,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
return limitCounter;
}
@Override
public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card) {
LimitCounter limitCounter = _turnLimitCounters.get(card.getCardId());
if (limitCounter == null) {
limitCounter = new DefaultLimitCounter();
_turnLimitCounters.put(card.getCardId(), limitCounter);
}
return limitCounter;
}
@Override
public void addedWound(PhysicalCard card) {
final int cardId = card.getCardId();
@@ -117,7 +128,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
removeModifiers(list);
list.clear();
}
Map<Integer, LimitCounter> counterMap = _counters.get(phase);
Map<Integer, LimitCounter> counterMap = _phaseLimitCounters.get(phase);
if (counterMap != null)
counterMap.clear();
@@ -136,6 +147,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
public void removeEndOfTurn() {
removeModifiers(_untilEndOfTurnModifiers);
_untilEndOfTurnModifiers.clear();
_turnLimitCounters.clear();
}
@Override

View File

@@ -13,6 +13,10 @@ import java.util.Map;
import java.util.Set;
public interface ModifiersQuerying {
public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase);
public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card);
public Collection<Modifier> getModifiersAffecting(GameState gameState, PhysicalCard card);
public boolean hasTextRemoved(GameState gameState, PhysicalCard card);