Discount wiring
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user