basic Explore Effect

git-svn-id: http://svn.slightlymagic.net/forge/trunk@35721 269b9781-a132-4a9b-9d4e-f004f1b56b58
This commit is contained in:
Hanmac 2017-09-23 11:47:57 +00:00
parent 5991c8f51c
commit 3518dba4de
4 changed files with 82 additions and 2 deletions

View File

@ -72,6 +72,7 @@ public enum SpellApiToAi {
.put(ApiType.ExchangeControlVariant, CannotPlayAi.class)
.put(ApiType.ExchangePower, PowerExchangeAi.class)
.put(ApiType.ExchangeZone, ZoneExchangeAi.class)
.put(ApiType.Explore, AlwaysPlayAi.class)
.put(ApiType.Fight, FightAi.class)
.put(ApiType.FlipACoin, FlipACoinAi.class)
.put(ApiType.Fog, FogAi.class)

View File

@ -69,6 +69,7 @@ public enum ApiType {
ExchangeControlVariant (ControlExchangeVariantEffect.class),
ExchangePower (PowerExchangeEffect.class),
ExchangeZone (ZoneExchangeEffect.class),
Explore (ExploreEffect.class),
Fight (FightEffect.class),
FlipACoin (FlipCoinEffect.class),
Fog (FogEffect.class),

View File

@ -0,0 +1,78 @@
package forge.game.ability.effects;
import java.util.List;
import java.util.Map;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import forge.game.Game;
import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CounterType;
import forge.game.player.Player;
import forge.game.player.PlayerController;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType;
public class ExploreEffect extends SpellAbilityEffect {
/* (non-Javadoc)
* @see forge.game.ability.SpellAbilityEffect#getStackDescription(forge.game.spellability.SpellAbility)
*/
@Override
protected String getStackDescription(SpellAbility sa) {
final Card host = sa.getHostCard();
return host.getName() + " explores.";
}
/* (non-Javadoc)
* @see forge.game.ability.SpellAbilityEffect#resolve(forge.game.spellability.SpellAbility)
*/
@Override
public void resolve(SpellAbility sa) {
// check if only the activating player counts
final Card card = sa.getHostCard();
final Player pl = sa.getActivatingPlayer();
final PlayerController pc = pl.getController();
final Game game = pl.getGame();
List<Card> tgt = getTargetCards(sa);
for (final Card c : tgt) {
// revealed land card
boolean revealedLand = false;
CardCollection top = pl.getTopXCardsFromLibrary(1);
if (!top.isEmpty()) {
pl.getController().reveal(top, ZoneType.Library, pl, "Revealed for Explore");
final Card r = top.getFirst();
if (r.isLand()) {
game.getAction().moveTo(ZoneType.Hand, r, sa);
revealedLand = true;
} else {
// TODO find better way to choose optional send away
final Card choosen = pc.chooseSingleCardForZoneChange(
ZoneType.Graveyard, Lists.newArrayList(ZoneType.Library), sa, top, null,
"send to graveyard?", true, pl);
if (choosen != null) {
game.getAction().moveTo(ZoneType.Graveyard, choosen, sa);
}
}
}
if (revealedLand) {
// TODO need to check if card didn't blick while that was happening,
// probably need strictlySelf in the Defined
if (game.getZoneOf(c).is(ZoneType.Battlefield)) {
c.addCounter(CounterType.P1P1, 1, card, true);
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", c);
game.getTriggerHandler().runTrigger(TriggerType.Explores, runParams, false);
}
}
}
}
}

View File

@ -51,7 +51,7 @@ public class TriggerExplores extends Trigger {
@Override
public final boolean performTest(final Map<String, Object> runParams2) {
if (this.mapParams.containsKey("ValidCard")) {
if (!matchesValid(runParams2.get("Explorer"), this.mapParams.get("ValidCard").split(","),
if (!matchesValid(runParams2.get("Card"), this.mapParams.get("ValidCard").split(","),
this.getHostCard())) {
return false;
}
@ -63,7 +63,7 @@ public class TriggerExplores extends Trigger {
/** {@inheritDoc} */
@Override
public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Explorer", this.getRunParams().get("Explorer"));
sa.setTriggeringObject("Explorer", this.getRunParams().get("Card"));
}
@Override