From 17e26de936297acb75d9520b62d8d106d14a1742 Mon Sep 17 00:00:00 2001 From: melvin Date: Tue, 2 Jul 2013 20:31:26 +0800 Subject: [PATCH] pass MagicRemoveFromPlayAction into MagicLeavesPlayTrigger --- .../Magarena/scripts/Arctic_Nishoba.groovy | 4 +-- release/Magarena/scripts/Aurification.groovy | 4 +-- .../scripts/Day_of_the_Dragons.groovy | 4 +-- .../Magarena/scripts/Deadwood_Treefolk.groovy | 5 ++-- .../Magarena/scripts/Jotun_Owl_Keeper.groovy | 4 +-- .../Magarena/scripts/Mistbind_Clique.groovy | 4 +-- .../Magarena/scripts/Parallax_Nexus.groovy | 4 +-- .../scripts/Phyrexian_Bloodstock.groovy | 4 +-- release/Magarena/scripts/Reality_Acid.groovy | 4 +-- release/Magarena/scripts/Realm_Razer.groovy | 4 +-- .../Magarena/scripts/Revered_Unicorn.groovy | 4 +-- .../Magarena/scripts/Sludge_Strider.groovy | 3 +- .../scripts/Subterranean_Shambler.groovy | 12 ++------ release/Magarena/scripts/Thalakos_Seer.groovy | 4 +-- release/Magarena/scripts/Thragtusk.groovy | 4 +-- .../Magarena/scripts/Twilight_Drover.groovy | 3 +- .../action/MagicRemoveFromPlayAction.java | 28 +++++++++++++++---- .../MagicLeavesDamageTargetTrigger.java | 5 ++-- .../trigger/MagicLeavesGainLifeTrigger.java | 5 ++-- .../MagicLeavesReturnExileTrigger.java | 5 ++-- src/magic/model/trigger/MagicTriggerType.java | 2 +- .../trigger/MagicWhenLeavesPlayTrigger.java | 4 +-- 22 files changed, 68 insertions(+), 52 deletions(-) diff --git a/release/Magarena/scripts/Arctic_Nishoba.groovy b/release/Magarena/scripts/Arctic_Nishoba.groovy index dddc3b455f..db9c36376f 100644 --- a/release/Magarena/scripts/Arctic_Nishoba.groovy +++ b/release/Magarena/scripts/Arctic_Nishoba.groovy @@ -1,8 +1,8 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, this, diff --git a/release/Magarena/scripts/Aurification.groovy b/release/Magarena/scripts/Aurification.groovy index 6117ef556d..0491da4ae5 100644 --- a/release/Magarena/scripts/Aurification.groovy +++ b/release/Magarena/scripts/Aurification.groovy @@ -56,8 +56,8 @@ def ST = new MagicStatic(MagicLayer.Type) { }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, this, diff --git a/release/Magarena/scripts/Day_of_the_Dragons.groovy b/release/Magarena/scripts/Day_of_the_Dragons.groovy index f5b307d3a7..61c284052b 100644 --- a/release/Magarena/scripts/Day_of_the_Dragons.groovy +++ b/release/Magarena/scripts/Day_of_the_Dragons.groovy @@ -28,8 +28,8 @@ }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - if (permanent == left && + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + if (act.isPermanent(permanent) && !permanent.getExiledCards().isEmpty()) { final MagicCardList clist = new MagicCardList(permanent.getExiledCards()); return new MagicEvent( diff --git a/release/Magarena/scripts/Deadwood_Treefolk.groovy b/release/Magarena/scripts/Deadwood_Treefolk.groovy index cff6c90b7f..5f51581571 100644 --- a/release/Magarena/scripts/Deadwood_Treefolk.groovy +++ b/release/Magarena/scripts/Deadwood_Treefolk.groovy @@ -28,8 +28,9 @@ def event = { }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent left) { - return (permanent == left) ? event(permanent) : MagicEvent.NONE; + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? + event(permanent) : MagicEvent.NONE; } } ] diff --git a/release/Magarena/scripts/Jotun_Owl_Keeper.groovy b/release/Magarena/scripts/Jotun_Owl_Keeper.groovy index 73bc062060..123ad881dd 100644 --- a/release/Magarena/scripts/Jotun_Owl_Keeper.groovy +++ b/release/Magarena/scripts/Jotun_Owl_Keeper.groovy @@ -1,9 +1,9 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent left) { + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicRemoveFromPlayAction act) { final int amount = permanent.getCounters(MagicCounterType.Charge); - return (permanent == left && amount > 0) ? + return (act.isPermanent(permanent) && amount > 0) ? new MagicEvent( permanent, amount, diff --git a/release/Magarena/scripts/Mistbind_Clique.groovy b/release/Magarena/scripts/Mistbind_Clique.groovy index f5c1873849..d2dde9158a 100644 --- a/release/Magarena/scripts/Mistbind_Clique.groovy +++ b/release/Magarena/scripts/Mistbind_Clique.groovy @@ -41,8 +41,8 @@ }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - if (permanent == left && + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + if (act.isPermanent(permanent) && !permanent.getExiledCards().isEmpty()) { final MagicCard exiledCard = permanent.getExiledCards().get(0); return new MagicEvent( diff --git a/release/Magarena/scripts/Parallax_Nexus.groovy b/release/Magarena/scripts/Parallax_Nexus.groovy index 565831dc57..dc44dbc14d 100644 --- a/release/Magarena/scripts/Parallax_Nexus.groovy +++ b/release/Magarena/scripts/Parallax_Nexus.groovy @@ -53,8 +53,8 @@ def action = { }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - if (permanent == left && !permanent.getExiledCards().isEmpty()) { + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + if (act.isPermanent(permanent) && !permanent.getExiledCards().isEmpty()) { final MagicCardList clist = new MagicCardList(permanent.getExiledCards()); return new MagicEvent( permanent, diff --git a/release/Magarena/scripts/Phyrexian_Bloodstock.groovy b/release/Magarena/scripts/Phyrexian_Bloodstock.groovy index 3a9e614027..cbfa3df35a 100644 --- a/release/Magarena/scripts/Phyrexian_Bloodstock.groovy +++ b/release/Magarena/scripts/Phyrexian_Bloodstock.groovy @@ -1,8 +1,8 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, MagicTargetChoice.TARGET_WHITE_CREATURE, diff --git a/release/Magarena/scripts/Reality_Acid.groovy b/release/Magarena/scripts/Reality_Acid.groovy index 501970ca79..5ffea29114 100644 --- a/release/Magarena/scripts/Reality_Acid.groovy +++ b/release/Magarena/scripts/Reality_Acid.groovy @@ -1,9 +1,9 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent left) { + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicRemoveFromPlayAction act) { final MagicPermanent enchantedPermanent = permanent.getEnchantedCreature(); - return (permanent == left && enchantedPermanent != MagicPermanent.NONE) ? + return (act.isPermanent(permanent) && enchantedPermanent.isValid()) ? new MagicEvent( permanent, enchantedPermanent, diff --git a/release/Magarena/scripts/Realm_Razer.groovy b/release/Magarena/scripts/Realm_Razer.groovy index 39d9deb652..faf89dcd9c 100644 --- a/release/Magarena/scripts/Realm_Razer.groovy +++ b/release/Magarena/scripts/Realm_Razer.groovy @@ -22,8 +22,8 @@ }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - if (permanent == left && + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + if (act.isPermanent(permanent) && !permanent.getExiledCards().isEmpty()) { final MagicCardList clist = new MagicCardList(permanent.getExiledCards()); return new MagicEvent( diff --git a/release/Magarena/scripts/Revered_Unicorn.groovy b/release/Magarena/scripts/Revered_Unicorn.groovy index b6fdefd10d..fde8bb63f5 100644 --- a/release/Magarena/scripts/Revered_Unicorn.groovy +++ b/release/Magarena/scripts/Revered_Unicorn.groovy @@ -1,8 +1,8 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, this, diff --git a/release/Magarena/scripts/Sludge_Strider.groovy b/release/Magarena/scripts/Sludge_Strider.groovy index e28b81c97f..e590263fd2 100644 --- a/release/Magarena/scripts/Sludge_Strider.groovy +++ b/release/Magarena/scripts/Sludge_Strider.groovy @@ -35,7 +35,8 @@ def event = { }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + final MagicPermanent left = act.getPermanent(); return (left != permanent && left.isArtifact() && left.isFriend(permanent)) ? diff --git a/release/Magarena/scripts/Subterranean_Shambler.groovy b/release/Magarena/scripts/Subterranean_Shambler.groovy index 4302e788b0..88faf47a39 100644 --- a/release/Magarena/scripts/Subterranean_Shambler.groovy +++ b/release/Magarena/scripts/Subterranean_Shambler.groovy @@ -21,20 +21,14 @@ def genEvent = { [ new MagicWhenComesIntoPlayTrigger() { @Override - public MagicEvent executeTrigger( - final MagicGame game, - final MagicPermanent permanent, - final MagicPayedCost payedCost) { + public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicPayedCost payedCost) { return genEvent(permanent); } }, new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger( - final MagicGame game, - final MagicPermanent permanent, - final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game, final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? genEvent(permanent) : MagicEvent.NONE; } } diff --git a/release/Magarena/scripts/Thalakos_Seer.groovy b/release/Magarena/scripts/Thalakos_Seer.groovy index 5480f195e6..ff046c82cc 100644 --- a/release/Magarena/scripts/Thalakos_Seer.groovy +++ b/release/Magarena/scripts/Thalakos_Seer.groovy @@ -1,8 +1,8 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, this, diff --git a/release/Magarena/scripts/Thragtusk.groovy b/release/Magarena/scripts/Thragtusk.groovy index 6ab8806966..5caf0daa7b 100644 --- a/release/Magarena/scripts/Thragtusk.groovy +++ b/release/Magarena/scripts/Thragtusk.groovy @@ -1,8 +1,8 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, this, diff --git a/release/Magarena/scripts/Twilight_Drover.groovy b/release/Magarena/scripts/Twilight_Drover.groovy index 7deec773cd..67ac92cc4e 100644 --- a/release/Magarena/scripts/Twilight_Drover.groovy +++ b/release/Magarena/scripts/Twilight_Drover.groovy @@ -1,7 +1,8 @@ [ new MagicWhenLeavesPlayTrigger() { @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + final MagicPermanent left = act.getPermanent(); return (left.isCreature() && left.isToken()) ? new MagicEvent( permanent, diff --git a/src/magic/model/action/MagicRemoveFromPlayAction.java b/src/magic/model/action/MagicRemoveFromPlayAction.java index fd9a72ff1e..44d235622e 100644 --- a/src/magic/model/action/MagicRemoveFromPlayAction.java +++ b/src/magic/model/action/MagicRemoveFromPlayAction.java @@ -13,17 +13,33 @@ import java.util.Collection; public class MagicRemoveFromPlayAction extends MagicAction { private final MagicPermanent permanent; - private final MagicLocationType toLocation; + private MagicLocationType toLocation; private boolean valid; - public MagicRemoveFromPlayAction(final MagicPermanent permanent,final MagicLocationType toLocation) { - this.permanent=permanent; - this.toLocation=toLocation; + public MagicRemoveFromPlayAction(final MagicPermanent aPermanent,final MagicLocationType aToLocation) { + permanent = aPermanent; + toLocation = aToLocation; } public boolean isValid() { return valid; } + + public boolean isPermanent(final MagicPermanent aPermanent) { + return permanent == aPermanent; + } + + public MagicPermanent getPermanent() { + return permanent; + } + + public MagicLocationType getToLocation() { + return toLocation; + } + + public void setToLocation(final MagicLocationType aToLocation) { + toLocation = aToLocation; + } @Override public void doAction(final MagicGame game) { @@ -38,6 +54,8 @@ public class MagicRemoveFromPlayAction extends MagicAction { final int score=permanent.getScore()+permanent.getStaticScore(); // Execute trigger here so that full permanent state is preserved. + game.executeTrigger(MagicTriggerType.WhenLeavesPlay, this); + if (toLocation==MagicLocationType.Graveyard) { game.executeTrigger(MagicTriggerType.WhenOtherPutIntoGraveyardFromPlay,permanent); if (permanent.isCreature()) { @@ -45,8 +63,6 @@ public class MagicRemoveFromPlayAction extends MagicAction { } } - game.executeTrigger(MagicTriggerType.WhenLeavesPlay,permanent); - // Equipment if (permanent.getEquippedCreature().isValid()) { permanent.getEquippedCreature().removeEquipment(permanent); diff --git a/src/magic/model/trigger/MagicLeavesDamageTargetTrigger.java b/src/magic/model/trigger/MagicLeavesDamageTargetTrigger.java index 93dafc1b85..535091fab8 100644 --- a/src/magic/model/trigger/MagicLeavesDamageTargetTrigger.java +++ b/src/magic/model/trigger/MagicLeavesDamageTargetTrigger.java @@ -4,6 +4,7 @@ import magic.model.MagicDamage; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.action.MagicDealDamageAction; +import magic.model.action.MagicRemoveFromPlayAction; import magic.model.action.MagicTargetAction; import magic.model.choice.MagicTargetChoice; import magic.model.event.MagicEvent; @@ -32,8 +33,8 @@ public class MagicLeavesDamageTargetTrigger extends MagicWhenLeavesPlayTrigger { } @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, targetChoice, diff --git a/src/magic/model/trigger/MagicLeavesGainLifeTrigger.java b/src/magic/model/trigger/MagicLeavesGainLifeTrigger.java index 1a4ac03563..ae2ead1b28 100644 --- a/src/magic/model/trigger/MagicLeavesGainLifeTrigger.java +++ b/src/magic/model/trigger/MagicLeavesGainLifeTrigger.java @@ -3,6 +3,7 @@ package magic.model.trigger; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.action.MagicChangeLifeAction; +import magic.model.action.MagicRemoveFromPlayAction; import magic.model.event.MagicEvent; public class MagicLeavesGainLifeTrigger extends MagicWhenLeavesPlayTrigger { @@ -14,8 +15,8 @@ public class MagicLeavesGainLifeTrigger extends MagicWhenLeavesPlayTrigger { } @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - return (permanent == left) ? + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + return act.isPermanent(permanent) ? new MagicEvent( permanent, this, diff --git a/src/magic/model/trigger/MagicLeavesReturnExileTrigger.java b/src/magic/model/trigger/MagicLeavesReturnExileTrigger.java index 9974187f64..3e4ea2ea51 100644 --- a/src/magic/model/trigger/MagicLeavesReturnExileTrigger.java +++ b/src/magic/model/trigger/MagicLeavesReturnExileTrigger.java @@ -5,6 +5,7 @@ import magic.model.MagicLocationType; import magic.model.MagicPermanent; import magic.model.MagicCardList; import magic.model.action.MagicReturnExiledUntilThisLeavesPlayAction; +import magic.model.action.MagicRemoveFromPlayAction; import magic.model.event.MagicEvent; public class MagicLeavesReturnExileTrigger extends MagicWhenLeavesPlayTrigger { @@ -18,8 +19,8 @@ public class MagicLeavesReturnExileTrigger extends MagicWhenLeavesPlayTrigger { } @Override - public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { - if (permanent == left && + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicRemoveFromPlayAction act) { + if (act.isPermanent(permanent) && !permanent.getExiledCards().isEmpty()) { final MagicCardList clist = new MagicCardList(permanent.getExiledCards()); return new MagicEvent( diff --git a/src/magic/model/trigger/MagicTriggerType.java b/src/magic/model/trigger/MagicTriggerType.java index 4c8ed351e2..cdc64b5631 100644 --- a/src/magic/model/trigger/MagicTriggerType.java +++ b/src/magic/model/trigger/MagicTriggerType.java @@ -8,7 +8,7 @@ public enum MagicTriggerType { WhenOtherSpellIsCast, // card on stack WhenSpellIsCast, // card on stack WhenComesIntoPlay, // controller - WhenLeavesPlay, // permanent + WhenLeavesPlay, // MagicRemoveFromPlayAction WhenBecomesTapped, // permanent WhenDrawn, // card WhenOtherDrawn, // card diff --git a/src/magic/model/trigger/MagicWhenLeavesPlayTrigger.java b/src/magic/model/trigger/MagicWhenLeavesPlayTrigger.java index 42c294eb57..a74fb9ead3 100644 --- a/src/magic/model/trigger/MagicWhenLeavesPlayTrigger.java +++ b/src/magic/model/trigger/MagicWhenLeavesPlayTrigger.java @@ -1,8 +1,8 @@ package magic.model.trigger; -import magic.model.MagicPermanent; +import magic.model.action.MagicRemoveFromPlayAction; -public abstract class MagicWhenLeavesPlayTrigger extends MagicTrigger { +public abstract class MagicWhenLeavesPlayTrigger extends MagicTrigger { public MagicWhenLeavesPlayTrigger(final int priority) { super(priority); }