From 3c5a3b426c1b0898219317aa0c30106db5f8d0b7 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sat, 9 Jul 2022 17:29:41 +0200 Subject: [PATCH] No SpellAbilityRestriction in Subs (performance + fix AI mayplay Charms) --- forge-ai/src/main/java/forge/ai/ability/CharmAi.java | 6 ++---- .../src/main/java/forge/game/ability/AbilityFactory.java | 6 ++++-- .../src/main/java/forge/game/spellability/SpellAbility.java | 5 ++++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java index 15dc3b6ad26..ebb6a5b94a6 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java @@ -90,6 +90,8 @@ public class CharmAi extends SpellAbilityAi { for (AbilitySub sub : choices) { sub.setActivatingPlayer(ai); sub.getRestrictions().setZone(sub.getParent().getRestrictions().getZone()); + + // TODO checks from MayPlay fail for subs currently if (AiPlayDecision.WillPlay == aic.canPlaySa(sub)) { chosenList.add(sub); if (chosenList.size() == num) { @@ -101,8 +103,6 @@ public class CharmAi extends SpellAbilityAi { // Second pass using doTrigger(false) to fulfill minimum choice choices.removeAll(chosenList); for (AbilitySub sub : choices) { - sub.setActivatingPlayer(ai); - sub.getRestrictions().setZone(sub.getParent().getRestrictions().getZone()); if (aic.doTrigger(sub, false)) { chosenList.add(sub); if (chosenList.size() == min) { @@ -114,8 +114,6 @@ public class CharmAi extends SpellAbilityAi { if (chosenList.size() < min) { choices.removeAll(chosenList); for (AbilitySub sub : choices) { - sub.setActivatingPlayer(ai); - sub.getRestrictions().setZone(sub.getParent().getRestrictions().getZone()); if (aic.doTrigger(sub, true)) { chosenList.add(sub); if (chosenList.size() == min) { diff --git a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java index a34a1019d38..9396f9ff2df 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java @@ -426,7 +426,9 @@ public final class AbilityFactory { private static final void makeRestrictions(final SpellAbility sa) { // SpellAbilityRestrictions should be added in here final SpellAbilityRestriction restrict = sa.getRestrictions(); - restrict.setRestrictions(sa.getMapParams()); + if (restrict != null) { + restrict.setRestrictions(sa.getMapParams()); + } } /** @@ -438,7 +440,7 @@ public final class AbilityFactory { * a {@link forge.game.spellability.SpellAbility} object. */ private static final void makeConditions(final SpellAbility sa) { - // SpellAbilityRestrictions should be added in here + // SpellAbilityConditions should be added in here final SpellAbilityCondition condition = sa.getConditions(); condition.setConditions(sa.getMapParams()); } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index ab9d7fc1426..1cdb04d8176 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -138,7 +138,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit /** The pay costs. */ private Cost payCosts; - private SpellAbilityRestriction restrictions = new SpellAbilityRestriction(); + private SpellAbilityRestriction restrictions; private SpellAbilityCondition conditions = new SpellAbilityCondition(); private AbilitySub subAbility; @@ -214,6 +214,9 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit view0 = new SpellAbilityView(this); } view = view0; + if (!(this instanceof AbilitySub)) { + restrictions = new SpellAbilityRestriction(); + } } @Override