Fixing CanPlayFromDiscard bad definition. Rearranging requirements to put operations at the top

This commit is contained in:
Christian 'ketura' McCarty
2024-05-29 22:58:53 -05:00
parent 9f42fbd555
commit e81128f787
3 changed files with 19 additions and 15 deletions

View File

@@ -101,7 +101,7 @@
requires: {
type: canPlayFromDiscard
filter: corsair
cost: {
discount: {
type: ForEachCultureToken
culture: raider
filter: self

View File

@@ -1,23 +1,26 @@
package com.gempukku.lotro.cards.build.field.effect.requirement;
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
import com.gempukku.lotro.cards.build.FilterableSource;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
import com.gempukku.lotro.cards.build.Requirement;
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.timing.PlayConditions;
import org.json.simple.JSONObject;
public class CanPlayFromDiscard implements RequirementProducer {
@Override
public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "cost", "filter");
FieldUtils.validateAllowedFields(object, "discount", "filter");
final int cost = FieldUtils.getInteger(object.get("count"), "count", 0);
final ValueSource discountValue = ValueResolver.resolveEvaluator(object.get("discount"), 0, environment);
final String filter = FieldUtils.getString(object.get("filter"), "filter");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
return (actionContext) -> PlayConditions.canPlayFromDiscard(actionContext.getPerformingPlayer(), actionContext.getGame(), cost, filterableSource.getFilterable(actionContext));
return (actionContext) -> {
final int discount = discountValue.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null);
return PlayConditions.canPlayFromDiscard(actionContext.getPerformingPlayer(), actionContext.getGame(),
discount, filterableSource.getFilterable(actionContext));
};
}
}

View File

@@ -13,9 +13,16 @@ public class RequirementFactory {
private final Map<String, RequirementProducer> requirementProducers = new HashMap<>();
public RequirementFactory() {
requirementProducers.put("not", new NotRequirementProducer());
requirementProducers.put("and", new AndRequirementProducer());
requirementProducers.put("not", new NotRequirementProducer());
requirementProducers.put("or", new OrRequirementProducer());
requirementProducers.put("isequal", new IsEqual());
requirementProducers.put("isnotequal", new IsNotEqual());
requirementProducers.put("isgreaterthan", new IsGreaterThan());
requirementProducers.put("isgreaterthanorequal", new IsGreaterThanOrEqual());
requirementProducers.put("islessthan", new IsLessThan());
requirementProducers.put("islessthanorequal", new IsLessThanOrEqual());
requirementProducers.put("canmove", new CanMove());
requirementProducers.put("canplayfromdiscard", new CanPlayFromDiscard());
requirementProducers.put("canselfbeplayed", new CanSelfBePlayed());
@@ -47,12 +54,6 @@ public class RequirementFactory {
requirementProducers.put("hasinzonedata", new HasInZoneData());
requirementProducers.put("haveinitiative", new HaveInitiative());
requirementProducers.put("isahead", new IsAhead());
requirementProducers.put("isequal", new IsEqual());
requirementProducers.put("isgreaterthan", new IsGreaterThan());
requirementProducers.put("isgreaterthanorequal", new IsGreaterThanOrEqual());
requirementProducers.put("islessthan", new IsLessThan());
requirementProducers.put("islessthanorequal", new IsLessThanOrEqual());
requirementProducers.put("isnotequal", new IsNotEqual());
requirementProducers.put("isowner", new IsOwnerRequirementProducer());
requirementProducers.put("isside", new IsSideRequirementProducer());
requirementProducers.put("killedwithsurplusdamage", new KilledWithSurplusDamage());