package forge; import forge.card.spellability.SpellAbility; import java.util.ArrayList; import java.util.HashMap; /** * <p>StaticEffect class.</p> * * @author Forge * @version $Id: $ */ public class StaticEffect { private Card source = new Card(); private int keywordNumber = 0; private CardList affectedCards = new CardList(); private int xValue = 0; private int yValue = 0; private long timestamp = -1; private String chosenType; private HashMap<String, String> mapParams = new HashMap<String, String>(); //for P/T private HashMap<Card, String> originalPT = new HashMap<Card, String>(); //for types private boolean overwriteTypes = false; private boolean keepSupertype = false; private boolean removeSubTypes = false; private HashMap<Card, ArrayList<String>> types = new HashMap<Card, ArrayList<String>>(); private HashMap<Card, ArrayList<String>> originalTypes = new HashMap<Card, ArrayList<String>>(); //keywords private boolean overwriteKeywords = false; private HashMap<Card, ArrayList<String>> originalKeywords = new HashMap<Card, ArrayList<String>>(); //for abilities private boolean overwriteAbilities = false; private HashMap<Card, ArrayList<SpellAbility>> originalAbilities = new HashMap<Card, ArrayList<SpellAbility>>(); //for colors private String colorDesc = ""; private boolean overwriteColors = false; private HashMap<Card, Long> timestamps = new HashMap<Card, Long>(); public void setTimestamp(long t) { timestamp = t; } public long getTimestamp() { return timestamp; } //overwrite SAs /** * <p>isOverwriteAbilities.</p> * * @return a boolean. */ public boolean isOverwriteAbilities() { return overwriteAbilities; } /** * <p>Setter for the field <code>overwriteAbilities</code>.</p> * * @param overwriteAbilities a boolean. */ public void setOverwriteAbilities(boolean overwriteAbilities) { this.overwriteAbilities = overwriteAbilities; } //original SAs /** * <p>addOriginalAbilities.</p> * * @param c a {@link forge.Card} object. * @param sa a {@link forge.card.spellability.SpellAbility} object. */ public void addOriginalAbilities(Card c, SpellAbility sa) { if (!originalAbilities.containsKey(c)) { ArrayList<SpellAbility> list = new ArrayList<SpellAbility>(); list.add(sa); originalAbilities.put(c, list); } else originalAbilities.get(c).add(sa); } /** * <p>addOriginalAbilities.</p> * * @param c a {@link forge.Card} object. * @param s a {@link java.util.ArrayList} object. */ public void addOriginalAbilities(Card c, ArrayList<SpellAbility> s) { ArrayList<SpellAbility> list = new ArrayList<SpellAbility>(s); if (!originalAbilities.containsKey(c)) { originalAbilities.put(c, list); } else { originalAbilities.remove(c); originalAbilities.put(c, list); } } /** * <p>Getter for the field <code>originalAbilities</code>.</p> * * @param c a {@link forge.Card} object. * @return a {@link java.util.ArrayList} object. */ public ArrayList<SpellAbility> getOriginalAbilities(Card c) { ArrayList<SpellAbility> returnList = new ArrayList<SpellAbility>(); if (originalAbilities.containsKey(c)) { returnList.addAll(originalAbilities.get(c)); } return returnList; } /** * <p>clearOriginalAbilities.</p> * * @param c a {@link forge.Card} object. */ public void clearOriginalAbilities(Card c) { if (originalAbilities.containsKey(c)) { originalAbilities.get(c).clear(); } } /** * <p>clearAllOriginalAbilities.</p> */ public void clearAllOriginalAbilities() { originalAbilities.clear(); } //overwrite keywords /** * <p>isOverwriteKeywords.</p> * * @return a boolean. */ public boolean isOverwriteKeywords() { return overwriteKeywords; } /** * <p>Setter for the field <code>overwriteKeywords</code>.</p> * * @param overwriteKeywords a boolean. */ public void setOverwriteKeywords(boolean overwriteKeywords) { this.overwriteKeywords = overwriteKeywords; } //original keywords /** * <p>addOriginalKeyword.</p> * * @param c a {@link forge.Card} object. * @param s a {@link java.lang.String} object. */ public void addOriginalKeyword(Card c, String s) { if (!originalKeywords.containsKey(c)) { ArrayList<String> list = new ArrayList<String>(); list.add(s); originalKeywords.put(c, list); } else originalKeywords.get(c).add(s); } /** * <p>addOriginalKeywords.</p> * * @param c a {@link forge.Card} object. * @param s a {@link java.util.ArrayList} object. */ public void addOriginalKeywords(Card c, ArrayList<String> s) { ArrayList<String> list = new ArrayList<String>(s); if (!originalKeywords.containsKey(c)) { originalKeywords.put(c, list); } else { originalKeywords.remove(c); originalKeywords.put(c, list); } } /** * <p>Getter for the field <code>originalKeywords</code>.</p> * * @param c a {@link forge.Card} object. * @return a {@link java.util.ArrayList} object. */ public ArrayList<String> getOriginalKeywords(Card c) { ArrayList<String> returnList = new ArrayList<String>(); if (originalKeywords.containsKey(c)) { returnList.addAll(originalKeywords.get(c)); } return returnList; } /** * <p>clearOriginalKeywords.</p> * * @param c a {@link forge.Card} object. */ public void clearOriginalKeywords(Card c) { if (originalKeywords.containsKey(c)) { originalKeywords.get(c).clear(); } } /** * <p>clearAllOriginalKeywords.</p> */ public void clearAllOriginalKeywords() { originalKeywords.clear(); } //original power/toughness /** * <p>addOriginalPT.</p> * * @param c a {@link forge.Card} object. * @param power a int. * @param toughness a int. */ public void addOriginalPT(Card c, int power, int toughness) { String pt = power + "/" + toughness; if (!originalPT.containsKey(c)) { originalPT.put(c, pt); } } /** * <p>getOriginalPower.</p> * * @param c a {@link forge.Card} object. * @return a int. */ public int getOriginalPower(Card c) { int power = -1; if (originalPT.containsKey(c)) { power = Integer.parseInt(originalPT.get(c).split("/")[0]); } return power; } /** * <p>getOriginalToughness.</p> * * @param c a {@link forge.Card} object. * @return a int. */ public int getOriginalToughness(Card c) { int tough = -1; if (originalPT.containsKey(c)) { tough = Integer.parseInt(originalPT.get(c).split("/")[1]); } return tough; } /** * <p>clearAllOriginalPTs.</p> */ public void clearAllOriginalPTs() { originalPT.clear(); } //should we overwrite types? /** * <p>isOverwriteTypes.</p> * * @return a boolean. */ public boolean isOverwriteTypes() { return overwriteTypes; } /** * <p>Setter for the field <code>overwriteTypes</code>.</p> * * @param overwriteTypes a boolean. */ public void setOverwriteTypes(boolean overwriteTypes) { this.overwriteTypes = overwriteTypes; } /** * <p>isKeepSupertype.</p> * * @return a boolean. */ public boolean isKeepSupertype() { return keepSupertype; } /** * <p>Setter for the field <code>keepSupertype</code>.</p> * * @param keepSupertype a boolean. */ public void setKeepSupertype(boolean keepSupertype) { this.keepSupertype = keepSupertype; } //should we overwrite land types? /** * <p>isRemoveSubTypes.</p> * * @return a boolean. */ public boolean isRemoveSubTypes() { return removeSubTypes; } /** * <p>Setter for the field <code>removeSubTypes</code>.</p> * * @param removeSubTypes a boolean. */ public void setRemoveSubTypes(boolean removeSubTypes) { this.removeSubTypes = removeSubTypes; } //original types /** * <p>addOriginalType.</p> * * @param c a {@link forge.Card} object. * @param s a {@link java.lang.String} object. */ public void addOriginalType(Card c, String s) { if (!originalTypes.containsKey(c)) { ArrayList<String> list = new ArrayList<String>(); list.add(s); originalTypes.put(c, list); } else originalTypes.get(c).add(s); } /** * <p>addOriginalTypes.</p> * * @param c a {@link forge.Card} object. * @param s a {@link java.util.ArrayList} object. */ public void addOriginalTypes(Card c, ArrayList<String> s) { ArrayList<String> list = new ArrayList<String>(s); if (!originalTypes.containsKey(c)) { originalTypes.put(c, list); } else { originalTypes.remove(c); originalTypes.put(c, list); } } /** * <p>Getter for the field <code>originalTypes</code>.</p> * * @param c a {@link forge.Card} object. * @return a {@link java.util.ArrayList} object. */ public ArrayList<String> getOriginalTypes(Card c) { ArrayList<String> returnList = new ArrayList<String>(); if (originalTypes.containsKey(c)) { returnList.addAll(originalTypes.get(c)); } return returnList; } /** * <p>clearOriginalTypes.</p> * * @param c a {@link forge.Card} object. */ public void clearOriginalTypes(Card c) { if (originalTypes.containsKey(c)) { originalTypes.get(c).clear(); } } /** * <p>clearAllOriginalTypes.</p> */ public void clearAllOriginalTypes() { originalTypes.clear(); } //statically assigned types /** * <p>addType.</p> * * @param c a {@link forge.Card} object. * @param s a {@link java.lang.String} object. */ public void addType(Card c, String s) { if (!types.containsKey(c)) { ArrayList<String> list = new ArrayList<String>(); list.add(s); types.put(c, list); } else types.get(c).add(s); } /** * <p>Getter for the field <code>types</code>.</p> * * @param c a {@link forge.Card} object. * @return a {@link java.util.ArrayList} object. */ public ArrayList<String> getTypes(Card c) { ArrayList<String> returnList = new ArrayList<String>(); if (types.containsKey(c)) { returnList.addAll(types.get(c)); } return returnList; } /** * <p>removeType.</p> * * @param c a {@link forge.Card} object. * @param type a {@link java.lang.String} object. */ public void removeType(Card c, String type) { if (types.containsKey(c)) { types.get(c).remove(type); } } /** * <p>clearTypes.</p> * * @param c a {@link forge.Card} object. */ public void clearTypes(Card c) { if (types.containsKey(c)) { types.get(c).clear(); } } /** * <p>clearAllTypes.</p> */ public void clearAllTypes() { types.clear(); } /** * <p>Getter for the field <code>colorDesc</code>.</p> * * @return a {@link java.lang.String} object. */ public String getColorDesc() { return colorDesc; } /** * <p>Setter for the field <code>colorDesc</code>.</p> * * @param colorDesc a {@link java.lang.String} object. */ public void setColorDesc(String colorDesc) { this.colorDesc = colorDesc; } //overwrite color /** * <p>isOverwriteColors.</p> * * @return a boolean. */ public boolean isOverwriteColors() { return overwriteColors; } /** * <p>Setter for the field <code>overwriteColors</code>.</p> * * @param overwriteColors a boolean. */ public void setOverwriteColors(boolean overwriteColors) { this.overwriteColors = overwriteColors; } /** * <p>Getter for the field <code>timestamps</code>.</p> * * @return a {@link java.util.HashMap} object. */ public HashMap<Card, Long> getTimestamps() { return timestamps; } /** * <p>getTimestamp.</p> * * @param c a {@link forge.Card} object. * @return a long. */ public long getTimestamp(Card c) { long stamp = -1; Long l = timestamps.get(c); if (null != l) { stamp = l.longValue(); } return stamp; } /** * <p>addTimestamp.</p> * * @param c a {@link forge.Card} object. * @param timestamp a long. */ public void addTimestamp(Card c, long timestamp) { timestamps.put(c, Long.valueOf(timestamp)); } /** * <p>clearTimestamps.</p> */ public void clearTimestamps() { timestamps.clear(); } /** * <p>Setter for the field <code>source</code>.</p> * * @param card a {@link forge.Card} object. */ public void setSource(Card card) { source = card; } /** * <p>Getter for the field <code>source</code>.</p> * * @return a {@link forge.Card} object. */ public Card getSource() { return source; } /** * <p>Setter for the field <code>keywordNumber</code>.</p> * * @param i a int. */ public void setKeywordNumber(int i) { keywordNumber = i; } /** * <p>Getter for the field <code>keywordNumber</code>.</p> * * @return a int. */ public int getKeywordNumber() { return keywordNumber; } /** * <p>Getter for the field <code>affectedCards</code>.</p> * * @return a {@link forge.CardList} object. */ public CardList getAffectedCards() { return affectedCards; } /** * <p>Setter for the field <code>affectedCards</code>.</p> * * @param list a {@link forge.CardList} object. */ public void setAffectedCards(CardList list) { affectedCards = list; } /** * <p>Setter for the field <code>xValue</code>.</p> * * @param x a int. */ public void setXValue(int x) { xValue = x; } /** * <p>Getter for the field <code>xValue</code>.</p> * * @return a int. */ public int getXValue() { return xValue; } /** * <p>Setter for the field <code>yValue</code>.</p> * * @param y a int. */ public void setYValue(int y) { yValue = y; } /** * <p>Getter for the field <code>yValue</code>.</p> * * @return a int. */ public int getYValue() { return yValue; } public void setParams(HashMap<String, String> params) { mapParams = params; } public HashMap<String, String> getParams() { return mapParams; } public void setChosenType(String type) { chosenType = type; } public String getChosenType() { return chosenType; } }//end class StaticEffect