From 05853983721fb703dfc9bc7e051d85c7c7ca365e Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 21 Feb 2022 08:22:31 +0100 Subject: [PATCH] TriggerBecomesCrewed: new Trigger for NEO Mechs --- .../game/ability/effects/AnimateEffect.java | 4 ++ .../src/main/java/forge/game/card/Card.java | 10 +++- .../game/trigger/TriggerBecomesCrewed.java | 46 +++++++++++++++++++ .../forge/game/trigger/TriggerCrewed.java | 6 --- .../java/forge/game/trigger/TriggerType.java | 1 + .../main/java/forge/game/zone/MagicStack.java | 1 - .../cardsfolder/upcoming/mindlink_mech.txt | 2 +- .../cardsfolder/upcoming/mobilizer_mech.txt | 2 +- 8 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 forge-game/src/main/java/forge/game/trigger/TriggerBecomesCrewed.java diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java index 93a542a5d5a..3b556e4beee 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java @@ -184,6 +184,10 @@ public class AnimateEffect extends AnimateEffectBase { c.addImprintedCards(AbilityUtils.getDefinedCards(source, animateImprinted, sa)); } + if (sa.hasParam("Crew")) { + c.becomesCrewed(sa); + } + game.fireEvent(new GameEventCardStatsChanged(c)); } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index c149d1a71c4..944179bf86c 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -5625,7 +5625,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { foretoldThisTurn = false; } - public int timesCrewedThisTurn() { + public int getTimesCrewedThisTurn() { return timesCrewedThisTurn; } @@ -5637,6 +5637,14 @@ public class Card extends GameEntity implements Comparable, IHasSVars { timesCrewedThisTurn = 0; } + public void becomesCrewed(SpellAbility sa) { + timesCrewedThisTurn += 1; + Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Vehicle, this); + runParams.put(AbilityKey.Crew, sa.getPaidList("TappedCards")); + game.getTriggerHandler().runTrigger(TriggerType.BecomesCrewed, runParams, false); + } + public final int getClassLevel() { return classLevel; } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerBecomesCrewed.java b/forge-game/src/main/java/forge/game/trigger/TriggerBecomesCrewed.java new file mode 100644 index 00000000000..84cbc5f0464 --- /dev/null +++ b/forge-game/src/main/java/forge/game/trigger/TriggerBecomesCrewed.java @@ -0,0 +1,46 @@ +package forge.game.trigger; + +import java.util.Map; + +import forge.game.ability.AbilityKey; +import forge.game.card.Card; +import forge.game.spellability.SpellAbility; +import forge.util.Localizer; + +public class TriggerBecomesCrewed extends Trigger { + + public TriggerBecomesCrewed(final Map params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); + } + + @Override + public boolean performTest(Map runParams) { + if (!matchesValidParam("ValidVehicle", runParams.get(AbilityKey.Vehicle))) { + return false; + } + if (!matchesValidParam("ValidCrew", runParams.get(AbilityKey.Crew))) { + return false; + } + if (hasParam("FirstTimeCrewed")) { + Card v = (Card) runParams.get(AbilityKey.Vehicle); + if (v.getTimesCrewedThisTurn() != 1) { + return false; + } + } + return true; + } + + @Override + public void setTriggeringObjects(SpellAbility sa, Map runParams) { + sa.setTriggeringObjectsFrom(runParams, AbilityKey.Vehicle, AbilityKey.Crew); + } + + @Override + public String getImportantStackObjects(SpellAbility sa) { + StringBuilder sb = new StringBuilder(); + sb.append(Localizer.getInstance().getMessage("lblVehicle")).append(": ").append(sa.getTriggeringObject(AbilityKey.Vehicle)); + sb.append(" "); + sb.append(Localizer.getInstance().getMessage("lblCrew")).append(": ").append(sa.getTriggeringObject(AbilityKey.Crew)); + return sb.toString(); + } +} diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerCrewed.java b/forge-game/src/main/java/forge/game/trigger/TriggerCrewed.java index d60bc319475..3fcdf13c645 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerCrewed.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerCrewed.java @@ -21,12 +21,6 @@ public class TriggerCrewed extends Trigger { if (!matchesValidParam("ValidCrew", runParams.get(AbilityKey.Crew))) { return false; } - if (hasParam("FirstTimeCrewed")) { - Card v = (Card) runParams.get(AbilityKey.Vehicle); - if (v.timesCrewedThisTurn() != 1) { - return false; - } - } return true; } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerType.java b/forge-game/src/main/java/forge/game/trigger/TriggerType.java index 59fd2079ed6..3dd96834576 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerType.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerType.java @@ -29,6 +29,7 @@ public enum TriggerType { BecomeMonarch(TriggerBecomeMonarch.class), BecomeMonstrous(TriggerBecomeMonstrous.class), BecomeRenowned(TriggerBecomeRenowned.class), + BecomesCrewed(TriggerBecomesCrewed.class), BecomesTarget(TriggerBecomesTarget.class), BecomesTargetOnce(TriggerBecomesTargetOnce.class), BlockersDeclared(TriggerBlockersDeclared.class), diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index c636afb90db..bb7b2d2daa3 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -334,7 +334,6 @@ public class MagicStack /* extends MyObservable */ implements Iterable