classes using generalized mayPlaySpellAbilityForFree and playFromSuspend

This commit is contained in:
Maxmtg
2013-01-27 08:19:07 +00:00
parent f61d63ccbe
commit 5fd66261a2
3 changed files with 2 additions and 52 deletions

View File

@@ -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>.

View File

@@ -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);
} }

View File

@@ -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 {