Limit and count stacked evaluators
This commit is contained in:
@@ -423,6 +423,28 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"40_13": {
|
||||
"title": "Dwarven Ire",
|
||||
"unique": true,
|
||||
"side": "free people",
|
||||
"culture": "dwarven",
|
||||
"cost": 2,
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": {
|
||||
"type": "addKeyword",
|
||||
"filter": "dwarf",
|
||||
"keyword": "damage",
|
||||
"amount": {
|
||||
"type": "limit",
|
||||
"value": 2,
|
||||
"amount": {
|
||||
"type": "countStacked",
|
||||
"on": "self"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_184": {
|
||||
"title": "Black Steed",
|
||||
"subtitle": "Bred to Serve",
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender.resolver;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.Requirement;
|
||||
import com.gempukku.lotro.cards.build.ValueSource;
|
||||
import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
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.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountStackedEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.LimitEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
@@ -69,6 +70,19 @@ public class ValueResolver {
|
||||
final int count = action.getCardsFromMemory(memory).size();
|
||||
return new ConstantEvaluator(count);
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("limit")) {
|
||||
final int limit = FieldUtils.getInteger(object.get("value"), "value");
|
||||
ValueSource valueSource = resolveEvaluator(object.get("amount"), 0, environment);
|
||||
return (action, playerId, game, self, effectResult, effect) -> new LimitEvaluator(valueSource.getEvaluator(action, playerId, game, self, effectResult, effect), limit);
|
||||
} else if (type.equalsIgnoreCase("countStacked")) {
|
||||
final String on = FieldUtils.getString(object.get("on"), "on");
|
||||
|
||||
final FilterableSource onFilter = environment.getFilterFactory().generateFilter(on);
|
||||
|
||||
return (action, playerId, game, self, effectResult, effect) -> {
|
||||
final Filterable on1 = onFilter.getFilterable(playerId, game, self, effectResult, effect);
|
||||
return new CountStackedEvaluator(on1, Filters.any);
|
||||
};
|
||||
}
|
||||
throw new InvalidCardDefinitionException("Unrecognized type of an evaluator " + type);
|
||||
}
|
||||
|
||||
@@ -3,17 +3,19 @@ package com.gempukku.lotro.cards.build.field.effect.modifier;
|
||||
import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.EffectProcessor;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
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.evaluator.Evaluator;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class AddKeyword implements EffectProcessor {
|
||||
@Override
|
||||
public void processEffect(JSONObject effectObject, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "condition", "keyword");
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "condition", "keyword", "amount");
|
||||
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(effectObject.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "self");
|
||||
@@ -24,7 +26,8 @@ public class AddKeyword implements EffectProcessor {
|
||||
int value = 1;
|
||||
if (keywordSplit.length == 2)
|
||||
value = Integer.parseInt(keywordSplit[1]);
|
||||
final int keywordValue = value;
|
||||
|
||||
final ValueSource amount = ValueResolver.resolveEvaluator(effectObject.get("amount"), value, environment);
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter);
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
@@ -33,9 +36,10 @@ public class AddKeyword implements EffectProcessor {
|
||||
new ModifierSource() {
|
||||
@Override
|
||||
public Modifier getModifier(LotroGame game, PhysicalCard self) {
|
||||
final Evaluator evaluator = amount.getEvaluator(null, null, game, self, null, null);
|
||||
return new KeywordModifier(self,
|
||||
filterableSource.getFilterable(null, game, self, null, null),
|
||||
new RequirementCondition(requirements, null, self, null, null), keyword, keywordValue);
|
||||
new RequirementCondition(requirements, null, self, null, null), keyword, evaluator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user