From a4b99f48f2bf04779f8df14e8bd15c1e9ff95bd3 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 26 May 2013 12:52:54 +0000 Subject: [PATCH] test mana-can-pay removes manasource abilities from lists instead of mantaining a list of used cards. --- src/main/java/forge/game/ai/ComputerUtilMana.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/forge/game/ai/ComputerUtilMana.java b/src/main/java/forge/game/ai/ComputerUtilMana.java index 8695ec1ea13..d790b2e509a 100644 --- a/src/main/java/forge/game/ai/ComputerUtilMana.java +++ b/src/main/java/forge/game/ai/ComputerUtilMana.java @@ -3,6 +3,7 @@ package forge.game.ai; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -105,11 +106,7 @@ public class ComputerUtilMana { MapOfLists sourcesForShards = ComputerUtilMana.groupAndOrderToPayShards(ai, manaAbilityMap, cost); // Loop over mana needed - List cardsUsed = new ArrayList(); - //don't use a card to pay for itself - miscalculations! - cardsUsed.add(sa.getSourceCard()); - ManaCostShard toPay = null; while (!cost.isPaid()) { toPay = getNextShardToPay(cost, sourcesForShards); @@ -118,7 +115,7 @@ public class ComputerUtilMana { SpellAbility saPayment = null; if( saList != null ) { for (final SpellAbility ma : saList) { - if(cardsUsed.contains(ma.getSourceCard()) ) + if(ma.getSourceCard() == sa.getSourceCard()) continue; if( canPayShardWithSpellAbility(toPay, ai, ma, sa, checkPlayable || !test ) ) { saPayment = ma; @@ -147,9 +144,13 @@ public class ComputerUtilMana { // remove from available lists for(Collection kv : sourcesForShards.values()) { - kv.remove(saPayment); + Iterator itSa = kv.iterator(); + while(itSa.hasNext()) { + SpellAbility srcSa = itSa.next(); + if( srcSa.getSourceCard().equals(saPayment.getSourceCard()) ) + itSa.remove(); + } } - cardsUsed.add(saPayment.getSourceCard()); } else { if (saPayment.getPayCosts() != null) { final CostPayment pay = new CostPayment(saPayment.getPayCosts(), saPayment);