pass MagicRemoveFromPlayAction into MagicLeavesPlayTrigger

master
melvin 2013-07-02 20:31:26 +08:00
parent c3d5f24c82
commit 17e26de936
22 changed files with 68 additions and 52 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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)) ?

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,8 @@
package magic.model.trigger;
import magic.model.MagicPermanent;
import magic.model.action.MagicRemoveFromPlayAction;
public abstract class MagicWhenLeavesPlayTrigger extends MagicTrigger<MagicPermanent> {
public abstract class MagicWhenLeavesPlayTrigger extends MagicTrigger<MagicRemoveFromPlayAction> {
public MagicWhenLeavesPlayTrigger(final int priority) {
super(priority);
}