package magic.model.event;
import magic.model.MagicCounterType;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.action.ChangeCountersAction;
import magic.model.condition.MagicCondition;
import magic.model.condition.MagicConditionFactory;
public class MagicRemoveCounterEvent extends MagicEvent {
private final MagicCondition cond;
public MagicRemoveCounterEvent(final MagicPermanent permanent,final MagicCounterType counterType,final int amount) {
super(
permanent,
(final MagicGame game, final MagicEvent event) ->
game.doAction(new ChangeCountersAction(
event.getPermanent(),
counterType,
-amount
)),
genDescription(permanent,counterType,amount)
);
cond = MagicConditionFactory.CounterAtLeast(counterType, amount);
}
@Override
public boolean isSatisfied() {
return cond.accept(getSource()) && super.isSatisfied();
}
private static String genDescription(final MagicPermanent permanent,final MagicCounterType counterType,final int amount) {
final StringBuilder description=new StringBuilder("Remove ");
if (amount==1) {
description.append("a ").append(counterType.getName()).append(" counter");
} else {
description.append(amount).append(' ').append(counterType.getName()).append(" counters");
}
description.append(" from ").append(permanent.getName()).append('.');
return description.toString();
}
}