forked from External/mage
69 lines
2.2 KiB
Java
69 lines
2.2 KiB
Java
package mage.abilities.effects.common;
|
|
|
|
import mage.abilities.Ability;
|
|
import mage.abilities.Mode;
|
|
import mage.abilities.costs.Cost;
|
|
import mage.abilities.effects.Effect;
|
|
import mage.abilities.effects.OneShotEffect;
|
|
import mage.constants.Outcome;
|
|
import mage.game.Game;
|
|
import mage.players.Player;
|
|
|
|
public class DoIfAnyNumberCostPaid extends OneShotEffect {
|
|
|
|
private final Effect executingEffect;
|
|
private final Cost cost;
|
|
|
|
public DoIfAnyNumberCostPaid(OneShotEffect effect, Cost cost) {
|
|
super(Outcome.Benefit);
|
|
this.executingEffect = effect;
|
|
this.cost = cost;
|
|
}
|
|
|
|
private DoIfAnyNumberCostPaid(final DoIfAnyNumberCostPaid effect) {
|
|
super(effect);
|
|
this.executingEffect = effect.executingEffect.copy();
|
|
this.cost = effect.cost.copy();
|
|
}
|
|
|
|
@Override
|
|
public DoIfAnyNumberCostPaid copy() {
|
|
return new DoIfAnyNumberCostPaid(this);
|
|
}
|
|
|
|
@Override
|
|
public boolean apply(Game game, Ability source) {
|
|
Player controller = game.getPlayer(source.getControllerId());
|
|
if (controller == null) {
|
|
return false;
|
|
}
|
|
String costText = cost.getText();
|
|
int timesPaid = 0;
|
|
while (controller.canRespond()) {
|
|
cost.clearPaid();
|
|
if (cost.canPay(source, source, source.getControllerId(), game)
|
|
&& controller.chooseUse(
|
|
outcome, "Pay " + costText + "? You have paid this cost " +
|
|
timesPaid + " time" + (timesPaid != 1 ? "s" : ""), source, game
|
|
) && cost.pay(source, game, source, source.getControllerId(), false)) {
|
|
timesPaid++;
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
if (timesPaid > 0) {
|
|
executingEffect.setValue("timesPaid", timesPaid);
|
|
return executingEffect.apply(game, source);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public String getText(Mode mode) {
|
|
if (staticText != null && !staticText.isEmpty()) {
|
|
return staticText;
|
|
}
|
|
return "you may pay " + cost.getText() + " any number of times. When you pay this cost one or more times, "
|
|
+ executingEffect.getText(mode);
|
|
}
|
|
}
|