ComputerUtilMana: remove ManaProducingCard, replace it with static function

This commit is contained in:
Hanmac
2016-10-30 18:09:43 +00:00
parent e48968bce1
commit 0c30e42c39

View File

@@ -4,6 +4,7 @@ import com.google.common.base.Predicate;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap; import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import forge.card.ColorSet; import forge.card.ColorSet;
@@ -96,51 +97,49 @@ public class ComputerUtilMana {
return payManaCost(cost, sa, ai, test, checkPlayable); return payManaCost(cost, sa, ai, test, checkPlayable);
} }
private static class ManaProducingCard { private static Integer scoreManaProducingCard(final Card card) {
private int score; int score = 0;
public ManaProducingCard(final Card card) { for (SpellAbility ability : card.getSpellAbilities()) {
score = 0; ability.setActivatingPlayer(card.getController());
if (ability.isManaAbility()) {
for (SpellAbility ability : card.getSpellAbilities()) { score += ability.calculateScoreForManaAbility();
ability.setActivatingPlayer(card.getController());
if (ability.isManaAbility()) {
score += ability.calculateScoreForManaAbility();
}
else if (!ability.isTrigger() && ability.isPossible()) {
score += 13; //add 13 for any non-mana activated abilities
}
} }
else if (!ability.isTrigger() && ability.isPossible()) {
if (card.isCreature()) { score += 13; //add 13 for any non-mana activated abilities
//treat attacking and blocking as though they're non-mana abilities
if (CombatUtil.canAttack(card, card.getController().getOpponent())) {
score += 13;
}
if (CombatUtil.canBlock(card)) {
score += 13;
}
} }
} }
if (card.isCreature()) {
//treat attacking and blocking as though they're non-mana abilities
if (CombatUtil.canAttack(card)) {
score += 13;
}
if (CombatUtil.canBlock(card)) {
score += 13;
}
}
return score;
} }
private static void sortManaAbilities(final Multimap<ManaCostShard, SpellAbility> manaAbilityMap) { private static void sortManaAbilities(final Multimap<ManaCostShard, SpellAbility> manaAbilityMap) {
final Map<Card, ManaProducingCard> manaCardMap = new HashMap<>(); final Map<Card, Integer> manaCardMap = Maps.newHashMap();
final List<Card> orderedCards = new ArrayList<>(); final List<Card> orderedCards = Lists.newArrayList();
for (final ManaCostShard shard : manaAbilityMap.keySet()) { for (final ManaCostShard shard : manaAbilityMap.keySet()) {
for (SpellAbility ability : manaAbilityMap.get(shard)) { for (SpellAbility ability : manaAbilityMap.get(shard)) {
if (!manaCardMap.containsKey(ability.getHostCard())) { final Card hostCard = ability.getHostCard();
ManaProducingCard manaProducingCard = new ManaProducingCard(ability.getHostCard()); if (!manaCardMap.containsKey(hostCard)) {
manaCardMap.put(ability.getHostCard(), manaProducingCard); manaCardMap.put(hostCard, scoreManaProducingCard(hostCard));
orderedCards.add(ability.getHostCard()); orderedCards.add(hostCard);
} }
} }
} }
Collections.sort(orderedCards, new Comparator<Card>() { Collections.sort(orderedCards, new Comparator<Card>() {
@Override @Override
public int compare(final Card card1, final Card card2) { public int compare(final Card card1, final Card card2) {
return Integer.compare(manaCardMap.get(card1).score, manaCardMap.get(card2).score); return Integer.compare(manaCardMap.get(card1), manaCardMap.get(card2));
} }
}); });