package magic.model.target; import magic.model.MagicAbility; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.MagicPlayer; import magic.model.MagicPowerToughness; public class MagicPumpTargetPicker extends MagicTargetPicker<MagicPermanent> { private static final MagicPumpTargetPicker INSTANCE=new MagicPumpTargetPicker(); private static final int ATTACKING_UNBLOCKED=5<<12; private static final int ATTACKING_TRAMPLE=4<<12; private static final int ATTACKING=3<<12; private static final int BLOCKING=2<<12; private static final int CAN_TAP=1<<12; private static final int DOUBLE_STRIKE=2<<8; private static final int LIFELINK=1<<8; private MagicPumpTargetPicker() {} public static MagicPumpTargetPicker create() { return INSTANCE; } @Override protected int getTargetScore(final MagicGame game,final MagicPlayer player,final MagicPermanent permanent) { final MagicPowerToughness pt=permanent.getPowerToughness(); int score=0; // First level. if (permanent.isAttacking()) { if (permanent.isBlocked()) { if (permanent.hasAbility(MagicAbility.Trample)) { score=ATTACKING_TRAMPLE; } else { score=ATTACKING; } } else { score=ATTACKING_UNBLOCKED; } } else if (permanent.isBlocking()) { score=BLOCKING; } else if (permanent.canTap()) { score=CAN_TAP; } // Second level. if (permanent.hasAbility(MagicAbility.DoubleStrike)) { score+=DOUBLE_STRIKE; } else if (permanent.hasAbility(MagicAbility.Lifelink)) { score+=LIFELINK; } // Third level. final int power=15-pt.getPositivePower(); if (power>0) { score+=power<<4; } // Fourth level. final int toughness=15-pt.getPositiveToughness()+permanent.getDamage(); if (toughness>0) { score+=toughness; } return permanent.getController()==player?score:-score; } }