Altering ModifyRoamingPenalty to accept an evaluated value rather than an integer.

This commit is contained in:
Christian 'ketura' McCarty
2024-05-29 21:16:06 -05:00
parent be82005de9
commit 1bb4e4dd19
2 changed files with 21 additions and 6 deletions

View File

@@ -2,8 +2,10 @@ package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.RoamingPenaltyModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import org.json.simple.JSONObject;
public class ModifyRoamingPenalty implements ModifierSourceProducer {
@@ -11,7 +13,7 @@ public class ModifyRoamingPenalty implements ModifierSourceProducer {
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "filter", "requires", "amount");
final int amount = FieldUtils.getInteger(object.get("amount"), "amount");
final ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("amount"), environment);
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires");
final String filter = FieldUtils.getString(object.get("filter"), "filter");
@@ -21,9 +23,10 @@ public class ModifyRoamingPenalty implements ModifierSourceProducer {
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
final Evaluator evaluator = valueSource.getEvaluator(actionContext);
return new RoamingPenaltyModifier(actionContext.getSource(),
filterableSource.getFilterable(actionContext),
RequirementCondition.createCondition(requirements, actionContext), amount);
RequirementCondition.createCondition(requirements, actionContext), evaluator);
}
};
}

View File

@@ -3,17 +3,29 @@ package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
public class RoamingPenaltyModifier extends AbstractModifier {
private final int _modifier;
private final Evaluator _evaluator;
public RoamingPenaltyModifier(PhysicalCard source, Filterable affectFilter, Condition condition, int modifier) {
super(source, "Roaming penalty " + ((modifier > 0) ? ("+" + modifier) : modifier), affectFilter, condition, ModifierEffect.TWILIGHT_COST_MODIFIER);
_modifier = modifier;
this(source, affectFilter, condition, new ConstantEvaluator(modifier));
}
public RoamingPenaltyModifier(PhysicalCard source, Filterable affectFilter, Condition condition, Evaluator evaluator) {
super(source, null, affectFilter, condition, ModifierEffect.TWILIGHT_COST_MODIFIER);
_evaluator = evaluator;
}
@Override
public String getText(LotroGame game, PhysicalCard self) {
int modifier = _evaluator.evaluateExpression(game, self);
return "Roaming penalty " + ((modifier > 0) ? ("+" + modifier) : modifier);
}
@Override
public int getRoamingPenaltyModifier(LotroGame game, PhysicalCard physicalCard) {
return _modifier;
return _evaluator.evaluateExpression(game, physicalCard);
}
}