add new TriggerRevealed to use it for Miracle

This commit is contained in:
Hanmac
2016-12-06 06:32:02 +00:00
parent f0bc477319
commit 8968ea3382
5 changed files with 79 additions and 16 deletions

1
.gitattributes vendored
View File

@@ -721,6 +721,7 @@ forge-game/src/main/java/forge/game/trigger/TriggerPhaseOut.java -text
forge-game/src/main/java/forge/game/trigger/TriggerPlanarDice.java -text
forge-game/src/main/java/forge/game/trigger/TriggerPlaneswalkedFrom.java -text
forge-game/src/main/java/forge/game/trigger/TriggerPlaneswalkedTo.java -text
forge-game/src/main/java/forge/game/trigger/TriggerRevealed.java -text svneol=unset#text/plain
forge-game/src/main/java/forge/game/trigger/TriggerSacrificed.java svneol=native#text/plain
forge-game/src/main/java/forge/game/trigger/TriggerScry.java -text
forge-game/src/main/java/forge/game/trigger/TriggerSearchedLibrary.java -text

View File

@@ -9,25 +9,26 @@ import forge.game.card.CardCollectionView;
import forge.game.card.CardLists;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetRestrictions;
import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType;
import forge.util.Aggregates;
import java.util.List;
import java.util.Map;
import com.google.common.collect.Maps;
public class RevealEffect extends SpellAbilityEffect {
@Override
public void resolve(SpellAbility sa) {
final Card host = sa.getHostCard();
final Game game = host.getGame();
final boolean anyNumber = sa.hasParam("AnyNumber");
int cnt = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(host, sa.getParam("NumCards"), sa) : 1;
final TargetRestrictions tgt = sa.getTargetRestrictions();
for (final Player p : getTargetPlayers(sa)) {
final Game game = p.getGame();
if (tgt == null || p.canBeTargetedBy(sa)) {
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
final CardCollectionView cardsInHand = p.getZone(ZoneType.Hand).getCards();
if (cardsInHand.isEmpty()) {
continue;
@@ -71,10 +72,15 @@ public class RevealEffect extends SpellAbilityEffect {
}
game.getAction().reveal(revealed, p);
if (sa.hasParam("RememberRevealed")) {
for (final Card rem : revealed) {
host.addRemembered(rem);
for (final Card c : revealed) {
Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", c);
if (sa.hasParam("MiracleCost")) {
runParams.put("Miracle", true);
}
game.getTriggerHandler().runTrigger(TriggerType.Revealed, runParams, false);
if (sa.hasParam("RememberRevealed")) {
host.addRemembered(c);
}
}
}

View File

@@ -3027,18 +3027,29 @@ public class CardFactoryUtil {
} else if (keyword.startsWith("Miracle")) {
final String[] k = keyword.split(":");
final String manacost = k[1];
final String abStr = "DB$ Play | Defined$ Self | PlayCost$ " + manacost;
final String abStrReveal = "DB$ Reveal | Defined$ You | RevealDefined$ Self | MiracleCost$ " + manacost;
final String abStrPlay = "DB$ Play | Defined$ Self | PlayCost$ " + manacost;
final String trigStr = "Mode$ Drawn | ValidCard$ Card.Self | Miracle$ True | Secondary$ True "
+ "| Static$ True | TriggerDescription$ CARDNAME - Miracle";
final String trigStrDrawn = "Mode$ Drawn | ValidCard$ Card.Self | Miracle$ True | Secondary$ True"
+ " | OptionalDecider$ You | Static$ True | TriggerDescription$ CARDNAME - Miracle";
final Trigger trigger = TriggerHandler.parseTrigger(trigStr, card, intrinsic);
final String trigStrRevealed = "Mode$ Revealed | ValidCard$ Card.Self | Miracle$ True"
+ " | IsPresent$ Card.Self | PresentZone$ Hand | Secondary$ True"
+ " | TriggerDescription$ CARDNAME - Miracle";
trigger.setOverridingAbility(AbilityFactory.getAbility(abStr, card));
final Trigger triggerDrawn = TriggerHandler.parseTrigger(trigStrDrawn, card, intrinsic);
final Trigger cardTrigger = card.addTrigger(trigger);
triggerDrawn.setOverridingAbility(AbilityFactory.getAbility(abStrReveal, card));
final Trigger triggerRevealed = TriggerHandler.parseTrigger(trigStrRevealed, card, intrinsic);
triggerRevealed.setOverridingAbility(AbilityFactory.getAbility(abStrPlay, card));
final Trigger cardTriggerDrawn = card.addTrigger(triggerDrawn);
final Trigger cardTriggerRevealed = card.addTrigger(triggerRevealed);
if (!intrinsic) {
kws.addTrigger(cardTrigger);
kws.addTrigger(cardTriggerDrawn);
kws.addTrigger(cardTriggerRevealed);
}
} else if (keyword.startsWith("Modular")) {
final String abStr = "AB$ PutCounter | Cost$ 0 | ValidTgts$ Artifact.Creature | " +

View File

@@ -0,0 +1,44 @@
package forge.game.trigger;
import java.util.Map;
import forge.game.card.Card;
import forge.game.spellability.SpellAbility;
public class TriggerRevealed extends Trigger {
public TriggerRevealed(Map<String, String> params, Card host, boolean intrinsic) {
super(params, host, intrinsic);
}
@Override
public boolean performTest(Map<String, Object> runParams2) {
if (this.mapParams.containsKey("ValidCard")) {
final Card moved = (Card) runParams2.get("Card");
if (!moved.isValid(this.mapParams.get("ValidCard").split(","), this.getHostCard().getController(),
this.getHostCard(), null)) {
return false;
}
}
if (this.mapParams.containsKey("Miracle")) {
Boolean madness = (Boolean) runParams2.get("Miracle");
if (this.mapParams.get("Miracle").equals("True") ^ madness) {
return false;
}
}
return true;
}
@Override
public void setTriggeringObjects(SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
}
@Override
public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder();
sb.append("Revealed: ").append(sa.getTriggeringObject("Card"));
return sb.toString();
}
}

View File

@@ -62,6 +62,7 @@ public enum TriggerType {
PlanarDice(TriggerPlanarDice.class),
PlaneswalkedFrom(TriggerPlaneswalkedFrom.class),
PlaneswalkedTo(TriggerPlaneswalkedTo.class),
Revealed(TriggerRevealed.class),
Sacrificed(TriggerSacrificed.class),
Scry(TriggerScry.class),
SearchedLibrary(TriggerSearchedLibrary.class),