Simplifying Modifiers.

This commit is contained in:
marcins78@gmail.com
2011-08-29 13:57:29 +00:00
parent 0a93f4c402
commit 3a6080facd
15 changed files with 248 additions and 84 deletions

View File

@@ -0,0 +1,22 @@
package com.gempukku.lotro.cards.modifiers;
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.ModifiersQuerying;
public class OverwhelmedByMultiplierModifier extends AbstractModifier {
private int _multiplier;
public OverwhelmedByMultiplierModifier(PhysicalCard source, Filter affectFilter, int multiplier) {
super(source, "Cannot be overwhelmed unless his strength is *" + multiplier, affectFilter);
_multiplier = multiplier;
}
@Override
public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result) {
return (opposingStrength >= strength * _multiplier);
}
}

View File

@@ -10,7 +10,7 @@ public class StrengthModifier extends AbstractModifier {
private int _modifier; private int _modifier;
public StrengthModifier(PhysicalCard source, Filter affectFilter, int modifier) { public StrengthModifier(PhysicalCard source, Filter affectFilter, int modifier) {
super(source, "Strength +" + modifier, affectFilter); super(source, "Strength " + ((modifier < 0) ? modifier : ("+" + modifier)), affectFilter);
_modifier = modifier; _modifier = modifier;
} }

View File

@@ -0,0 +1,23 @@
package com.gempukku.lotro.cards.modifiers;
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.ModifiersQuerying;
public class VitalityModifier extends AbstractModifier {
private int _modifier;
public VitalityModifier(PhysicalCard source, Filter affectFilter, int modifier) {
super(source, "Vitality " + ((modifier < 0) ? modifier : ("+" + modifier)), affectFilter);
_modifier = modifier;
}
@Override
public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
if (affectsCard(gameState, modifiersQuerying, physicalCard))
return result + _modifier;
return result;
}
}

View File

@@ -4,6 +4,8 @@ import com.gempukku.lotro.cards.AbstractLotroCardBlueprint;
import com.gempukku.lotro.cards.effects.AddBurdenEffect; import com.gempukku.lotro.cards.effects.AddBurdenEffect;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect; import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect;
import com.gempukku.lotro.cards.effects.CancelEffect; import com.gempukku.lotro.cards.effects.CancelEffect;
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
import com.gempukku.lotro.cards.modifiers.VitalityModifier;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Phase;
@@ -11,12 +13,11 @@ import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.AbstractActionProxy;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.CompositeModifier;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.EffectResult;
@@ -40,22 +41,13 @@ public class Card1_001 extends AbstractLotroCardBlueprint {
@Override @Override
public Modifier getAlwaysOnEffect(PhysicalCard self) { public Modifier getAlwaysOnEffect(PhysicalCard self) {
return new AbstractModifier(self, "Adds +1 Str and +1 Vit, bearer is Ring-Bound and Ring-Bearer", Filters.sameCard(self.getAttachedTo())) { List<Modifier> modifiers = new LinkedList<Modifier>();
@Override modifiers.add(new StrengthModifier(null, null, 1));
public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { modifiers.add(new VitalityModifier(null, null, 1));
return (result || (keyword == Keyword.RING_BOUND || keyword == Keyword.RING_BEARER)); modifiers.add(new KeywordModifier(null, null, Keyword.RING_BEARER));
} modifiers.add(new KeywordModifier(null, null, Keyword.RING_BOUND));
@Override return new CompositeModifier(self, Filters.sameCard(self.getAttachedTo()), modifiers);
public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
return result + 1;
}
@Override
public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
return result + 1;
}
};
} }
@Override @Override

View File

@@ -4,6 +4,7 @@ import com.gempukku.lotro.cards.AbstractLotroCardBlueprint;
import com.gempukku.lotro.cards.effects.AddBurdenEffect; import com.gempukku.lotro.cards.effects.AddBurdenEffect;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect; import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect;
import com.gempukku.lotro.cards.effects.CancelEffect; import com.gempukku.lotro.cards.effects.CancelEffect;
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Phase;
@@ -11,12 +12,11 @@ import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.AbstractActionProxy;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.CompositeModifier;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.EffectResult;
@@ -40,17 +40,12 @@ public class Card1_002 extends AbstractLotroCardBlueprint {
@Override @Override
public Modifier getAlwaysOnEffect(PhysicalCard self) { public Modifier getAlwaysOnEffect(PhysicalCard self) {
return new AbstractModifier(self, "Adds +1 Str, bearer is Ring-Bound and Ring-Bearer", Filters.sameCard(self.getAttachedTo())) { List<Modifier> modifiers = new LinkedList<Modifier>();
@Override modifiers.add(new StrengthModifier(null, null, 1));
public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { modifiers.add(new KeywordModifier(null, null, Keyword.RING_BEARER));
return (result || (keyword == Keyword.RING_BOUND || keyword == Keyword.RING_BEARER)); modifiers.add(new KeywordModifier(null, null, Keyword.RING_BOUND));
}
@Override return new CompositeModifier(self, Filters.sameCard(self.getAttachedTo()), modifiers);
public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
return result + 1;
}
};
} }
@Override @Override

View File

@@ -1,16 +1,14 @@
package com.gempukku.lotro.cards.set1.dwarven; package com.gempukku.lotro.cards.set1.dwarven;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.modifiers.OverwhelmedByMultiplierModifier;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import java.util.LinkedList; import java.util.LinkedList;
@@ -44,11 +42,6 @@ public class Card1_008 extends AbstractAttachableFPPossession {
@Override @Override
public Modifier getAlwaysOnEffect(PhysicalCard self) { public Modifier getAlwaysOnEffect(PhysicalCard self) {
return new AbstractModifier(self, "Bearer may not be overwhelmed unless his strength is tripled", Filters.sameCard(self.getAttachedTo())) { return new OverwhelmedByMultiplierModifier(self, Filters.sameCard(self.getAttachedTo()), 3);
@Override
public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result) {
return (opposingStrength >= strength * 3);
}
};
} }
} }

View File

@@ -2,19 +2,19 @@ package com.gempukku.lotro.cards.set1.dwarven;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.effects.WoundEffect; import com.gempukku.lotro.logic.effects.WoundEffect;
import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.CompositeModifier;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.EffectResult;
@@ -52,25 +52,10 @@ public class Card1_014 extends AbstractAttachableFPPossession {
@Override @Override
public Modifier getAlwaysOnEffect(PhysicalCard self) { public Modifier getAlwaysOnEffect(PhysicalCard self) {
return new AbstractModifier(self, "Strength +2, Damage +1", Filters.sameCard(self.getAttachedTo())) { List<Modifier> modifiers = new LinkedList<Modifier>();
@Override modifiers.add(new StrengthModifier(null, null, 2));
public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { modifiers.add(new KeywordModifier(null, null, Keyword.DAMAGE));
return result + 2; return new CompositeModifier(self, Filters.sameCard(self.getAttachedTo()), modifiers);
}
@Override
public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result) {
if (keyword == Keyword.DAMAGE)
return result + 1;
else
return result;
}
@Override
public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) {
return (result || keyword == Keyword.DAMAGE);
}
};
} }
@Override @Override

View File

@@ -2,11 +2,11 @@ package com.gempukku.lotro.cards.set1.dwarven;
import com.gempukku.lotro.cards.AbstractLotroCardBlueprint; import com.gempukku.lotro.cards.AbstractLotroCardBlueprint;
import com.gempukku.lotro.cards.actions.PlayPermanentFromHandAction; import com.gempukku.lotro.cards.actions.PlayPermanentFromHandAction;
import com.gempukku.lotro.cards.modifiers.KeywordModifier;
import com.gempukku.lotro.common.*; import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;

View File

@@ -1,13 +1,13 @@
package com.gempukku.lotro.cards.set1.elven; package com.gempukku.lotro.cards.set1.elven;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.modifiers.KeywordModifier;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;

View File

@@ -2,7 +2,6 @@ package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.KeywordModifier;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
@@ -11,6 +10,7 @@ import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import java.util.LinkedList; import java.util.LinkedList;

View File

@@ -8,6 +8,8 @@ public enum Keyword {
RING_BOUND, RING_BEARER, RING_BOUND, RING_BEARER,
ROAMING,
WEATHER, TALE, WEATHER, TALE,
RIVER, PLAINS, UNDERGROUND, RIVER, PLAINS, UNDERGROUND,

View File

@@ -0,0 +1,133 @@
package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import java.util.List;
public class CompositeModifier implements Modifier {
private PhysicalCard _source;
private Filter _affectFilter;
private List<Modifier> _modifiers;
public CompositeModifier(PhysicalCard source, Filter affectFilter, List<Modifier> modifiers) {
_source = source;
_affectFilter = affectFilter;
_modifiers = modifiers;
}
@Override
public PhysicalCard getSource() {
return _source;
}
@Override
public String getText() {
StringBuilder sb = new StringBuilder();
boolean first = true;
for (Modifier modifier : _modifiers) {
if (!first)
sb.append(", ");
sb.append(modifier.getText());
first = false;
}
return sb.toString();
}
@Override
public boolean affectsCard(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return _affectFilter.accepts(gameState, modifiersQuerying, physicalCard);
}
@Override
public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) {
for (Modifier modifier : _modifiers)
result = modifier.hasKeyword(gameState, modifiersQuerying, physicalCard, keyword, result);
return result;
}
@Override
public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result) {
for (Modifier modifier : _modifiers)
result = modifier.getKeywordCount(gameState, modifiersQuerying, physicalCard, keyword, result);
return result;
}
@Override
public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
for (Modifier modifier : _modifiers)
result = modifier.getStrength(gameState, modifiersQuerying, physicalCard, result);
return result;
}
@Override
public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
for (Modifier modifier : _modifiers)
result = modifier.getVitality(gameState, modifiersQuerying, physicalCard, result);
return result;
}
@Override
public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
for (Modifier modifier : _modifiers)
result = modifier.getTwilightCost(gameState, modifiersQuerying, physicalCard, result);
return result;
}
@Override
public int getPlayOnTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, PhysicalCard target, int result) {
for (Modifier modifier : _modifiers)
result = modifier.getPlayOnTwilightCost(gameState, modifiersQuerying, physicalCard, target, result);
return result;
}
@Override
public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result) {
for (Modifier modifier : _modifiers)
result = modifier.isOverwhelmedByStrength(gameState, modifiersQuerying, physicalCard, strength, opposingStrength, result);
return result;
}
@Override
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result) {
for (Modifier modifier : _modifiers)
result = modifier.canTakeWound(gameState, modifiersQuerying, physicalCard, result);
return result;
}
@Override
public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite) {
for (Modifier modifier : _modifiers)
allyOnCurrentSite = modifier.isAllyOnCurrentSite(gameState, modifiersQuerying, card, allyOnCurrentSite);
return allyOnCurrentSite;
}
@Override
public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result) {
for (Modifier modifier : _modifiers)
result = modifier.getArcheryTotal(gameState, modifiersQuerying, side, result);
return result;
}
@Override
public int getMoveLimit(GameState gameState, ModifiersQuerying modifiersQuerying, int result) {
for (Modifier modifier : _modifiers)
result = modifier.getMoveLimit(gameState, modifiersQuerying, result);
return result;
}
}

View File

@@ -1,11 +1,9 @@
package com.gempukku.lotro.cards.modifiers; package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class KeywordModifier extends AbstractModifier { public class KeywordModifier extends AbstractModifier {
private Keyword _keyword; private Keyword _keyword;

View File

@@ -0,0 +1,19 @@
package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
public class TwilightCostModifier extends AbstractModifier {
private int _twilightCostModifier;
public TwilightCostModifier(PhysicalCard source, Filter affectFilter, int twilightCostModifier) {
super(source, "Twilight cost " + ((twilightCostModifier < 0) ? twilightCostModifier : ("+" + twilightCostModifier)), affectFilter);
_twilightCostModifier = twilightCostModifier;
}
@Override
public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int result) {
return result + _twilightCostModifier;
}
}

View File

@@ -1,13 +1,15 @@
package com.gempukku.lotro.logic.timing.rules; package com.gempukku.lotro.logic.timing.rules;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.*;
import com.gempukku.lotro.logic.modifiers.ModifiersLogic;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import java.util.LinkedList;
import java.util.List;
public class RoamingRule { public class RoamingRule {
private ModifiersLogic _modifiersLogic; private ModifiersLogic _modifiersLogic;
@@ -17,18 +19,18 @@ public class RoamingRule {
} }
public void applyRule() { public void applyRule() {
_modifiersLogic.addAlwaysOnModifier( Filter roamingFilter = Filters.and(Filters.type(CardType.MINION), new Filter() {
new AbstractModifier(null, "Roaming - +2 Twilight cost", Filters.and(Filters.type(CardType.MINION), new Filter() {
@Override @Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return (physicalCard.getBlueprint().getSiteNumber() > gameState.getCurrentSiteNumber()); return (physicalCard.getBlueprint().getSiteNumber() > gameState.getCurrentSiteNumber());
} }
})) { });
@Override
public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int result) { List<Modifier> modifiers = new LinkedList<Modifier>();
return 2 + result; modifiers.add(new KeywordModifier(null, null, Keyword.ROAMING));
} modifiers.add(new TwilightCostModifier(null, null, 2));
}
); _modifiersLogic.addAlwaysOnModifier(
new CompositeModifier(null, roamingFilter, modifiers));
} }
} }