static keyword may be accessed as method of Trigger

triggers are stored as list (unlike array)
This commit is contained in:
Maxmtg
2012-03-28 19:05:05 +00:00
parent 79f4a67368
commit 28f42d680d
12 changed files with 67 additions and 57 deletions

View File

@@ -43,6 +43,11 @@ public abstract class AllZoneUtil {
*/ */
public static CardList getCardsIn(final Constant.Zone zone) { public static CardList getCardsIn(final Constant.Zone zone) {
final CardList cards = new CardList(); final CardList cards = new CardList();
getCardsIn(zone, cards);
return cards;
}
private static void getCardsIn(final Constant.Zone zone, final CardList cards) {
if (zone == Zone.Stack) { if (zone == Zone.Stack) {
cards.addAll(AllZone.getStackZone().getCards()); cards.addAll(AllZone.getStackZone().getCards());
} else { } else {
@@ -50,32 +55,25 @@ public abstract class AllZoneUtil {
cards.addAll(p.getZone(zone).getCards()); cards.addAll(p.getZone(zone).getCards());
} }
} }
return cards;
} }
/** public static CardList getCardsIn(final Iterable<Constant.Zone> zones) {
*
* getCardsIn.
*
* @param zones
* a List<Constant.Zone>
* @return CardList
*/
public static CardList getCardsIn(final List<Constant.Zone> zones) {
final CardList cards = new CardList(); final CardList cards = new CardList();
for (final Zone z : zones) { for (final Zone z : zones) {
if (z == Zone.Stack) { getCardsIn(z, cards);
cards.addAll(AllZone.getStackZone().getCards());
continue;
}
for (final Player p : AllZone.getPlayersInGame()) {
cards.addAll(p.getZone(z).getCards());
}
} }
return cards; return cards;
} }
public static CardList getCardsIn(final Constant.Zone[] zones) {
final CardList cards = new CardList();
for (final Zone z : zones) {
getCardsIn(z, cards);
}
return cards;
}
/** /**
* gets a list of all cards owned by both players that have are currently in * gets a list of all cards owned by both players that have are currently in
* the given zone. * the given zone.

View File

@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Random; import java.util.Random;
@@ -689,7 +690,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* *
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object.
*/ */
public final ArrayList<Trigger> getTriggers() { public final List<Trigger> getTriggers() {
return this.getCharacteristics().getTriggers(); return this.getCharacteristics().getTriggers();
} }
@@ -720,7 +721,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @param trigs * @param trigs
* a {@link java.util.ArrayList} object. * a {@link java.util.ArrayList} object.
*/ */
public final void setTriggers(final ArrayList<Trigger> trigs) { public final void setTriggers(final List<Trigger> trigs) {
final ArrayList<Trigger> copyList = new ArrayList<Trigger>(); final ArrayList<Trigger> copyList = new ArrayList<Trigger>();
for (final Trigger t : trigs) { for (final Trigger t : trigs) {
if (t.getIsIntrinsic()) { if (t.getIsIntrinsic()) {
@@ -6613,7 +6614,7 @@ public class Card extends GameEntity implements Comparable<Card> {
if (!shares) { if (!shares) {
return false; return false;
} }
} else if (restriction.equals("Battlefield")) { } else if (restriction.equals(Constant.Zone.Battlefield.toString())) {
final CardList list = AllZoneUtil.getCardsIn(Constant.Zone.Battlefield); final CardList list = AllZoneUtil.getCardsIn(Constant.Zone.Battlefield);
if (list.isEmpty()) { if (list.isEmpty()) {
return false; return false;

View File

@@ -151,14 +151,13 @@ public class ComputerAIGeneral implements Computer {
* @return a boolean. * @return a boolean.
*/ */
public static boolean hasETBTrigger(final Card card) { public static boolean hasETBTrigger(final Card card) {
final ArrayList<Trigger> triggers = card.getTriggers(); for (final Trigger tr : card.getTriggers()) {
for (final Trigger tr : triggers) {
final HashMap<String, String> params = tr.getMapParams(); final HashMap<String, String> params = tr.getMapParams();
if (tr.getMode() != TriggerType.ChangesZone) { if (tr.getMode() != TriggerType.ChangesZone) {
continue; continue;
} }
if (!params.get("Destination").equals("Battlefield")) { if (!params.get("Destination").equals(Zone.Battlefield.toString())) {
continue; continue;
} }

View File

@@ -86,8 +86,7 @@ public class ComputerUtilAttack {
// Cards with triggers should come first (for Battle Cry) // Cards with triggers should come first (for Battle Cry)
for (final Card attacker : in) { for (final Card attacker : in) {
final ArrayList<Trigger> registeredTriggers = attacker.getTriggers(); for (final Trigger trigger : attacker.getTriggers()) {
for (final Trigger trigger : registeredTriggers) {
if (trigger.getMode() == TriggerType.Attacks) { if (trigger.getMode() == TriggerType.Attacks) {
list.add(attacker); list.add(attacker);
} }

View File

@@ -205,6 +205,8 @@ public final class Constant {
/** Ante. */ /** Ante. */
Ante(false); Ante(false);
public static final Zone[] StaticAbilitiesSourceZones = new Zone[]{Battlefield, Graveyard, Exile, Hand};
private final boolean holdsHiddenInfo; private final boolean holdsHiddenInfo;
private Zone(boolean holdsHidden) { private Zone(boolean holdsHidden) {
holdsHiddenInfo = holdsHidden; holdsHiddenInfo = holdsHidden;

View File

@@ -1380,6 +1380,15 @@ public abstract class Player extends GameEntity {
return result; return result;
} }
public final CardList getCardsIn(final Constant.Zone[] zones) {
final CardList result = new CardList();
for (final Constant.Zone z : zones) {
if (this.getZone(z) != null) {
result.addAll(this.getZone(z).getCards());
}
}
return result;
}
/** /**
* gets a list of all cards with requested cardName in a given player's * gets a list of all cards with requested cardName in a given player's
* requested zone. This function makes a CardList from Card[]. * requested zone. This function makes a CardList from Card[].

View File

@@ -18,6 +18,7 @@
package forge.card; package forge.card;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import forge.CardColor; import forge.CardColor;
import forge.card.replacement.ReplacementEffect; import forge.card.replacement.ReplacementEffect;
@@ -264,7 +265,7 @@ public class CardCharacteristics {
* *
* @return the triggers * @return the triggers
*/ */
public final ArrayList<Trigger> getTriggers() { public final List<Trigger> getTriggers() {
return this.triggers; return this.triggers;
} }

View File

@@ -20,6 +20,7 @@ package forge.card.abilityfactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import forge.AllZone; import forge.AllZone;
@@ -627,7 +628,7 @@ public final class AbilityFactoryAnimate {
// suppress triggers from the animated card // suppress triggers from the animated card
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>(); final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>();
if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) { if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) {
final ArrayList<Trigger> triggersToRemove = c.getTriggers(); final List<Trigger> triggersToRemove = c.getTriggers();
for (final Trigger trigger : triggersToRemove) { for (final Trigger trigger : triggersToRemove) {
trigger.setSuppressed(true); trigger.setSuppressed(true);
removedTriggers.add(trigger); removedTriggers.add(trigger);
@@ -1251,7 +1252,7 @@ public final class AbilityFactoryAnimate {
// suppress triggers from the animated card // suppress triggers from the animated card
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>(); final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>();
if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) { if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) {
final ArrayList<Trigger> triggersToRemove = c.getTriggers(); final List<Trigger> triggersToRemove = c.getTriggers();
for (final Trigger trigger : triggersToRemove) { for (final Trigger trigger : triggersToRemove) {
trigger.setSuppressed(true); trigger.setSuppressed(true);
removedTriggers.add(trigger); removedTriggers.add(trigger);

View File

@@ -428,8 +428,7 @@ public class SpellPermanent extends Spell {
} }
// Trigger play improvements // Trigger play improvements
final ArrayList<Trigger> triggers = card.getTriggers(); for (final Trigger tr : card.getTriggers()) {
for (final Trigger tr : triggers) {
// These triggers all care for ETB effects // These triggers all care for ETB effects
final HashMap<String, String> params = tr.getMapParams(); final HashMap<String, String> params = tr.getMapParams();
@@ -437,7 +436,7 @@ public class SpellPermanent extends Spell {
continue; continue;
} }
if (!params.get("Destination").equals("Battlefield")) { if (!params.get("Destination").equals(Zone.Battlefield.toString())) {
continue; continue;
} }

View File

@@ -312,8 +312,7 @@ public class StaticAbilityContinuous {
// remove triggers // remove triggers
if (params.containsKey("RemoveTriggers") || removeAllAbilities) { if (params.containsKey("RemoveTriggers") || removeAllAbilities) {
final ArrayList<Trigger> triggers = affectedCard.getTriggers(); for (final Trigger trigger : affectedCard.getTriggers()) {
for (final Trigger trigger : triggers) {
trigger.setTemporarilySuppressed(true); trigger.setTemporarilySuppressed(true);
} }
} }

View File

@@ -725,4 +725,12 @@ public abstract class Trigger extends TriggerReplacementBase {
copy.setID(this.getId()); copy.setID(this.getId());
copy.setMode(this.getMode()); copy.setMode(this.getMode());
} }
/**
* TODO: Write javadoc for this method.
* @return
*/
public boolean isStatic() {
return getMapParams().containsKey("Static"); // && params.get("Static").equals("True") [always true if present]
}
} }

View File

@@ -341,13 +341,13 @@ public class TriggerHandler {
// This is done to allow the list of triggers to be modified while // This is done to allow the list of triggers to be modified while
// triggers are running. // triggers are running.
final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(this.delayedTriggers); final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(this.delayedTriggers);
CardList allCards = AllZoneUtil.getCardsInGame(); CardList allCards = AllZoneUtil.getCardsIn(Zone.StaticAbilitiesSourceZones);
boolean checkStatics = false; boolean checkStatics = false;
// Static triggers // Static triggers
for (final Card c : allCards) { for (final Card c : allCards) {
for (final Trigger t : c.getTriggers()) { for (final Trigger t : c.getTriggers()) {
if (t.getMapParams().containsKey("Static")) { if (t.isStatic()) {
checkStatics |= this.runSingleTrigger(t, mode, runParams); checkStatics |= this.runSingleTrigger(t, mode, runParams);
} }
} }
@@ -358,11 +358,11 @@ public class TriggerHandler {
} }
// AP // AP
allCards = playerAP.getAllCards(); allCards = playerAP.getCardsIn(Zone.StaticAbilitiesSourceZones);
allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP)); allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP));
for (final Card c : allCards) { for (final Card c : allCards) {
for (final Trigger t : c.getTriggers()) { for (final Trigger t : c.getTriggers()) {
if (!t.getMapParams().containsKey("Static")) { if (!t.isStatic()) {
this.runSingleTrigger(t, mode, runParams); this.runSingleTrigger(t, mode, runParams);
} }
} }
@@ -379,11 +379,11 @@ public class TriggerHandler {
} }
// NAP // NAP
allCards = playerAP.getOpponent().getAllCards(); allCards = playerAP.getOpponent().getCardsIn(Zone.StaticAbilitiesSourceZones);
allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP.getOpponent())); allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP.getOpponent()));
for (final Card c : allCards) { for (final Card c : allCards) {
for (final Trigger t : c.getTriggers()) { for (final Trigger t : c.getTriggers()) {
if (!t.getMapParams().containsKey("Static")) { if (!t.isStatic()) {
this.runSingleTrigger(t, mode, runParams); this.runSingleTrigger(t, mode, runParams);
} }
} }
@@ -451,18 +451,12 @@ public class TriggerHandler {
// Torpor Orb check // Torpor Orb check
final CardList torporOrbs = AllZoneUtil.getCardsIn(Zone.Battlefield, "Torpor Orb"); final CardList torporOrbs = AllZoneUtil.getCardsIn(Zone.Battlefield, "Torpor Orb");
if (torporOrbs.size() != 0) { if (torporOrbs.size() != 0 && mode == TriggerType.ChangesZone) {
if (params.containsKey("Destination")) { String destination = params.get("Destination");
if ((params.get("Destination").equals("Battlefield") || params.get("Destination").equals("Any")) // if destination is not set, or set to 'battlefield' or 'any'
&& mode.equals("ChangesZone") if (null == destination || Zone.Battlefield.toString().equals(destination) || "Any".equals(destination) ) {
&& ((params.get("ValidCard").contains("Creature")) || (params.get("ValidCard").contains("Self") && regtrig if (params.get("ValidCard").contains("Creature")
.getHostCard().isCreature()))) { || (params.get("ValidCard").contains("Self") && regtrig.getHostCard().isCreature())) {
return false;
}
} else {
if (mode.equals("ChangesZone")
&& ((params.get("ValidCard").contains("Creature")) || (params.get("ValidCard").contains("Self") && regtrig
.getHostCard().isCreature()))) {
return false; return false;
} }
} }
@@ -1074,7 +1068,7 @@ public class TriggerHandler {
// Card src = (Card)(sa[0].getSourceCard().getTriggeringObject("Card")); // Card src = (Card)(sa[0].getSourceCard().getTriggeringObject("Card"));
// System.out.println("Trigger going on stack for "+mode+". Card = "+src); // System.out.println("Trigger going on stack for "+mode+". Card = "+src);
if (params.containsKey("Static") && params.get("Static").equals("True")) { if (regtrig.isStatic()) {
Singletons.getModel().getGameAction().playSpellAbilityNoStack(wrapperAbility, false); Singletons.getModel().getGameAction().playSpellAbilityNoStack(wrapperAbility, false);
} else { } else {
AllZone.getStack().addSimultaneousStackEntry(wrapperAbility); AllZone.getStack().addSimultaneousStackEntry(wrapperAbility);