From edf842236071e3fd075e0612adcac331794b5459 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Tue, 14 May 2013 06:45:36 +0000 Subject: [PATCH] converted sunburstMap to byte (from strings and hashmaps) --- src/main/java/forge/Card.java | 6 +-- .../forge/card/TriggerReplacementBase.java | 8 ++-- .../forge/card/mana/ManaCostBeingPaid.java | 45 +++---------------- .../spellability/SpellAbilityCondition.java | 9 ++-- .../forge/control/input/InputPayManaX.java | 9 ++-- 5 files changed, 24 insertions(+), 53 deletions(-) diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index c1e92f3effb..e428b416123 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -190,7 +190,7 @@ public class Card extends GameEntity implements Comparable { private int replicateMagnitude = 0; private int sunburstValue = 0; - private String colorsPaid = ""; + private byte colorsPaid = 0; private Player owner = null; private Player controller = null; @@ -876,7 +876,7 @@ public class Card extends GameEntity implements Comparable { } // TODO: Append colors instead of replacing - public final void setColorsPaid(final String s) { + public final void setColorsPaid(final byte s) { this.colorsPaid = s; } @@ -887,7 +887,7 @@ public class Card extends GameEntity implements Comparable { * * @return a String. */ - public final String getColorsPaid() { + public final byte getColorsPaid() { return this.colorsPaid; } diff --git a/src/main/java/forge/card/TriggerReplacementBase.java b/src/main/java/forge/card/TriggerReplacementBase.java index 07e887cab43..7c57b2a6087 100644 --- a/src/main/java/forge/card/TriggerReplacementBase.java +++ b/src/main/java/forge/card/TriggerReplacementBase.java @@ -294,19 +294,21 @@ public abstract class TriggerReplacementBase { } if (params.containsKey("ManaSpent")) { - if (!this.getHostCard().getColorsPaid().contains(params.get("ManaSpent"))) { + byte spent = MagicColor.fromName(params.get("ManaSpent")); + if ( 0 == (this.getHostCard().getColorsPaid() & spent)) { return false; } } if (params.containsKey("ManaNotSpent")) { - if (this.getHostCard().getColorsPaid().contains(params.get("ManaNotSpent"))) { + byte spent = MagicColor.fromName(params.get("ManaSpent")); + if ( 0 != (this.getHostCard().getColorsPaid() & spent)) { return false; } } if (params.containsKey("WerewolfTransformCondition")) { - if (CardUtil.getLastTurnCast("Card", this.getHostCard()).size() > 0) { + if (!CardUtil.getLastTurnCast("Card", this.getHostCard()).isEmpty()) { return false; } } diff --git a/src/main/java/forge/card/mana/ManaCostBeingPaid.java b/src/main/java/forge/card/mana/ManaCostBeingPaid.java index 8141a80fe58..6412746d794 100644 --- a/src/main/java/forge/card/mana/ManaCostBeingPaid.java +++ b/src/main/java/forge/card/mana/ManaCostBeingPaid.java @@ -102,7 +102,7 @@ public class ManaCostBeingPaid { // holds Mana_Part objects // ManaPartColor is stored before ManaPartColorless private final HashMap unpaidShards = new HashMap(); - private final HashMap sunburstMap = new HashMap(); + private byte sunburstMap = 0; private int cntX = 0; private final String sourceRestriction; @@ -146,9 +146,7 @@ public class ManaCostBeingPaid { * @return a int. */ public final int getSunburst() { - final int ret = this.sunburstMap.size(); - this.sunburstMap.clear(); - return ret; + return ColorSet.fromMask(sunburstMap).countColors(); } /** @@ -158,26 +156,8 @@ public class ManaCostBeingPaid { * * @return a String. */ - public final String getColorsPaid() { - String s = ""; - for (final String key : this.sunburstMap.keySet()) { - if (key.equalsIgnoreCase("black") || key.equalsIgnoreCase("B")) { - s += "B"; - } - if (key.equalsIgnoreCase("blue") || key.equalsIgnoreCase("U")) { - s += "U"; - } - if (key.equalsIgnoreCase("green") || key.equalsIgnoreCase("G")) { - s += "G"; - } - if (key.equalsIgnoreCase("red") || key.equalsIgnoreCase("R")) { - s += "R"; - } - if (key.equalsIgnoreCase("white") || key.equalsIgnoreCase("W")) { - s += "W"; - } - } - return s; + public final byte getColorsPaid() { + return sunburstMap; } /** @@ -470,13 +450,7 @@ public class ManaCostBeingPaid { this.increaseColorlessMana(1); } - if (!mana.equals(Constant.Color.COLORLESS)) { - if (this.sunburstMap.containsKey(mana)) { - this.sunburstMap.put(mana, this.sunburstMap.get(mana) + 1); - } else { - this.sunburstMap.put(mana, 1); - } - } + this.sunburstMap |= colorMask; return true; } @@ -550,20 +524,13 @@ public class ManaCostBeingPaid { return false; } - String manaColor = mana.getColor(); decreaseShard(choice, 1); if (choice.isOr2Colorless() && choice.getColorMask() != mana.getColorCode() ) { this.increaseColorlessMana(1); } - if (!mana.isColor(Constant.Color.COLORLESS)) { - if (this.sunburstMap.containsKey(manaColor)) { - this.sunburstMap.put(manaColor, this.sunburstMap.get(manaColor) + 1); - } else { - this.sunburstMap.put(manaColor, 1); - } - } + this.sunburstMap |= mana.getColorCode(); return true; } diff --git a/src/main/java/forge/card/spellability/SpellAbilityCondition.java b/src/main/java/forge/card/spellability/SpellAbilityCondition.java index e2273af918e..1391b450988 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityCondition.java +++ b/src/main/java/forge/card/spellability/SpellAbilityCondition.java @@ -21,8 +21,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.StringUtils; + import forge.Card; import forge.CardLists; +import forge.card.MagicColor; import forge.card.ability.AbilityUtils; import forge.card.cardfactory.CardFactoryUtil; import forge.game.GameState; @@ -315,10 +318,10 @@ public class SpellAbilityCondition extends SpellAbilityVariables { } } - if (null != this.getManaSpent()) { - if (!sa.getSourceCard().getColorsPaid().contains(this.getManaSpent())) { + if (StringUtils.isNotEmpty(this.getManaSpent())) { + byte manaSpent = MagicColor.fromName(getManaSpent()); // they always check for single color + if( 0 == (manaSpent & sa.getSourceCard().getColorsPaid())) // no match of colors return false; - } } if (this.getsVarToCheck() != null) { diff --git a/src/main/java/forge/control/input/InputPayManaX.java b/src/main/java/forge/control/input/InputPayManaX.java index e56b2ed2f4b..934fd9f6e88 100644 --- a/src/main/java/forge/control/input/InputPayManaX.java +++ b/src/main/java/forge/control/input/InputPayManaX.java @@ -6,6 +6,7 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; import forge.Card; +import forge.card.ColorSet; import forge.card.mana.ManaCostBeingPaid; import forge.card.spellability.SpellAbility; import forge.view.ButtonUtil; @@ -13,7 +14,7 @@ import forge.view.ButtonUtil; public class InputPayManaX extends InputPayManaBase { private static final long serialVersionUID = -6900234444347364050L; private int xPaid = 0; - private String colorsPaid; + private byte colorsPaid; private final String manaCostStr; private final boolean xCanBe0; private boolean canceled = false; @@ -85,9 +86,7 @@ public class InputPayManaX extends InputPayManaBase { @Override protected void onManaAbilityPaid() { if (this.manaCost.isPaid()) { - if (!this.colorsPaid.contains(this.manaCost.getColorsPaid())) { - this.colorsPaid += this.manaCost.getColorsPaid(); - } + this.colorsPaid |= manaCost.getColorsPaid(); this.manaCost = new ManaCostBeingPaid(manaCostStr); this.xPaid++; } @@ -116,7 +115,7 @@ public class InputPayManaX extends InputPayManaBase { final Card card = saPaidFor.getSourceCard(); card.setXManaCostPaid(this.xPaid); card.setColorsPaid(this.colorsPaid); - card.setSunburstValue(this.colorsPaid.length()); + card.setSunburstValue(ColorSet.fromMask(this.colorsPaid).countColors()); this.stop(); } }