removed forge.Color, byte colorMask is used instead.

This commit is contained in:
Maxmtg
2013-05-07 20:07:03 +00:00
parent a89644ac90
commit 2cd8cbdd65
14 changed files with 97 additions and 437 deletions

2
.gitattributes vendored
View File

@@ -13690,7 +13690,6 @@ src/main/java/forge/CardPowerToughness.java svneol=native#text/plain
src/main/java/forge/CardPredicates.java svneol=native#text/plain src/main/java/forge/CardPredicates.java svneol=native#text/plain
src/main/java/forge/CardType.java svneol=native#text/plain src/main/java/forge/CardType.java svneol=native#text/plain
src/main/java/forge/CardUtil.java svneol=native#text/plain src/main/java/forge/CardUtil.java svneol=native#text/plain
src/main/java/forge/Color.java svneol=native#text/plain
src/main/java/forge/ColorChanger.java -text src/main/java/forge/ColorChanger.java -text
src/main/java/forge/Command.java svneol=native#text/plain src/main/java/forge/Command.java svneol=native#text/plain
src/main/java/forge/Constant.java svneol=native#text/plain src/main/java/forge/Constant.java svneol=native#text/plain
@@ -14608,7 +14607,6 @@ src/main/resources/proxy-template.ftl -text
src/site/apt/index.apt -text src/site/apt/index.apt -text
src/test/java/forge/BoosterDraft1Test.java svneol=native#text/plain src/test/java/forge/BoosterDraft1Test.java svneol=native#text/plain
src/test/java/forge/BoosterDraftTest.java svneol=native#text/plain src/test/java/forge/BoosterDraftTest.java svneol=native#text/plain
src/test/java/forge/CardColorTest.java svneol=native#text/plain
src/test/java/forge/GuiDownloadPicturesLQTest.java svneol=native#text/plain src/test/java/forge/GuiDownloadPicturesLQTest.java svneol=native#text/plain
src/test/java/forge/GuiDownloadSetPicturesLQTest.java svneol=native#text/plain src/test/java/forge/GuiDownloadSetPicturesLQTest.java svneol=native#text/plain
src/test/java/forge/GuiProgressBarWindowTest.java svneol=native#text/plain src/test/java/forge/GuiProgressBarWindowTest.java svneol=native#text/plain

View File

@@ -50,7 +50,6 @@ import forge.card.ability.ApiType;
import forge.card.cardfactory.CardFactoryUtil; import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost; import forge.card.cost.Cost;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.replacement.ReplaceMoved; import forge.card.replacement.ReplaceMoved;
import forge.card.replacement.ReplacementEffect; import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementResult; import forge.card.replacement.ReplacementResult;
@@ -1537,7 +1536,7 @@ public class Card extends GameEntity implements Comparable<Card> {
if (s.equals("")) { if (s.equals("")) {
s = "0"; s = "0";
} }
this.getCharacteristics().getCardColor().add(new CardColor(new ManaCostBeingPaid(s), this, false, true)); this.getCharacteristics().getCardColor().add(new CardColor(s, false, true));
} }
/** /**
@@ -1555,11 +1554,11 @@ public class Card extends GameEntity implements Comparable<Card> {
* a boolean. * a boolean.
* @return a long. * @return a long.
*/ */
public final long addColor(final String s, final Card c, final boolean addToColors, final boolean bIncrease) { public final long addColor(final String s, final boolean addToColors, final boolean bIncrease) {
if (bIncrease) { if (bIncrease) {
CardColor.increaseTimestamp(); CardColor.increaseTimestamp();
} }
this.getCharacteristics().getCardColor().add(new CardColor(new ManaCostBeingPaid(s), c, addToColors, false)); this.getCharacteristics().getCardColor().add(new CardColor(s, addToColors, false));
return CardColor.getTimestamp(); return CardColor.getTimestamp();
} }
@@ -1597,15 +1596,13 @@ public class Card extends GameEntity implements Comparable<Card> {
* *
* @return a {@link forge.CardColor} object. * @return a {@link forge.CardColor} object.
*/ */
public final CardColor determineColor() { public final ColorSet determineColor() {
if (this.isImmutable()) { if (this.isImmutable()) {
return new CardColor(this); return ColorSet.getNullColor();
} }
final List<CardColor> globalChanges = getOwner() == null ? new ArrayList<CardColor>() : getOwner().getGame().getColorChanger().getColorChanges(); final List<CardColor> globalChanges = getOwner() == null ? new ArrayList<CardColor>() : getOwner().getGame().getColorChanger().getColorChanges();
CardColor colors = this.determineColor(globalChanges); return this.determineColor(globalChanges);
colors.fixColorless();
return colors;
} }
/** /**
@@ -1639,8 +1636,8 @@ public class Card extends GameEntity implements Comparable<Card> {
* an ArrayList<CardColor> * an ArrayList<CardColor>
* @return a CardColor * @return a CardColor
*/ */
final CardColor determineColor(final List<CardColor> globalChanges) { final ColorSet determineColor(final List<CardColor> globalChanges) {
final CardColor colors = new CardColor(this); byte colors = 0;
int i = this.getCharacteristics().getCardColor().size() - 1; int i = this.getCharacteristics().getCardColor().size() - 1;
int j = -1; int j = -1;
if (globalChanges != null) { if (globalChanges != null) {
@@ -1659,29 +1656,29 @@ public class Card extends GameEntity implements Comparable<Card> {
j--; j--;
} }
colors.addToCardColor(cc); colors |= cc.getColorMask();
if (!cc.getAdditional()) { if (!cc.isAdditional()) {
return colors; return ColorSet.fromMask(colors);
} }
} }
while (i >= 0) { while (i >= 0) {
final CardColor cc = this.getCharacteristics().getCardColor().get(i); final CardColor cc = this.getCharacteristics().getCardColor().get(i);
i--; i--;
colors.addToCardColor(cc); colors |= cc.getColorMask();
if (!cc.getAdditional()) { if (!cc.isAdditional()) {
return colors; return ColorSet.fromMask(colors);
} }
} }
while (j >= 0) { while (j >= 0) {
final CardColor cc = globalChanges.get(j); final CardColor cc = globalChanges.get(j);
j--; j--;
colors.addToCardColor(cc); colors |= cc.getColorMask();
if (!cc.getAdditional()) { if (!cc.isAdditional()) {
return colors; return ColorSet.fromMask(colors);
} }
} }
return colors; return ColorSet.fromMask(colors);
} }
/** /**

View File

@@ -17,13 +17,9 @@
*/ */
package forge; package forge;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.mana.ManaCostBeingPaid; import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
/** /**
* <p> * <p>
@@ -33,32 +29,21 @@ import forge.card.mana.ManaCostBeingPaid;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class CardColor implements Iterable<Color> { public class CardColor {
/* (non-Javadoc) private static long timeStamp = 0;
* @see java.lang.Iterable#iterator() public static long getTimestamp() { return CardColor.timeStamp; }
*/ static void increaseTimestamp() { CardColor.timeStamp++; }
@Override
public Iterator<Color> iterator() {
return col.iterator();
}
// takes care of individual card color, for global color change effects use // takes care of individual card color, for global color change effects use
// AllZone.getGameInfo().getColorChanges() // AllZone.getGameInfo().getColorChanges()
private final EnumSet<Color> col; private final byte colorMask;
private final boolean additional; public final byte getColorMask() { return colorMask; }
/** private final boolean additional;
* <p> public final boolean isAdditional() {
* Getter for the field <code>additional</code>.
* </p>
*
* @return a boolean.
*/
public final boolean getAdditional() {
return this.additional; return this.additional;
} }
private Card effectingCard = null;
private long stamp = 0; private long stamp = 0;
/** /**
@@ -72,22 +57,6 @@ public class CardColor implements Iterable<Color> {
return this.stamp; return this.stamp;
} }
/**
* Constant <code>timeStamp=0</code>.
*/
private static long timeStamp = 0;
/**
* <p>
* getTimestamp.
* </p>
*
* @return a long.
*/
public static long getTimestamp() {
return CardColor.timeStamp;
}
/** /**
* <p> * <p>
* Constructor for Card_Color. * Constructor for Card_Color.
@@ -102,10 +71,10 @@ public class CardColor implements Iterable<Color> {
* @param baseColor * @param baseColor
* a boolean. * a boolean.
*/ */
CardColor(final ManaCostBeingPaid mc, final Card c, final boolean addToColors, final boolean baseColor) { CardColor(final String colors, final boolean addToColors, final boolean baseColor) {
this.additional = addToColors; this.additional = addToColors;
this.col = Color.convertManaCostToColor(mc); ManaCost mc = new ManaCost(new ManaCostParser(colors));
this.effectingCard = c; this.colorMask = mc.getColorProfile();
if (baseColor) { if (baseColor) {
this.stamp = 0; this.stamp = 0;
} else { } else {
@@ -113,65 +82,15 @@ public class CardColor implements Iterable<Color> {
} }
} }
/** public CardColor(byte mask) {
* <p> this.colorMask = mask;
* Constructor for Card_Color.
* </p>
*
* @param c
* a {@link forge.Card} object.
*/
public CardColor(final Card c) {
this.col = Color.colorless();
this.additional = false; this.additional = false;
this.stamp = 0; this.stamp = 0;
this.effectingCard = c;
} }
/**
* <p>
* addToCardColor.
* </p>
*
* @param s
* a {@link java.lang.String} object.
* @return a boolean.
*/
public final void addToCardColor(final String[] ss) {
for (String s : ss) {
final Color c = Color.convertFromString(s);
if (!this.col.contains(c)) {
this.col.add(c);
}
}
}
public final void addToCardColor(final Iterable<Color> cc) { public CardColor() {
for (Color c : cc) { this((byte)0);
if (!this.col.contains(c)) {
this.col.add(c);
}
}
}
/**
* <p>
* fixColorless.
* </p>
*/
public final void fixColorless() {
if ((this.col.size() > 1) && this.col.contains(Color.Colorless)) {
this.col.remove(Color.Colorless);
}
}
/**
* <p>
* increaseTimestamp.
* </p>
*/
static void increaseTimestamp() {
CardColor.timeStamp++;
} }
/** /**
@@ -190,38 +109,10 @@ public class CardColor implements Iterable<Color> {
* @return a boolean. * @return a boolean.
*/ */
public final boolean equals(final String cost, final Card c, final boolean addToColors, final long time) { public final boolean equals(final String cost, final Card c, final boolean addToColors, final long time) {
return (this.effectingCard == c) && (addToColors == this.additional) && (this.stamp == time); return (addToColors == this.additional) && (this.stamp == time);
}
/**
* <p>
* toStringArray.
* </p>
*
* @return a {@link java.util.ArrayList} object.
*/
public final String[] toStringArray() {
final String[] list = new String[this.col.size()];
int i = 0;
for (final Color c : this.col) {
list[i++] = c.toString();
}
return list;
} }
public final ColorSet toColorSet() { public final ColorSet toColorSet() {
int mask = 0; return ColorSet.fromMask(colorMask);
for (final Color c : this.col) {
mask |= c.getMagicColor();
}
return ColorSet.fromMask(mask);
}
public final List<String> toStringList() {
final List<String> list = new ArrayList<String>(this.col.size());
for (final Color c : this.col) {
list.add(c.toString());
}
return list;
} }
} }

View File

@@ -39,7 +39,7 @@ public final class CardUtil {
private CardUtil() { } private CardUtil() { }
public static ColorSet getColors(final Card c) { public static ColorSet getColors(final Card c) {
return c.determineColor().toColorSet(); return c.determineColor();
} }
public static boolean isStackingKeyword(final String keyword) { public static boolean isStackingKeyword(final String keyword) {
@@ -135,7 +135,7 @@ public final class CardUtil {
// Determine the color for LKI copy, not just getColor // Determine the color for LKI copy, not just getColor
ArrayList<CardColor> currentColor = new ArrayList<CardColor>(); ArrayList<CardColor> currentColor = new ArrayList<CardColor>();
currentColor.add(in.determineColor()); currentColor.add(new CardColor(in.determineColor().getColor()));
newCopy.setColor(currentColor); newCopy.setColor(currentColor);
newCopy.setReceivedDamageFromThisTurn(in.getReceivedDamageFromThisTurn()); newCopy.setReceivedDamageFromThisTurn(in.getReceivedDamageFromThisTurn());
newCopy.getDamageHistory().setCreatureGotBlockedThisTurn(in.getDamageHistory().getCreatureGotBlockedThisTurn()); newCopy.getDamageHistory().setCreatureGotBlockedThisTurn(in.getDamageHistory().getCreatureGotBlockedThisTurn());
@@ -162,19 +162,17 @@ public final class CardUtil {
final List<Card> res = new ArrayList<Card>(); final List<Card> res = new ArrayList<Card>();
final GameState game = source.getGame(); final GameState game = source.getGame();
for (final CardColor col : origin.getColor()) { ColorSet cs = CardUtil.getColors(origin);
for (final String strCol : col.toStringList()) { for (byte color : MagicColor.WUBRG) {
if (strCol.equalsIgnoreCase("Colorless")) { if(!cs.hasAnyColor(color))
continue; continue;
}
for (final Card c : game.getColoredCardsInPlay(strCol)) { for(final Card c : game.getColoredCardsInPlay(MagicColor.toLongString(color))) {
if (!res.contains(c) && c.isValid(valid, source.getController(), source) && !c.equals(origin)) { if (!res.contains(c) && c.isValid(valid, source.getController(), source) && !c.equals(origin)) {
res.add(c); res.add(c);
}
} }
} }
} }
return res; return res;
} }

View File

@@ -1,193 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge;
import java.util.EnumSet;
import com.google.common.collect.ImmutableList;
import forge.card.ColorSet;
import forge.card.MagicColor;
import forge.card.mana.ManaCostBeingPaid;
/**
* <p>
* Color class.
* </p>
*
* @author Forge
* @version $Id$
*/
public enum Color {
/** The Colorless. */
Colorless((byte)0),
/** The White. */
White(MagicColor.WHITE),
/** The Green. */
Green(MagicColor.GREEN),
/** The Red. */
Red(MagicColor.RED),
/** The Black. */
Black(MagicColor.BLACK),
/** The Blue. */
Blue(MagicColor.BLUE);
private final byte magicColor;
private Color(final byte c) {
this.magicColor = c;
}
public static final ImmutableList<Color> WUBRG = ImmutableList.of( White, Blue, Black, Red, Green );
/**
* <p>
* Colorless.
* </p>
*
* @return a {@link java.util.EnumSet} object.
*/
public static EnumSet<Color> colorless() {
final EnumSet<Color> colors = EnumSet.of(Color.Colorless);
return colors;
}
public byte getMagicColor() {
return magicColor;
}
/**
* <p>
* ConvertStringsToColor.
* </p>
*
* @param s
* an array of {@link java.lang.String} objects.
* @return a {@link java.util.EnumSet} object.
*/
public static EnumSet<Color> convertStringsToColor(final String[] s) {
final EnumSet<Color> colors = EnumSet.of(Color.Colorless);
for (final String element : s) {
colors.add(Color.convertFromString(element));
}
if (colors.size() > 1) {
colors.remove(Color.Colorless);
}
return colors;
}
/**
* <p>
* ConvertFromString.
* </p>
*
* @param s
* a {@link java.lang.String} object.
* @return a {@link forge.Color} object.
*/
public static Color convertFromString(final String s) {
if (s.equals(Constant.Color.WHITE)) {
return Color.White;
} else if (s.equals(Constant.Color.GREEN)) {
return Color.Green;
} else if (s.equals(Constant.Color.RED)) {
return Color.Red;
} else if (s.equals(Constant.Color.BLACK)) {
return Color.Black;
} else if (s.equals(Constant.Color.BLUE)) {
return Color.Blue;
}
return Color.Colorless;
}
public static EnumSet<Color> fromColorSet(ColorSet cc) {
final EnumSet<Color> colors = EnumSet.of(Color.Colorless);
for( int i = 0; i < MagicColor.NUMBER_OR_COLORS; i++ ) {
if( cc.hasAnyColor(MagicColor.WUBRG[i]) )
colors.add(Color.WUBRG.get(i));
}
if (colors.size() > 1) {
colors.remove(Color.Colorless);
}
return colors;
}
/**
* <p>
* ConvertManaCostToColor.
* </p>
*
* @param m
* a {@link forge.card.mana.ManaCostBeingPaid} object.
* @return a {@link java.util.EnumSet} object.
*/
public static EnumSet<Color> convertManaCostToColor(final ManaCostBeingPaid m) {
final EnumSet<Color> colors = EnumSet.of(Color.Colorless);
if (m.isColor("W")) {
colors.add(Color.White);
}
if (m.isColor("G")) {
colors.add(Color.Green);
}
if (m.isColor("R")) {
colors.add(Color.Red);
}
if (m.isColor("B")) {
colors.add(Color.Black);
}
if (m.isColor("U")) {
colors.add(Color.Blue);
}
if (colors.size() > 1) {
colors.remove(Color.Colorless);
}
return colors;
}
/**
* <p>
* toString.
* </p>
*
* @return a {@link java.lang.String} object.
*/
@Override
public String toString() {
if (this.equals(Color.White)) {
return Constant.Color.WHITE;
} else if (this.equals(Color.Green)) {
return Constant.Color.GREEN;
} else if (this.equals(Color.Red)) {
return Constant.Color.RED;
} else if (this.equals(Color.Black)) {
return Constant.Color.BLACK;
} else if (this.equals(Color.Blue)) {
return Constant.Color.BLUE;
} else {
return Constant.Color.COLORLESS;
}
}
}

View File

@@ -20,8 +20,6 @@ package forge;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import forge.card.mana.ManaCostBeingPaid;
/** /**
* class ColorChanger. TODO Write javadoc for this type. * class ColorChanger. TODO Write javadoc for this type.
* *
@@ -44,11 +42,11 @@ public class ColorChanger {
* a boolean. * a boolean.
* @return a long. * @return a long.
*/ */
public final long addColorChanges(final String s, final Card c, final boolean addToColors, final boolean bIncrease) { public final long addColorChanges(final String s, final boolean addToColors, final boolean bIncrease) {
if (bIncrease) { if (bIncrease) {
CardColor.increaseTimestamp(); CardColor.increaseTimestamp();
} }
this.globalColorChanges.add(new CardColor(new ManaCostBeingPaid(s), c, addToColors, false)); this.globalColorChanges.add(new CardColor(s, addToColors, false));
return CardColor.getTimestamp(); return CardColor.getTimestamp();
} }

View File

@@ -104,7 +104,7 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
c.addHiddenExtrinsicKeyword(k); c.addHiddenExtrinsicKeyword(k);
} }
final long colorTimestamp = c.addColor(colors, c, !sa.hasParam("OverwriteColors"), true); final long colorTimestamp = c.addColor(colors, !sa.hasParam("OverwriteColors"), true);
return colorTimestamp; return colorTimestamp;
} }

View File

@@ -306,10 +306,10 @@ public class CloneEffect extends SpellAbilityEffect {
if (colors.equals("ChosenColor")) { if (colors.equals("ChosenColor")) {
shortColors = CardUtil.getShortColorsString(tgtCard.getChosenColor()); shortColors = CardUtil.getShortColorsString(tgtCard.getChosenColor());
} else { } else {
shortColors = CardUtil.getShortColorsString(new ArrayList<String>(Arrays.asList(colors.split(",")))); shortColors = CardUtil.getShortColorsString(Arrays.asList(colors.split(",")));
} }
} }
tgtCard.addColor(shortColors, tgtCard, !sa.hasParam("OverwriteColors"), true); tgtCard.addColor(shortColors, !sa.hasParam("OverwriteColors"), true);
} }
} }

View File

@@ -26,7 +26,6 @@ import forge.Card;
import forge.CardCharacteristicName; import forge.CardCharacteristicName;
import forge.CardColor; import forge.CardColor;
import forge.CardUtil; import forge.CardUtil;
import forge.Color;
import forge.Command; import forge.Command;
import forge.CounterType; import forge.CounterType;
import forge.ImageCache; import forge.ImageCache;
@@ -154,7 +153,7 @@ public class CardFactory {
} }
final String finalColors = tmp; final String finalColors = tmp;
c.addColor(finalColors, c, !sourceSA.hasParam("OverwriteColors"), true); c.addColor(finalColors, !sourceSA.hasParam("OverwriteColors"), true);
} }
c.clearControllers(); c.clearControllers();
@@ -385,9 +384,8 @@ public class CardFactory {
card.setManaCost(combinedManaCost); card.setManaCost(combinedManaCost);
// Combined card color // Combined card color
CardColor combinedCardColor = new CardColor(card); int combinedColor = rules.getMainPart().getColor().getColor() | rules.getOtherPart().getColor().getColor();
combinedCardColor.addToCardColor(Color.fromColorSet(rules.getMainPart().getColor())); CardColor combinedCardColor = new CardColor((byte)combinedColor);
combinedCardColor.addToCardColor(Color.fromColorSet(rules.getOtherPart().getColor()));
ArrayList<CardColor> combinedCardColorArr = new ArrayList<CardColor>(); ArrayList<CardColor> combinedCardColorArr = new ArrayList<CardColor>();
combinedCardColorArr.add(combinedCardColor); combinedCardColorArr.add(combinedCardColor);
card.setColor(combinedCardColorArr); card.setColor(combinedCardColorArr);
@@ -424,8 +422,7 @@ public class CardFactory {
c.setType(coreTypes); c.setType(coreTypes);
// What a perverted color code we have! // What a perverted color code we have!
CardColor col1 = new CardColor(c); CardColor col1 = new CardColor(face.getColor().getColor());
col1.addToCardColor(Color.fromColorSet(face.getColor()));
ArrayList<CardColor> ccc = new ArrayList<CardColor>(); ArrayList<CardColor> ccc = new ArrayList<CardColor>();
ccc.add(col1); ccc.add(col1);
c.setColor(ccc); c.setColor(ccc);

View File

@@ -26,10 +26,11 @@ import java.util.Map.Entry;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.Card; import forge.Card;
import forge.CardColor;
import forge.CardLists; import forge.CardLists;
import forge.CardPredicates; import forge.CardPredicates;
import forge.CardUtil;
import forge.Constant; import forge.Constant;
import forge.card.ColorSet;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility; import forge.card.staticability.StaticAbility;
@@ -804,17 +805,11 @@ public class ManaCostBeingPaid {
if (getColorlessManaAmount() > 0) { if (getColorlessManaAmount() > 0) {
usableColors.add("colorless"); usableColors.add("colorless");
} }
for (final CardColor col : cardToConvoke.getColor()) { ColorSet cs = CardUtil.getColors(cardToConvoke);
for (final String strCol : col.toStringList()) { for(byte color : MagicColor.WUBRG) {
if (strCol.equals("colorless")) { if( cs.hasAnyColor(color))
continue; usableColors.add(MagicColor.toLongString(color));
}
if (toString().contains(MagicColor.toShortString(strCol))) {
usableColors.add(strCol.toString());
}
}
} }
return usableColors; return usableColors;
} }

View File

@@ -425,7 +425,7 @@ public class StaticAbilityContinuous {
// add colors // add colors
if (addColors != null) { if (addColors != null) {
final long t = affectedCard.addColor(addColors, affectedCard, !se.isOverwriteColors(), true); final long t = affectedCard.addColor(addColors, !se.isOverwriteColors(), true);
se.addTimestamp(affectedCard, t); se.addTimestamp(affectedCard, t);
} }

View File

@@ -19,9 +19,7 @@ package forge.game.ai;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Random; import java.util.Random;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@@ -32,7 +30,7 @@ import forge.CardLists;
import forge.CardPredicates; import forge.CardPredicates;
import forge.CardPredicates.Presets; import forge.CardPredicates.Presets;
import forge.CardUtil; import forge.CardUtil;
import forge.Color; import forge.card.MagicColor;
import forge.card.ability.AbilityUtils; import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType; import forge.card.ability.ApiType;
import forge.card.ability.effects.CharmEffect; import forge.card.ability.effects.CharmEffect;
@@ -1270,10 +1268,10 @@ public class ComputerUtil {
{ {
//Too many lands! //Too many lands!
//Init //Init
Map<Color,List<Card>> numProducers = new HashMap<Color,List<Card>>(); int cntColors = MagicColor.WUBRG.length;
for(Color col : Color.WUBRG) List<List<Card>> numProducers = new ArrayList<List<Card>>(cntColors);
{ for(byte col : MagicColor.WUBRG) {
numProducers.put(col, new ArrayList<Card>()); numProducers.add(col, new ArrayList<Card>());
} }
@@ -1282,10 +1280,8 @@ public class ComputerUtil {
for(SpellAbility sa : c.getManaAbility()) for(SpellAbility sa : c.getManaAbility())
{ {
AbilityManaPart abmana = sa.getManaPart(); AbilityManaPart abmana = sa.getManaPart();
for(Color col : Color.WUBRG) for(byte col : MagicColor.WUBRG) {
{ if(abmana.canProduce(MagicColor.toLongString(col))) {
if(abmana.canProduce(col.toString()))
{
numProducers.get(col).add(c); numProducers.get(col).add(c);
} }
} }

View File

@@ -1,7 +1,7 @@
package forge.game.ai; package forge.game.ai;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -17,8 +17,10 @@ import com.google.common.collect.Iterables;
import forge.Card; import forge.Card;
import forge.CardLists; import forge.CardLists;
import forge.CardPredicates; import forge.CardPredicates;
import forge.CardUtil;
import forge.Constant; import forge.Constant;
import forge.card.CardType; import forge.card.CardType;
import forge.card.ColorSet;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.card.cardfactory.CardFactoryUtil; import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
@@ -823,27 +825,32 @@ public class ComputerUtilCard {
} }
public static List<String> getColorByProminence(final List<Card> list) { public static List<String> getColorByProminence(final List<Card> list) {
final HashMap<String, Integer> counts = new HashMap<String, Integer>(); int cntColors = MagicColor.WUBRG.length;
for (String color : Constant.Color.ONLY_COLORS) { final Integer[] map = new Integer[cntColors];
counts.put(color, 0);
} for (final Card crd : list) {
for (Card c : list) { ColorSet color = CardUtil.getColors(crd);
List<String> colors = c.determineColor().toStringList(); for(int i = 0; i < cntColors; i++) {
for (String col : colors) { if( color.hasAnyColor(MagicColor.WUBRG[i]))
if (counts.containsKey(col)) { map[i]++;
counts.put(col.toString(), counts.get(col.toString()) + 1);
}
}
}
ArrayList<String> res = new ArrayList<String>(counts.keySet());
Collections.sort(res, new Comparator<String>() {
@Override
public int compare(final String a, final String b) {
return counts.get(b) - counts.get(a);
} }
} // for
Integer[] indices = new Integer[cntColors];
for(int i = 0; i < cntColors; i++)
indices[i] = Integer.valueOf(i);
// sort indices for WUBRG array, to get indices for most prominent colors first.
Arrays.sort(indices, new Comparator<Integer>() {
@Override public int compare(final Integer a, final Integer b) { return map[b] - map[a]; }
}); });
return res; // fetch color names in the same order
List<String> result = new ArrayList<String>(cntColors);
for(Integer idx : indices) {
result.add(MagicColor.toLongString(MagicColor.WUBRG[idx]));
}
return result;
} }
/** /**

View File

@@ -1,24 +0,0 @@
package forge;
import java.util.EnumSet;
import org.testng.annotations.Test;
import forge.card.mana.ManaCostBeingPaid;
/**
* The Class CardColorTest.
*/
@Test(groups = { "UnitTest" }, timeOut = 1000)
public class CardColorTest {
/**
* Card color test1.
*/
@Test(groups = { "UnitTest", "fast" }, timeOut = 1000)
public void cardColorTest1() {
final ManaCostBeingPaid mc = new ManaCostBeingPaid("R W U");
final EnumSet<Color> col = Color.convertManaCostToColor(mc);
System.out.println(col.toString());
}
}