More flexibility

This commit is contained in:
TRT
2023-01-21 16:12:49 +01:00
committed by tool4EvEr
parent c706397290
commit 62dcf9d025
3 changed files with 11 additions and 9 deletions

View File

@@ -43,6 +43,7 @@ import forge.game.card.CardLists;
import forge.game.card.CardPredicates; import forge.game.card.CardPredicates;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.cost.Cost; import forge.game.cost.Cost;
import forge.game.cost.CostPart;
import forge.game.keyword.Keyword; import forge.game.keyword.Keyword;
import forge.game.keyword.KeywordInterface; import forge.game.keyword.KeywordInterface;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
@@ -346,17 +347,17 @@ public class CombatUtil {
return attackCost; return attackCost;
} }
public static CardCollection getOptionalAttackCostCreatures(final CardCollection attackers) { public static CardCollection getOptionalAttackCostCreatures(final CardCollection attackers, Class<? extends CostPart> costType) {
final CardCollection exerters = new CardCollection(); final CardCollection attackersWithCost = new CardCollection();
for (final Card card : attackers) { for (final Card card : attackers) {
for (final StaticAbility stAb : card.getStaticAbilities()) { for (final StaticAbility stAb : card.getStaticAbilities()) {
if (stAb.hasExertCost(card)) { if (stAb.hasAttackCost(card, costType)) {
exerters.add(card); attackersWithCost.add(card);
} }
} }
} }
return exerters; return attackersWithCost;
} }
public static boolean payRequiredBlockCosts(Game game, Card blocker, Card attacker) { public static boolean payRequiredBlockCosts(Game game, Card blocker, Card attacker) {

View File

@@ -40,6 +40,7 @@ import forge.game.card.CardZoneTable;
import forge.game.card.CounterEnumType; import forge.game.card.CounterEnumType;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.combat.CombatUtil; import forge.game.combat.CombatUtil;
import forge.game.cost.CostExert;
import forge.game.event.GameEventAttackersDeclared; import forge.game.event.GameEventAttackersDeclared;
import forge.game.event.GameEventBlockersDeclared; import forge.game.event.GameEventBlockersDeclared;
import forge.game.event.GameEventCardStatsChanged; import forge.game.event.GameEventCardStatsChanged;
@@ -560,7 +561,7 @@ public class PhaseHandler implements java.io.Serializable {
} }
// CR 508.1g // CR 508.1g
List<Card> possibleExerters = CombatUtil.getOptionalAttackCostCreatures(combat.getAttackers()); List<Card> possibleExerters = CombatUtil.getOptionalAttackCostCreatures(combat.getAttackers(), CostExert.class);
if (!possibleExerters.isEmpty()) { if (!possibleExerters.isEmpty()) {
possibleExerters = whoDeclares.getController().exertAttackers(possibleExerters); possibleExerters = whoDeclares.getController().exertAttackers(possibleExerters);
} }

View File

@@ -39,7 +39,7 @@ import forge.game.card.CardCollectionView;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CardState; import forge.game.card.CardState;
import forge.game.cost.Cost; import forge.game.cost.Cost;
import forge.game.cost.CostExert; import forge.game.cost.CostPart;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
@@ -335,11 +335,11 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone
return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, target); return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, target);
} }
public final boolean hasExertCost(final Card attacker) { public final boolean hasAttackCost(final Card attacker, Class<? extends CostPart> costType) {
if (this.isSuppressed() || !getParam("Mode").equals("OptionalAttackCost") || !this.checkConditions()) { if (this.isSuppressed() || !getParam("Mode").equals("OptionalAttackCost") || !this.checkConditions()) {
return false; return false;
} }
return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, null).hasSpecificCostType(CostExert.class); return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, null).hasSpecificCostType(costType);
} }
public final Cost getBlockCost(final Card blocker, final Card attacker) { public final Cost getBlockCost(final Card blocker, final Card attacker) {