mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
classes using generalized mayPlaySpellAbilityForFree and playFromSuspend
This commit is contained in:
@@ -48,7 +48,6 @@ import forge.card.replacement.ReplacementEffect;
|
|||||||
import forge.card.replacement.ReplacementResult;
|
import forge.card.replacement.ReplacementResult;
|
||||||
import forge.card.spellability.AbilityManaPart;
|
import forge.card.spellability.AbilityManaPart;
|
||||||
import forge.card.spellability.AbilityTriggered;
|
import forge.card.spellability.AbilityTriggered;
|
||||||
import forge.card.spellability.Spell;
|
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.SpellPermanent;
|
import forge.card.spellability.SpellPermanent;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
@@ -56,9 +55,7 @@ import forge.card.staticability.StaticAbility;
|
|||||||
import forge.card.trigger.Trigger;
|
import forge.card.trigger.Trigger;
|
||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.card.trigger.ZCTrigger;
|
import forge.card.trigger.ZCTrigger;
|
||||||
import forge.game.GameState;
|
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
import forge.game.ai.ComputerUtil;
|
|
||||||
import forge.game.event.CounterAddedEvent;
|
import forge.game.event.CounterAddedEvent;
|
||||||
import forge.game.event.CardEquippedEvent;
|
import forge.game.event.CardEquippedEvent;
|
||||||
import forge.game.event.CounterRemovedEvent;
|
import forge.game.event.CounterRemovedEvent;
|
||||||
@@ -1328,7 +1325,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.hasSuspend() && Singletons.getModel().getGame().isCardExiled(this)) {
|
if (this.hasSuspend() && Singletons.getModel().getGame().isCardExiled(this)) {
|
||||||
playFromSuspend();
|
getOwner().getController().playFromSuspend(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1338,41 +1335,6 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
this.updateObservers();
|
this.updateObservers();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void playFromSuspend() {
|
|
||||||
final Card c = this;
|
|
||||||
final GameState game = Singletons.getModel().getGame();
|
|
||||||
|
|
||||||
c.setSuspendCast(true);
|
|
||||||
// set activating player for base spell ability
|
|
||||||
c.getSpellAbility()[0].setActivatingPlayer(c.getOwner());
|
|
||||||
// Any trigger should cause the phase not to skip
|
|
||||||
for (Player p : game.getPlayers()) {
|
|
||||||
p.getController().autoPassCancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c.getOwner().isHuman()) {
|
|
||||||
game.getAction().playCardWithoutManaCost(c, c.getOwner());
|
|
||||||
} else {
|
|
||||||
final List<SpellAbility> choices = this.getBasicSpells();
|
|
||||||
|
|
||||||
for (final SpellAbility sa : choices) {
|
|
||||||
//Spells
|
|
||||||
if (sa instanceof Spell) {
|
|
||||||
Spell spell = (Spell) sa;
|
|
||||||
if (!spell.canPlayFromEffectAI(true, true)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!sa.canPlayAI()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ComputerUtil.playSpellAbilityWithoutPayingManaCost(c.getOwner(), sa, game);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Getter for the field <code>counters</code>.
|
* Getter for the field <code>counters</code>.
|
||||||
|
|||||||
@@ -28,12 +28,10 @@ import forge.Singletons;
|
|||||||
import forge.card.CardRules;
|
import forge.card.CardRules;
|
||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.spellability.AbilityActivated;
|
import forge.card.spellability.AbilityActivated;
|
||||||
import forge.card.spellability.Spell;
|
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.SpellPermanent;
|
import forge.card.spellability.SpellPermanent;
|
||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.error.ErrorViewer;
|
import forge.error.ErrorViewer;
|
||||||
import forge.game.ai.ComputerUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
import forge.item.CardDb;
|
import forge.item.CardDb;
|
||||||
@@ -209,16 +207,7 @@ public class CardFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (controller.isHuman()) {
|
controller.getController().mayPlaySpellAbilityForFree(copySA);
|
||||||
Singletons.getModel().getGame().getAction().playSpellAbilityForFree(copySA);
|
|
||||||
} else if (copySA instanceof Spell) {
|
|
||||||
Spell spell = (Spell) copySA;
|
|
||||||
if (spell.canPlayFromEffectAI(false, true)) {
|
|
||||||
ComputerUtil.playStackFree(controller, copySA);
|
|
||||||
}
|
|
||||||
} else if (copySA.canPlayAI()) {
|
|
||||||
ComputerUtil.playStackFree(controller, copySA);
|
|
||||||
}
|
|
||||||
|
|
||||||
c.addController(originalController);
|
c.addController(originalController);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ public class ComputerUtil {
|
|||||||
|
|
||||||
if (cost == null) {
|
if (cost == null) {
|
||||||
ComputerUtilMana.payManaCost(ai, sa);
|
ComputerUtilMana.payManaCost(ai, sa);
|
||||||
sa.getBeforePayManaAI().execute();
|
|
||||||
game.getStack().addAndUnfreeze(sa);
|
game.getStack().addAndUnfreeze(sa);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user