package magic.model.target;
import magic.model.MagicAbility;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicPlayer;
import magic.model.MagicPowerToughness;
import magic.model.mstatic.MagicStatic;
import java.util.Set;
public class MagicEquipTargetPicker extends MagicTargetPicker<MagicPermanent> {
private final Set<MagicAbility> givenAbilityFlags = MagicAbility.noneOf();
private final MagicPowerToughness givenPT = new MagicPowerToughness(0,0);
public MagicEquipTargetPicker(final MagicPermanent equipment) {
// determine given ability and given pt of equipment from list of static abilities
for (final MagicStatic mstatic : equipment.getStatics()) {
mstatic.modAbilityFlags(equipment, MagicPermanent.NONE, givenAbilityFlags);
mstatic.modPowerToughness(equipment, MagicPermanent.NONE, givenPT);
}
}
@Override
protected int getTargetScore(final MagicGame game,final MagicPlayer player,final MagicPermanent permanent) {
// penalty when already equipped
int penalty = permanent.isEquipped() ? 3 : 0;
// penalty when there is an overlap between abilities
givenAbilityFlags.retainAll(permanent.getAbilityFlags());
if (!givenAbilityFlags.isEmpty()) {
penalty+=6;
}
final MagicPowerToughness pt = permanent.getPowerToughness();
final boolean defensive = givenPT.toughness() > givenPT.power();
// Defensive
if (defensive) {
return 20-pt.toughness()-penalty;
} else {
// Offensive
return 1+pt.power()*2-pt.toughness()-penalty;
}
}
}