Discount wiring

This commit is contained in:
marcin.sciesinski
2019-09-04 22:31:29 -07:00
parent 7f244e8caa
commit ac3bd38590
4 changed files with 65 additions and 2 deletions

View File

@@ -8,6 +8,7 @@ import com.gempukku.lotro.game.LotroCardBlueprint;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.*;
import com.gempukku.lotro.logic.effects.DiscountEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
@@ -61,6 +62,7 @@ public class BuiltLotroCardBlueprint implements LotroCardBlueprint {
private List<TwilightCostModifierSource> twilightCostModifiers;
private List<ExtraPlayCostSource> extraPlayCosts;
private List<DiscountSource> discountSources;
private ActionSource playEventAction;
@@ -77,6 +79,12 @@ public class BuiltLotroCardBlueprint implements LotroCardBlueprint {
this.extraPossessionClassTest = extraPossessionClassTest;
}
public void appendDiscountSource(DiscountSource discountSource) {
if (discountSources == null)
discountSources = new LinkedList<>();
discountSources.add(discountSource);
}
public void appendOptionalInHandBeforeAction(ActionSource actionSource) {
if (optionalInHandBeforeActions == null)
optionalInHandBeforeActions = new LinkedList<>();
@@ -636,12 +644,26 @@ public class BuiltLotroCardBlueprint implements LotroCardBlueprint {
@Override
public int getPotentialDiscount(LotroGame game, String playerId, PhysicalCard self) {
return 0;
if (discountSources == null)
return 0;
int result = 0;
DefaultActionContext actionContext = new DefaultActionContext(playerId, game, self, null, null);
for (DiscountSource discountSource : discountSources)
result += discountSource.getPotentialDiscount(actionContext);
return result;
}
@Override
public void appendPotentialDiscountEffects(LotroGame game, CostToEffectAction action, String playerId, PhysicalCard self) {
if (discountSources != null) {
DefaultActionContext actionContext = new DefaultActionContext(playerId, game, self, null, null);
for (DiscountSource discountSource : discountSources) {
final DiscountEffect discountEffect = discountSource.getDiscountEffect(actionContext);
action.appendPotentialDiscount(discountEffect);
}
}
}
@Override

View File

@@ -0,0 +1,9 @@
package com.gempukku.lotro.cards.build;
import com.gempukku.lotro.logic.effects.DiscountEffect;
public interface DiscountSource {
int getPotentialDiscount(ActionContext actionContext);
DiscountEffect getDiscountEffect(ActionContext actionContext);
}

View File

@@ -25,6 +25,7 @@ public class EffectFieldProcessor implements FieldProcessor {
effectProcessors.put("extracost", new ExtraCost());
effectProcessors.put("modifier", new Modifier());
effectProcessors.put("extrapossessionclass", new ExtraPossessionClassEffectProcessor());
effectProcessors.put("discount", new PotentialDiscount());
}
@Override

View File

@@ -0,0 +1,31 @@
package com.gempukku.lotro.cards.build.field.effect;
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.logic.effects.DiscountEffect;
import org.json.simple.JSONObject;
public class PotentialDiscount implements EffectProcessor {
@Override
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "amount", "discount");
final ValueSource amountSource = ValueResolver.resolveEvaluator(value.get("amount"), 0, environment);
final JSONObject discount = (JSONObject) value.get("discount");
blueprint.appendDiscountSource(
new DiscountSource() {
@Override
public int getPotentialDiscount(ActionContext actionContext) {
return amountSource.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), actionContext.getSource());
}
@Override
public DiscountEffect getDiscountEffect(ActionContext actionContext) {
return null;
}
});
}
}