Can't take more than X wounds... effect.

This commit is contained in:
marcins78@gmail.com
2011-10-24 10:24:48 +00:00
parent 2a77f92000
commit e716d36aec
16 changed files with 109 additions and 189 deletions

View File

@@ -5,7 +5,7 @@ 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.ModifiersLogic;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class CantExertWithCardModifier extends AbstractModifier {
private Filter _preventExertWithFilter;
@@ -16,8 +16,8 @@ public class CantExertWithCardModifier extends AbstractModifier {
}
@Override
public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard source, PhysicalCard card, boolean result) {
if (_preventExertWithFilter.accepts(gameState, modifiersLogic, source))
public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard source, PhysicalCard card, boolean result) {
if (_preventExertWithFilter.accepts(gameState, modifiersQuerying, source))
return false;
return result;
}

View File

@@ -0,0 +1,38 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class CantTakeMoreThanXWoundsModifier extends AbstractModifier {
private Phase _phase;
private int _count;
public CantTakeMoreThanXWoundsModifier(PhysicalCard source, Phase phase, int count, Filterable... affectFilters) {
this(source, phase, count, null, affectFilters);
}
public CantTakeMoreThanXWoundsModifier(PhysicalCard source, final Phase phase, int count, Condition condition, Filterable... affectFilters) {
super(source, "Can't take more than " + count + " wound(s)", Filters.and(affectFilters,
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return phase == null || gameState.getCurrentPhase() == phase;
}
}), condition, new ModifierEffect[]{ModifierEffect.WOUND_MODIFIER});
_phase = phase;
_count = count;
}
@Override
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int woundsAlreadyTaken) {
return woundsAlreadyTaken < _count;
}
}

View File

@@ -18,7 +18,7 @@ public class CantTakeWoundsModifier extends AbstractModifier {
}
@Override
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, boolean result) {
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int woundsAlreadyTaken) {
return false;
}
}

View File

@@ -1,9 +1,7 @@
package com.gempukku.lotro.cards.set1.dwarven;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.PossessionClass;
@@ -11,11 +9,7 @@ import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.modifiers.Modifier;
import java.util.Collections;
import java.util.List;
@@ -40,27 +34,8 @@ public class Card1_015 extends AbstractAttachableFPPossession {
}
@Override
protected List<? extends Action> getExtraInPlayPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new DiscardCardsFromPlayEffect(self, self));
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (PlayConditions.isWounded(effectResult, self.getAttachedTo())) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
return Collections.singletonList(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self)));
}
}

View File

@@ -1,9 +1,7 @@
package com.gempukku.lotro.cards.set1.gondor;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.PossessionClass;
@@ -12,8 +10,7 @@ import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.modifiers.Modifier;
import java.util.Collections;
import java.util.List;
@@ -37,16 +34,8 @@ public class Card1_092 extends AbstractAttachableFPPossession {
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (PlayConditions.isWounded(effectResult, self.getAttachedTo())
&& game.getGameState().getCurrentPhase() == Phase.SKIRMISH) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
return Collections.singletonList(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self)));
}
}

View File

@@ -1,28 +1,18 @@
package com.gempukku.lotro.cards.set1.gondor;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.AbstractActionProxy;
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.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
@@ -49,20 +39,8 @@ public class Card1_118 extends AbstractOldEvent {
new AddUntilStartOfPhaseModifierEffect(
new KeywordModifier(self, Filters.sameCard(card), Keyword.DEFENDER), Phase.REGROUP));
action.appendEffect(
new AddUntilStartOfPhaseActionProxyEffect(
new AbstractActionProxy() {
@Override
public List<? extends Action> getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) {
if (PlayConditions.isWounded(effectResult, card)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.sameCard(card)), Phase.SKIRMISH));
return Collections.<Action>singletonList(action);
}
return null;
}
}, Phase.REGROUP));
new AddUntilStartOfPhaseModifierEffect(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, card), Phase.REGROUP));
}
}

View File

@@ -2,24 +2,20 @@ package com.gempukku.lotro.cards.set4.gondor;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.cards.modifiers.conditions.LocationCondition;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.WoundResult;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
@@ -37,25 +33,11 @@ public class Card4_120 extends AbstractPermanent {
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.WOUND
&& game.getGameState().getCurrentPhase() == Phase.SKIRMISH
&& game.getGameState().getCurrentSiteNumber() == 6
&& game.getGameState().getCurrentSiteBlock() == Block.TWO_TOWERS) {
WoundResult woundResult = (WoundResult) effectResult;
Collection<PhysicalCard> woundedRingBounds = Filters.filter(woundResult.getWoundedCards(), game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.MAN), Filters.keyword(Keyword.RING_BOUND));
List<RequiredTriggerAction> actions = new LinkedList<RequiredTriggerAction>();
for (PhysicalCard woundedRingBound : woundedRingBounds) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.sameCard(woundedRingBound)), Phase.SKIRMISH));
actions.add(action);
}
return actions;
}
return null;
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1,
new LocationCondition(Filters.siteNumber(6), Filters.siteBlock(Block.TWO_TOWERS)),
Race.MAN, Keyword.RING_BOUND));
}
@Override

View File

@@ -1,8 +1,7 @@
package com.gempukku.lotro.cards.set4.rohan;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
@@ -12,11 +11,9 @@ import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
@@ -40,25 +37,16 @@ public class Card4_284 extends AbstractAttachableFPPossession {
@Override
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
return Collections.singletonList(
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new CantTakeWoundsModifier(self,
Filters.and(
Filters.hasAttached(self),
Filters.name("Theoden"),
Filters.not(Filters.inSkirmish)
)));
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (PlayConditions.isWounded(effectResult, self.getAttachedTo())
&& game.getGameState().getCurrentPhase() == Phase.SKIRMISH) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;
modifiers.add(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self)));
return modifiers;
}
}

View File

@@ -1,24 +1,14 @@
package com.gempukku.lotro.cards.set4.shire;
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.AddUntilEndOfPhaseActionProxyEffect;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.CancelSkirmishEffect;
import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.AbstractActionProxy;
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.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Two Towers
@@ -48,20 +38,8 @@ public class Card4_321 extends AbstractEvent {
@Override
protected void cardSelected(LotroGame game, final PhysicalCard hobbit) {
action.insertEffect(
new AddUntilEndOfPhaseActionProxyEffect(
new AbstractActionProxy() {
@Override
public List<? extends Action> getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResults) {
if (PlayConditions.isWounded(effectResults, hobbit)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.sameCard(hobbit)), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;
}
}, Phase.SKIRMISH));
new AddUntilEndOfPhaseModifierEffect(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, hobbit), Phase.SKIRMISH));
}
});
}

View File

@@ -2,8 +2,7 @@ package com.gempukku.lotro.cards.set5.elven;
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.CantTakeWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
@@ -11,9 +10,7 @@ import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.modifiers.Modifier;
import java.util.Collections;
import java.util.List;
@@ -42,15 +39,8 @@ public class Card5_010 extends AbstractCompanion {
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (PlayConditions.isWounded(effectResult, self)
&& game.getGameState().getCurrentPhase() == Phase.SKIRMISH) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, new SpotCondition(CardType.MINION, Filters.wounded, Filters.inSkirmishAgainst(Filters.sameCard(self))), Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH));
return Collections.singletonList(action);
}
return null;
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, self, Filters.inSkirmishAgainst(CardType.MINION, Filters.wounded)));
}
}

View File

@@ -2,21 +2,17 @@ package com.gempukku.lotro.cards.set6.elven;
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.CantTakeWoundsModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.cards.modifiers.DoesNotAddToArcheryTotalModifier;
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.actions.RequiredTriggerAction;
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.timing.EffectResult;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -54,21 +50,8 @@ public class Card6_023 extends AbstractCompanion {
return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0;
}
}));
modifiers.add(
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, self, Filters.hasAttached(PossessionClass.RANGED_WEAPON)));
return modifiers;
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (PlayConditions.isWounded(effectResult, self)
&& game.getGameState().getCurrentPhase() == Phase.SKIRMISH) {
if (Filters.hasAttached(PossessionClass.RANGED_WEAPON).accepts(game.getGameState(), game.getModifiersQuerying(), self)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, Filters.and(self, Filters.hasAttached(PossessionClass.RANGED_WEAPON))), Phase.SKIRMISH));
return Collections.singletonList(action);
}
}
return null;
}
}

View File

@@ -69,6 +69,7 @@ public class WoundCharactersEffect extends AbstractPreventableCardEffect {
for (PhysicalCard woundedCard : cards) {
game.getGameState().addWound(woundedCard);
game.getModifiersEnvironment().addedWound(woundedCard);
}
return Collections.singleton(new WoundResult(cards));

View File

@@ -113,12 +113,12 @@ public abstract class AbstractModifier implements Modifier {
}
@Override
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result) {
return result;
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int woundsAlreadyTaken) {
return true;
}
@Override
public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard exertionSource, PhysicalCard card, boolean result) {
public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard exertionSource, PhysicalCard card, boolean result) {
return result;
}

View File

@@ -46,9 +46,9 @@ public interface Modifier {
public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result);
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result);
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int woundsAlreadyTakenInPhase);
public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard source, PhysicalCard card, boolean result);
public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard source, PhysicalCard card, boolean result);
public boolean isAllyParticipateInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);

View File

@@ -13,4 +13,6 @@ public interface ModifiersEnvironment {
public void addUntilEndOfPhaseModifier(Modifier modifier, Phase phase);
public void addUntilEndOfTurnModifier(Modifier modifier);
public void addedWound(PhysicalCard card);
}

View File

@@ -22,6 +22,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
private Map<Phase, Map<PhysicalCard, LimitCounter>> _counters = new HashMap<Phase, Map<PhysicalCard, LimitCounter>>();
private int _drawnThisPhaseCount = 0;
private Map<Integer, Integer> _woundsPerPhaseMap = new HashMap<Integer, Integer>();
@Override
public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase) {
@@ -38,6 +39,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
return limitCounter;
}
@Override
public void addedWound(PhysicalCard card) {
final int cardId = card.getCardId();
final Integer previousWounds = _woundsPerPhaseMap.get(cardId);
if (previousWounds == null)
_woundsPerPhaseMap.put(cardId, 1);
else
_woundsPerPhaseMap.put(cardId, previousWounds + 1);
}
private List<Modifier> getEffectModifiers(ModifierEffect modifierEffect) {
List<Modifier> modifiers = _modifiers.get(modifierEffect);
if (modifiers == null) {
@@ -88,6 +99,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
counterMap.clear();
_drawnThisPhaseCount = 0;
_woundsPerPhaseMap.clear();
}
public void removeStartOfPhase(Phase phase) {
@@ -310,12 +322,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
@Override
public boolean canTakeWound(GameState gameState, PhysicalCard card) {
boolean result = true;
for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, card, modifier))
result = modifier.canTakeWound(gameState, this, card, result);
if (affectsCardWithSkipSet(gameState, card, modifier)) {
Integer woundsTaken = _woundsPerPhaseMap.get(card.getCardId());
if (woundsTaken == null)
woundsTaken = 0;
if (!modifier.canTakeWound(gameState, this, card, woundsTaken))
return false;
}
}
return result;
return true;
}
@Override