CurrentCastSpells: dont use CardCollection on them

This commit is contained in:
Hans Mackowiak
2020-12-02 13:00:56 +01:00
parent b74bbf1801
commit ea48f28882
4 changed files with 20 additions and 23 deletions

View File

@@ -700,7 +700,7 @@ public class AbilityUtils {
}
*/
CardCollectionView list;
Iterable<Card> list;
if (calcX[0].startsWith("Sacrificed")) {
list = sa.getRootAbility().getPaidList("Sacrificed");
}
@@ -737,17 +737,11 @@ public class AbilityUtils {
}
else if (calcX[0].startsWith("TriggerRemembered")) {
final SpellAbility root = sa.getRootAbility();
CardCollection result = new CardCollection();
for (Object o : root.getTriggerRemembered()) {
if (o instanceof Card) {
result.add((Card) o);
}
}
list = result;
list = Iterables.filter(root.getTriggerRemembered(), Card.class);
}
else if (calcX[0].startsWith("TriggerObjects")) {
final SpellAbility root = sa.getRootAbility();
list = (CardCollection) root.getTriggeringObject(AbilityKey.fromString(calcX[0].substring(14)));
list = Iterables.filter((Iterable<?>) root.getTriggeringObject(AbilityKey.fromString(calcX[0].substring(14))), Card.class);
}
else if (calcX[0].startsWith("Triggered")) {
final SpellAbility root = sa.getRootAbility();

View File

@@ -386,13 +386,7 @@ public class CardFactoryUtil {
}
if (s.startsWith("Valid")) {
final CardCollection cards = new CardCollection();
for (Object o : objects) {
if (o instanceof Card) {
cards.add((Card) o);
}
}
return CardFactoryUtil.handlePaid(cards, s, source);
return CardFactoryUtil.handlePaid(Iterables.filter(objects, Card.class), s, source);
}
int n = s.startsWith("Amount") ? objects.size() : 0;
@@ -1836,7 +1830,7 @@ public class CardFactoryUtil {
* a {@link forge.game.card.Card} object.
* @return a int.
*/
public static int handlePaid(final CardCollectionView paidList, final String string, final Card source) {
public static int handlePaid(final Iterable<Card> paidList, final String string, final Card source) {
if (paidList == null) {
if (string.contains(".")) {
final String[] splitString = string.split("\\.", 2);
@@ -1846,11 +1840,12 @@ public class CardFactoryUtil {
}
}
if (string.startsWith("Amount")) {
int size = Iterables.size(paidList);
if (string.contains(".")) {
final String[] splitString = string.split("\\.", 2);
return doXMath(paidList.size(), splitString[1], source);
return doXMath(size, splitString[1], source);
} else {
return paidList.size();
return size;
}
}
@@ -1875,18 +1870,18 @@ public class CardFactoryUtil {
final String[] splitString = string.split("/", 2);
String valid = splitString[0].substring(6);
final CardCollection list = CardLists.getValidCards(paidList, valid, source.getController(), source);
final List<Card> list = CardLists.getValidCardsAsList(paidList, valid, source.getController(), source);
return doXMath(list.size(), splitString.length > 1 ? splitString[1] : null, source);
}
String filteredString = string;
CardCollection filteredList = new CardCollection(paidList);
Iterable<Card> filteredList = paidList;
final String[] filter = filteredString.split("_");
if (string.startsWith("FilterControlledBy")) {
final String pString = filter[0].substring(18);
FCollectionView<Player> controllers = AbilityUtils.getDefinedPlayers(source, pString, null);
filteredList = CardLists.filterControlledBy(filteredList, controllers);
filteredList = CardLists.filterControlledByAsList(filteredList, controllers);
filteredString = TextUtil.fastReplace(filteredString, pString, "");
filteredString = TextUtil.fastReplace(filteredString, "FilterControlledBy_", "");
}

View File

@@ -204,6 +204,14 @@ public class CardLists {
return CardLists.filter(cardList, CardPredicates.isControlledByAnyOf(player));
}
public static List<Card> filterControlledByAsList(Iterable<Card> cardList, Player player) {
return CardLists.filterAsList(cardList, CardPredicates.isController(player));
}
public static List<Card> filterControlledByAsList(Iterable<Card> cardList, FCollectionView<Player> player) {
return CardLists.filterAsList(cardList, CardPredicates.isControlledByAnyOf(player));
}
public static CardCollection getValidCards(Iterable<Card> cardList, String[] restrictions, Player sourceController, Card source, SpellAbility spellAbility) {
return CardLists.filter(cardList, CardPredicates.restriction(restrictions, sourceController, source, spellAbility));
}

View File

@@ -297,7 +297,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
runParams.put(AbilityKey.CastSA, si.getSpellAbility(true));
runParams.put(AbilityKey.CastSACMC, si.getSpellAbility(true).getHostCard().getCMC());
runParams.put(AbilityKey.CurrentStormCount, thisTurnCast.size());
runParams.put(AbilityKey.CurrentCastSpells, new CardCollection(thisTurnCast));
runParams.put(AbilityKey.CurrentCastSpells, Lists.newArrayList(thisTurnCast));
game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams, true);
// Run SpellCast triggers