From 07f3648c494214eef6335692b3761fcf5a6bca33 Mon Sep 17 00:00:00 2001 From: melvin Date: Tue, 18 Jun 2013 22:05:40 +0800 Subject: [PATCH] remove kicker from MagicPermanent, convert multikicker to use MagicMultikickerCost --- .../Magarena/scripts/Bloodhusk_Ritualist.txt | 2 +- .../Magarena/scripts/Deathforge_Shaman.txt | 2 +- .../scripts/Lightkeeper_of_Emeria.txt | 2 +- .../Magarena/scripts/Wolfbriar_Elemental.txt | 2 +- src/magic/model/MagicAbility.java | 8 ++-- src/magic/model/MagicPermanent.java | 11 +----- .../action/MagicPlayCardFromStackAction.java | 4 +- src/magic/model/choice/MagicKickerChoice.java | 29 ++++----------- src/magic/model/event/MagicKickerCost.java | 2 +- .../model/event/MagicMultikickerCost.java | 37 +++++++++++++++++++ src/magic/model/event/MagicPlayCardEvent.java | 18 --------- .../event/MagicPlayMulticounterEvent.java | 2 +- 12 files changed, 57 insertions(+), 62 deletions(-) create mode 100644 src/magic/model/event/MagicMultikickerCost.java diff --git a/release/Magarena/scripts/Bloodhusk_Ritualist.txt b/release/Magarena/scripts/Bloodhusk_Ritualist.txt index 14aef65490..d08be60d93 100644 --- a/release/Magarena/scripts/Bloodhusk_Ritualist.txt +++ b/release/Magarena/scripts/Bloodhusk_Ritualist.txt @@ -8,5 +8,5 @@ subtype=Vampire,Shaman cost={2}{B} pt=2/2 timing=main -ability=multikicker {B} target opponent discards a card for each time it was kicked +ability=multikicker {B} requires_groovy_code diff --git a/release/Magarena/scripts/Deathforge_Shaman.txt b/release/Magarena/scripts/Deathforge_Shaman.txt index eb4f067f68..53bc53ea2b 100644 --- a/release/Magarena/scripts/Deathforge_Shaman.txt +++ b/release/Magarena/scripts/Deathforge_Shaman.txt @@ -8,5 +8,5 @@ subtype=Ogre,Shaman cost={4}{R} pt=4/3 timing=main -ability=multikicker {R} it deals damage to target player equal to twice the number of times it was kicked +ability=multikicker {R} requires_groovy_code diff --git a/release/Magarena/scripts/Lightkeeper_of_Emeria.txt b/release/Magarena/scripts/Lightkeeper_of_Emeria.txt index 7d63a9ca9e..24dbe72857 100644 --- a/release/Magarena/scripts/Lightkeeper_of_Emeria.txt +++ b/release/Magarena/scripts/Lightkeeper_of_Emeria.txt @@ -7,6 +7,6 @@ type=Creature subtype=Angel cost={3}{W} pt=2/4 -ability=flying,multikicker {W} you gain 2 life for each time it was kicked +ability=flying,multikicker {W} timing=main requires_groovy_code diff --git a/release/Magarena/scripts/Wolfbriar_Elemental.txt b/release/Magarena/scripts/Wolfbriar_Elemental.txt index 1643803252..a3e576fbe3 100644 --- a/release/Magarena/scripts/Wolfbriar_Elemental.txt +++ b/release/Magarena/scripts/Wolfbriar_Elemental.txt @@ -8,5 +8,5 @@ subtype=Elemental cost={2}{G}{G} pt=4/4 timing=main -ability=multikicker {G} put a 2/2 green Wolf creature token onto the battlefield for each time it was kicked +ability=multikicker {G} requires_groovy_code diff --git a/src/magic/model/MagicAbility.java b/src/magic/model/MagicAbility.java index f54caf16e5..10936f1f50 100644 --- a/src/magic/model/MagicAbility.java +++ b/src/magic/model/MagicAbility.java @@ -19,6 +19,7 @@ import magic.model.event.MagicPermanentActivation; import magic.model.event.MagicCyclingActivation; import magic.model.event.MagicReinforceActivation; import magic.model.event.MagicKickerCost; +import magic.model.event.MagicMultikickerCost; import magic.model.mstatic.MagicCDA; import magic.model.mstatic.MagicStatic; import magic.model.trigger.MagicAllyGrowTrigger; @@ -685,11 +686,8 @@ public enum MagicAbility { }, Multikicker("multikicker", 0) { public void addAbilityImpl(final MagicCardDefinition card, final String arg) { - final int idx = arg.indexOf(' '); - final String[] token = {arg.substring(0,idx), arg.substring(idx+1)}; - final MagicManaCost cost = MagicManaCost.create(token[0]); - final String desc = token[1]; - card.add(MagicPlayCardEvent.createKicker(cost, true, desc)); + final MagicManaCost cost = MagicManaCost.create(arg); + card.add(new MagicMultikickerCost(cost)); } }, EntersWithX("enters with x", 0) { diff --git a/src/magic/model/MagicPermanent.java b/src/magic/model/MagicPermanent.java index 1d16df6256..1147876ec5 100644 --- a/src/magic/model/MagicPermanent.java +++ b/src/magic/model/MagicPermanent.java @@ -57,7 +57,6 @@ public class MagicPermanent implements MagicSource,MagicTarget,Comparable 0 || card.isKicked(); + return card.isKicked(); } public int getLethalDamage(final int toughness) { diff --git a/src/magic/model/action/MagicPlayCardFromStackAction.java b/src/magic/model/action/MagicPlayCardFromStackAction.java index ef439629c0..beedf67b7d 100644 --- a/src/magic/model/action/MagicPlayCardFromStackAction.java +++ b/src/magic/model/action/MagicPlayCardFromStackAction.java @@ -27,8 +27,6 @@ public class MagicPlayCardFromStackAction extends MagicPutIntoPlayAction { @Override protected MagicPermanent createPermanent(final MagicGame game) { cardOnStack.setMoveLocation(MagicLocationType.Play); - final MagicPermanent permanent=game.createPermanent(cardOnStack.getCard(),cardOnStack.getController()); - permanent.setKicker(kicker); - return permanent; + return game.createPermanent(cardOnStack.getCard(),cardOnStack.getController()); } } diff --git a/src/magic/model/choice/MagicKickerChoice.java b/src/magic/model/choice/MagicKickerChoice.java index 5c6e2dae53..0e2fc11ba0 100644 --- a/src/magic/model/choice/MagicKickerChoice.java +++ b/src/magic/model/choice/MagicKickerChoice.java @@ -24,45 +24,35 @@ public class MagicKickerChoice extends MagicChoice { private final MagicChoice otherChoice; private final MagicManaCost cost; - private final boolean multi; private final String name; public static MagicKickerChoice Replicate(final MagicChoice otherChoice, final MagicManaCost cost) { - return new MagicKickerChoice(otherChoice, cost, true, "replicate"); + return new MagicKickerChoice(otherChoice, cost, "replicate"); } public static MagicKickerChoice Replicate(final MagicManaCost cost) { - return new MagicKickerChoice(cost, true, "replicate"); + return new MagicKickerChoice(cost, "replicate"); } - public MagicKickerChoice(final MagicChoice otherChoice, final MagicManaCost cost,final boolean multi,final String name) { + public MagicKickerChoice(final MagicChoice otherChoice, final MagicManaCost cost,final String name) { super("Choose how many times to pay the " + name + " cost."); this.otherChoice=otherChoice; this.cost=cost; - this.multi=multi; this.name = name; } - public MagicKickerChoice(final MagicChoice otherChoice,final MagicManaCost cost,final boolean multi) { - this(otherChoice, cost, multi, "kicker"); - } - public MagicKickerChoice(final MagicChoice otherChoice,final MagicManaCost cost) { - this(otherChoice, cost, false, "kicker"); + this(otherChoice, cost, "kicker"); } - public MagicKickerChoice(final MagicManaCost cost,final boolean multi, final String name) { - this(MagicChoice.NONE, cost, multi, name); - } - - public MagicKickerChoice(final MagicManaCost cost,final boolean multi) { - this(MagicChoice.NONE, cost, multi, "kicker"); + public MagicKickerChoice(final MagicManaCost cost, final String name) { + this(MagicChoice.NONE, cost, name); } public MagicKickerChoice(final MagicManaCost cost) { - this(MagicChoice.NONE, cost, false, "kicker"); + this(MagicChoice.NONE, cost, "kicker"); } - + @Override public MagicTargetChoice getTargetChoice() { return (otherChoice instanceof MagicTargetChoice) ? (MagicTargetChoice)otherChoice : MagicTargetChoice.NONE; @@ -94,9 +84,6 @@ public class MagicKickerChoice extends MagicChoice { if (!new MagicPayManaCostResultBuilder(game,player,builderCost).hasResults()) { return index-1; } - if (multi==false) { - return 1; - } } } diff --git a/src/magic/model/event/MagicKickerCost.java b/src/magic/model/event/MagicKickerCost.java index 49616e4578..0b37531c6b 100644 --- a/src/magic/model/event/MagicKickerCost.java +++ b/src/magic/model/event/MagicKickerCost.java @@ -27,7 +27,7 @@ public class MagicKickerCost extends MagicAdditionalCost implements MagicEventAc new MagicPayManaCostChoice(manaCost) ), this, - "PN may$$ pay " + manaCost.getText() + "$." + "PN may$ pay " + manaCost.getText() + "$." ); } diff --git a/src/magic/model/event/MagicMultikickerCost.java b/src/magic/model/event/MagicMultikickerCost.java new file mode 100644 index 0000000000..64c8a265f2 --- /dev/null +++ b/src/magic/model/event/MagicMultikickerCost.java @@ -0,0 +1,37 @@ +package magic.model.event; + +import magic.model.MagicManaCost; +import magic.model.MagicSource; +import magic.model.MagicGame; +import magic.model.choice.MagicKickerChoice; +import magic.model.action.MagicSetKickerAction; + +public class MagicMultikickerCost extends MagicAdditionalCost implements MagicEventAction { + + final MagicManaCost manaCost; + + public MagicMultikickerCost(final MagicManaCost aManaCost) { + manaCost = aManaCost; + } + + public MagicMultikickerCost(final String cost) { + manaCost = MagicManaCost.create(cost); + } + + public MagicEvent getEvent(final MagicSource source) { + return new MagicEvent( + source, + new MagicKickerChoice(manaCost), + this, + "PN may pay " + manaCost.getText() + " any number of times$$." + ); + } + + @Override + public void executeEvent(final MagicGame game, final MagicEvent event) { + event.payManaCost(game,event.getPlayer()); + if (event.isKicked()) { + game.doAction(new MagicSetKickerAction(event.getCard(), event.getKickerCount())); + } + } +} diff --git a/src/magic/model/event/MagicPlayCardEvent.java b/src/magic/model/event/MagicPlayCardEvent.java index e6308fc0ce..a0d5bb7796 100644 --- a/src/magic/model/event/MagicPlayCardEvent.java +++ b/src/magic/model/event/MagicPlayCardEvent.java @@ -30,24 +30,6 @@ public class MagicPlayCardEvent { } }; - public static MagicSpellCardEvent createKicker(final MagicManaCost kickerCost, final boolean multi, final String desc) { - return new MagicSpellCardEvent() { - @Override - public MagicEvent getEvent(final MagicCardOnStack cardOnStack,final MagicPayedCost payedCost) { - return new MagicEvent( - cardOnStack, - new MagicKickerChoice(kickerCost,multi), - this, - "$Play SN. If SN was kicked$, " + desc + "." - ); - } - @Override - public void executeEvent(final MagicGame game, final MagicEvent event) { - game.doAction(new MagicPlayCardFromStackAction(event.getCardOnStack(), event.getKickerCount())); - } - }; - } - public static MagicSpellCardEvent createX(final String desc) { return new MagicSpellCardEvent() { @Override diff --git a/src/magic/model/event/MagicPlayMulticounterEvent.java b/src/magic/model/event/MagicPlayMulticounterEvent.java index e7fbcaaa03..5a7d01b50b 100644 --- a/src/magic/model/event/MagicPlayMulticounterEvent.java +++ b/src/magic/model/event/MagicPlayMulticounterEvent.java @@ -22,7 +22,7 @@ public class MagicPlayMulticounterEvent extends MagicSpellCardEvent { public MagicEvent getEvent(final MagicCardOnStack cardOnStack,final MagicPayedCost payedCost) { return new MagicEvent( cardOnStack, - new MagicKickerChoice(cost,true), + new MagicKickerChoice(cost), this, "$Play SN. SN enters the battlefield " + "with a +1/+1 counter on it for each time it was kicked$"