package magic.model.event;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicSource;
import magic.model.action.TapAction;
import magic.model.choice.MagicTargetChoice;
import magic.model.target.MagicTapTargetPicker;
public class MagicCrewCostEvent extends MagicEvent {
private final int crew;
public MagicCrewCostEvent(final MagicSource source, final int n) {
super(
source,
MagicTargetChoice.AN_UNTAPPED_CREATURE_YOU_CONTROL,
MagicTapTargetPicker.Tap,
n,
EVENT_ACTION,
"Tap an untapped creature you control$."
);
crew = n;
}
@Override
public boolean isSatisfied() {
return getTargetChoice().getPermanentFilter()
.filter(getSource(), getPlayer())
.stream()
.mapToInt(it -> it.getPower())
.sum() >= crew;
}
public static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent it) -> {
game.doAction(new TapAction(it));
final int n = event.getRefInt() - it.getPower();
if (n > 0) {
game.addFirstEvent(new MagicCrewCostEvent(event.getSource(), n));
}
});
};
}