From 28f42d680d1727ad6e0123705fd162a49b258064 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Wed, 28 Mar 2012 19:05:05 +0000 Subject: [PATCH] static keyword may be accessed as method of Trigger triggers are stored as list (unlike array) --- src/main/java/forge/AllZoneUtil.java | 38 +++++++++---------- src/main/java/forge/Card.java | 7 ++-- src/main/java/forge/ComputerAIGeneral.java | 5 +-- src/main/java/forge/ComputerUtilAttack.java | 3 +- src/main/java/forge/Constant.java | 6 ++- src/main/java/forge/Player.java | 9 +++++ .../java/forge/card/CardCharacteristics.java | 3 +- .../abilityfactory/AbilityFactoryAnimate.java | 5 ++- .../card/spellability/SpellPermanent.java | 5 +-- .../StaticAbilityContinuous.java | 3 +- src/main/java/forge/card/trigger/Trigger.java | 8 ++++ .../forge/card/trigger/TriggerHandler.java | 32 +++++++--------- 12 files changed, 67 insertions(+), 57 deletions(-) diff --git a/src/main/java/forge/AllZoneUtil.java b/src/main/java/forge/AllZoneUtil.java index b4fd6e520e2..e4ee682427f 100644 --- a/src/main/java/forge/AllZoneUtil.java +++ b/src/main/java/forge/AllZoneUtil.java @@ -43,6 +43,11 @@ public abstract class AllZoneUtil { */ public static CardList getCardsIn(final Constant.Zone zone) { 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) { cards.addAll(AllZone.getStackZone().getCards()); } else { @@ -50,32 +55,25 @@ public abstract class AllZoneUtil { cards.addAll(p.getZone(zone).getCards()); } } - return cards; - } - - /** - * - * getCardsIn. - * - * @param zones - * a List - * @return CardList - */ - public static CardList getCardsIn(final List zones) { + } + + public static CardList getCardsIn(final Iterable zones) { final CardList cards = new CardList(); for (final Zone z : zones) { - if (z == Zone.Stack) { - cards.addAll(AllZone.getStackZone().getCards()); - continue; - } - - for (final Player p : AllZone.getPlayersInGame()) { - cards.addAll(p.getZone(z).getCards()); - } + getCardsIn(z, 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 * the given zone. diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 0487317b0d4..3d8c567fb9a 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Random; @@ -689,7 +690,7 @@ public class Card extends GameEntity implements Comparable { * * @return a {@link java.util.ArrayList} object. */ - public final ArrayList getTriggers() { + public final List getTriggers() { return this.getCharacteristics().getTriggers(); } @@ -720,7 +721,7 @@ public class Card extends GameEntity implements Comparable { * @param trigs * a {@link java.util.ArrayList} object. */ - public final void setTriggers(final ArrayList trigs) { + public final void setTriggers(final List trigs) { final ArrayList copyList = new ArrayList(); for (final Trigger t : trigs) { if (t.getIsIntrinsic()) { @@ -6613,7 +6614,7 @@ public class Card extends GameEntity implements Comparable { if (!shares) { return false; } - } else if (restriction.equals("Battlefield")) { + } else if (restriction.equals(Constant.Zone.Battlefield.toString())) { final CardList list = AllZoneUtil.getCardsIn(Constant.Zone.Battlefield); if (list.isEmpty()) { return false; diff --git a/src/main/java/forge/ComputerAIGeneral.java b/src/main/java/forge/ComputerAIGeneral.java index 7e104f86d90..715772b3903 100644 --- a/src/main/java/forge/ComputerAIGeneral.java +++ b/src/main/java/forge/ComputerAIGeneral.java @@ -151,14 +151,13 @@ public class ComputerAIGeneral implements Computer { * @return a boolean. */ public static boolean hasETBTrigger(final Card card) { - final ArrayList triggers = card.getTriggers(); - for (final Trigger tr : triggers) { + for (final Trigger tr : card.getTriggers()) { final HashMap params = tr.getMapParams(); if (tr.getMode() != TriggerType.ChangesZone) { continue; } - if (!params.get("Destination").equals("Battlefield")) { + if (!params.get("Destination").equals(Zone.Battlefield.toString())) { continue; } diff --git a/src/main/java/forge/ComputerUtilAttack.java b/src/main/java/forge/ComputerUtilAttack.java index e068d71cfde..3fa5dc25d46 100644 --- a/src/main/java/forge/ComputerUtilAttack.java +++ b/src/main/java/forge/ComputerUtilAttack.java @@ -86,8 +86,7 @@ public class ComputerUtilAttack { // Cards with triggers should come first (for Battle Cry) for (final Card attacker : in) { - final ArrayList registeredTriggers = attacker.getTriggers(); - for (final Trigger trigger : registeredTriggers) { + for (final Trigger trigger : attacker.getTriggers()) { if (trigger.getMode() == TriggerType.Attacks) { list.add(attacker); } diff --git a/src/main/java/forge/Constant.java b/src/main/java/forge/Constant.java index adf50f1adfc..d434e6ac492 100644 --- a/src/main/java/forge/Constant.java +++ b/src/main/java/forge/Constant.java @@ -204,7 +204,9 @@ public final class Constant { Sideboard(true), /** Ante. */ Ante(false); - + + public static final Zone[] StaticAbilitiesSourceZones = new Zone[]{Battlefield, Graveyard, Exile, Hand}; + private final boolean holdsHiddenInfo; private Zone(boolean holdsHidden) { holdsHiddenInfo = holdsHidden; @@ -254,7 +256,7 @@ public final class Constant { public boolean isKnown() { return !holdsHiddenInfo; - } + } } /** diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index a228a9f2f43..2f657b7c03e 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -1380,6 +1380,15 @@ public abstract class Player extends GameEntity { 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 * requested zone. This function makes a CardList from Card[]. diff --git a/src/main/java/forge/card/CardCharacteristics.java b/src/main/java/forge/card/CardCharacteristics.java index bbe70e7bc27..720555c756c 100644 --- a/src/main/java/forge/card/CardCharacteristics.java +++ b/src/main/java/forge/card/CardCharacteristics.java @@ -18,6 +18,7 @@ package forge.card; import java.util.ArrayList; +import java.util.List; import forge.CardColor; import forge.card.replacement.ReplacementEffect; @@ -264,7 +265,7 @@ public class CardCharacteristics { * * @return the triggers */ - public final ArrayList getTriggers() { + public final List getTriggers() { return this.triggers; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java index 4bc842178ce..44f64001dce 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java @@ -20,6 +20,7 @@ package forge.card.abilityfactory; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import forge.AllZone; @@ -627,7 +628,7 @@ public final class AbilityFactoryAnimate { // suppress triggers from the animated card final ArrayList removedTriggers = new ArrayList(); if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) { - final ArrayList triggersToRemove = c.getTriggers(); + final List triggersToRemove = c.getTriggers(); for (final Trigger trigger : triggersToRemove) { trigger.setSuppressed(true); removedTriggers.add(trigger); @@ -1251,7 +1252,7 @@ public final class AbilityFactoryAnimate { // suppress triggers from the animated card final ArrayList removedTriggers = new ArrayList(); if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) { - final ArrayList triggersToRemove = c.getTriggers(); + final List triggersToRemove = c.getTriggers(); for (final Trigger trigger : triggersToRemove) { trigger.setSuppressed(true); removedTriggers.add(trigger); diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index 4fbee74eb5c..778ac56edab 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -428,8 +428,7 @@ public class SpellPermanent extends Spell { } // Trigger play improvements - final ArrayList triggers = card.getTriggers(); - for (final Trigger tr : triggers) { + for (final Trigger tr : card.getTriggers()) { // These triggers all care for ETB effects final HashMap params = tr.getMapParams(); @@ -437,7 +436,7 @@ public class SpellPermanent extends Spell { continue; } - if (!params.get("Destination").equals("Battlefield")) { + if (!params.get("Destination").equals(Zone.Battlefield.toString())) { continue; } diff --git a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java index 0a0b36dfa5a..4488f6a2668 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java +++ b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java @@ -312,8 +312,7 @@ public class StaticAbilityContinuous { // remove triggers if (params.containsKey("RemoveTriggers") || removeAllAbilities) { - final ArrayList triggers = affectedCard.getTriggers(); - for (final Trigger trigger : triggers) { + for (final Trigger trigger : affectedCard.getTriggers()) { trigger.setTemporarilySuppressed(true); } } diff --git a/src/main/java/forge/card/trigger/Trigger.java b/src/main/java/forge/card/trigger/Trigger.java index 105311aaef7..557831355bb 100644 --- a/src/main/java/forge/card/trigger/Trigger.java +++ b/src/main/java/forge/card/trigger/Trigger.java @@ -725,4 +725,12 @@ public abstract class Trigger extends TriggerReplacementBase { copy.setID(this.getId()); 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] + } } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index b248ca977d4..2c2f66f7ad5 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -341,13 +341,13 @@ public class TriggerHandler { // This is done to allow the list of triggers to be modified while // triggers are running. final ArrayList delayedTriggersWorkingCopy = new ArrayList(this.delayedTriggers); - CardList allCards = AllZoneUtil.getCardsInGame(); + CardList allCards = AllZoneUtil.getCardsIn(Zone.StaticAbilitiesSourceZones); boolean checkStatics = false; // Static triggers for (final Card c : allCards) { for (final Trigger t : c.getTriggers()) { - if (t.getMapParams().containsKey("Static")) { + if (t.isStatic()) { checkStatics |= this.runSingleTrigger(t, mode, runParams); } } @@ -358,11 +358,11 @@ public class TriggerHandler { } // AP - allCards = playerAP.getAllCards(); + allCards = playerAP.getCardsIn(Zone.StaticAbilitiesSourceZones); allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP)); for (final Card c : allCards) { for (final Trigger t : c.getTriggers()) { - if (!t.getMapParams().containsKey("Static")) { + if (!t.isStatic()) { this.runSingleTrigger(t, mode, runParams); } } @@ -379,11 +379,11 @@ public class TriggerHandler { } // NAP - allCards = playerAP.getOpponent().getAllCards(); + allCards = playerAP.getOpponent().getCardsIn(Zone.StaticAbilitiesSourceZones); allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP.getOpponent())); for (final Card c : allCards) { for (final Trigger t : c.getTriggers()) { - if (!t.getMapParams().containsKey("Static")) { + if (!t.isStatic()) { this.runSingleTrigger(t, mode, runParams); } } @@ -451,18 +451,12 @@ public class TriggerHandler { // Torpor Orb check final CardList torporOrbs = AllZoneUtil.getCardsIn(Zone.Battlefield, "Torpor Orb"); - if (torporOrbs.size() != 0) { - if (params.containsKey("Destination")) { - if ((params.get("Destination").equals("Battlefield") || params.get("Destination").equals("Any")) - && mode.equals("ChangesZone") - && ((params.get("ValidCard").contains("Creature")) || (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()))) { + if (torporOrbs.size() != 0 && mode == TriggerType.ChangesZone) { + String destination = params.get("Destination"); + // if destination is not set, or set to 'battlefield' or 'any' + if (null == destination || Zone.Battlefield.toString().equals(destination) || "Any".equals(destination) ) { + if (params.get("ValidCard").contains("Creature") + || (params.get("ValidCard").contains("Self") && regtrig.getHostCard().isCreature())) { return false; } } @@ -1074,7 +1068,7 @@ public class TriggerHandler { // Card src = (Card)(sa[0].getSourceCard().getTriggeringObject("Card")); // 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); } else { AllZone.getStack().addSimultaneousStackEntry(wrapperAbility);