package magic.model.target;
import magic.model.MagicAmount;
import magic.model.MagicAmountFactory;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicPlayer;
import magic.model.MagicPowerToughness;
import magic.model.event.MagicEvent;
public class MagicWeakenTargetPicker extends MagicTargetPicker<MagicPermanent> {
private static final int ATTACKING_BLOCKED=4<<8;
private static final int ATTACKING=3<<8;
private static final int BLOCKING=2<<8;
private static final int CAN_TAP=1<<8;
private int amountToughness;
private int amountPower;
private final MagicAmount count;
public MagicWeakenTargetPicker(final MagicAmount aCount) {
amountToughness = -1;
count = aCount;
}
public MagicWeakenTargetPicker(final int aAmountPower,final int aAmountToughness) {
amountToughness = aAmountToughness;
amountPower = aAmountPower;
count = MagicAmountFactory.One;
}
public MagicWeakenTargetPicker create(final String arg) {
final String[] args = arg.replace('+','0').split("/");
final int p = -Integer.parseInt(args[0]);
final int t = -Integer.parseInt(args[1]);
return new MagicWeakenTargetPicker(p, t);
}
@Override
protected void setEvent(final MagicEvent event) {
if (amountToughness < 0 || count.isConstant() == false) {
amountToughness = -count.getAmount(event);
}
}
@Override
protected int getTargetScore(final MagicGame game,final MagicPlayer player,final MagicPermanent permanent) {
final MagicPowerToughness pt=permanent.getPowerToughness();
final int lethalToughness=pt.getPositiveToughness()-permanent.getDamage();
if (lethalToughness<=amountToughness) {
return permanent.getScore()<<12;
}
int score=0;
// First level.
if (permanent.isAttacking()) {
if (permanent.isBlocked()) {
score=ATTACKING_BLOCKED;
} else {
score=ATTACKING;
}
} else if (permanent.isBlocking()) {
score=BLOCKING;
} else if (permanent.canTap()) {
score=CAN_TAP;
}
if (amountToughness>0) {
// Second level.
score+=Math.max(15,lethalToughness)<<4;
}
// Third level.
score+=Math.max(15,pt.getPositivePower() - amountPower);
return score;
}
}