mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-11 16:26:22 +00:00
Compare commits
21 Commits
8a8bff26c0
...
chooseColo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0faae58c1d | ||
|
|
6900bcb8dd | ||
|
|
7497e3e8cd | ||
|
|
93d9c78b8e | ||
|
|
0cd9126b5c | ||
|
|
ba47164862 | ||
|
|
0170f5fe56 | ||
|
|
b07428c02a | ||
|
|
24242aa908 | ||
|
|
07814d9e82 | ||
|
|
9bf45c2e62 | ||
|
|
31147739f1 | ||
|
|
74b1467837 | ||
|
|
a85dc13cd8 | ||
|
|
2ed01fb285 | ||
|
|
3621c02165 | ||
|
|
9e3f23315e | ||
|
|
1033a0b595 | ||
|
|
b49efb28f9 | ||
|
|
07ee5ccddf | ||
|
|
21e458237d |
@@ -241,7 +241,8 @@ public class PlayerControllerAi extends PlayerController {
|
||||
public Map<Byte, Integer> specifyManaCombo(SpellAbility sa, ColorSet colorSet, int manaAmount, boolean different) {
|
||||
Map<Byte, Integer> result = new HashMap<>();
|
||||
for (int i = 0; i < manaAmount; ++i) {
|
||||
Byte chosen = chooseColor("", sa, colorSet);
|
||||
MagicColor.Color chosenColor = chooseColor("", sa, colorSet);
|
||||
Byte chosen = chosenColor == null ? (byte)0 : chosenColor.getColorMask();
|
||||
if (result.containsKey(chosen)) {
|
||||
result.put(chosen, result.get(chosen) + 1);
|
||||
} else {
|
||||
@@ -1022,19 +1023,22 @@ public class PlayerControllerAi extends PlayerController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte chooseColorAllowColorless(String message, Card card, ColorSet colors) {
|
||||
public MagicColor.Color chooseColorAllowColorless(String message, Card card, ColorSet colors) {
|
||||
final String c = ComputerUtilCard.getMostProminentColor(player.getCardsIn(ZoneType.Hand));
|
||||
byte chosenColorMask = MagicColor.fromName(c);
|
||||
if ((colors.getColor() & chosenColorMask) != 0) {
|
||||
return chosenColorMask;
|
||||
return MagicColor.Color.fromByte(chosenColorMask);
|
||||
}
|
||||
return Iterables.getFirst(colors, MagicColor.Color.COLORLESS).getColorMask();
|
||||
return Iterables.getFirst(colors, MagicColor.Color.COLORLESS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte chooseColor(String message, SpellAbility sa, ColorSet colors) {
|
||||
public MagicColor.Color chooseColor(String message, SpellAbility sa, ColorSet colors) {
|
||||
if (colors.countColors() == 0) {
|
||||
return null;
|
||||
}
|
||||
if (colors.countColors() < 2) {
|
||||
return Iterables.getFirst(colors, MagicColor.Color.WHITE).getColorMask();
|
||||
return Iterables.getFirst(colors, MagicColor.Color.WHITE);
|
||||
}
|
||||
// You may switch on sa.getApi() here and use sa.getParam("AILogic")
|
||||
CardCollectionView hand = player.getCardsIn(ZoneType.Hand);
|
||||
@@ -1045,9 +1049,9 @@ public class PlayerControllerAi extends PlayerController {
|
||||
byte chosenColorMask = MagicColor.fromName(c);
|
||||
|
||||
if ((colors.getColor() & chosenColorMask) != 0) {
|
||||
return chosenColorMask;
|
||||
return MagicColor.Color.fromByte(chosenColorMask);
|
||||
}
|
||||
return Iterables.getFirst(colors, MagicColor.Color.WHITE).getColorMask();
|
||||
return Iterables.getFirst(colors, MagicColor.Color.WHITE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1027,22 +1027,6 @@ public class DeckRecognizer {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the magic color by the localised/translated name.
|
||||
* @param localisedName String of localised color name.
|
||||
* @return The string of the magic color.
|
||||
*/
|
||||
public static String getColorNameByLocalisedName(String localisedName) {
|
||||
Localizer localizer = Localizer.getInstance();
|
||||
|
||||
if(localisedName.equals(localizer.getMessage("lblWhite"))) return MagicColor.Constant.WHITE;
|
||||
if(localisedName.equals(localizer.getMessage("lblBlue"))) return MagicColor.Constant.BLUE;
|
||||
if(localisedName.equals(localizer.getMessage("lblBlack"))) return MagicColor.Constant.BLACK;
|
||||
if(localisedName.equals(localizer.getMessage("lblRed"))) return MagicColor.Constant.RED;
|
||||
if(localisedName.equals(localizer.getMessage("lblGreen"))) return MagicColor.Constant.GREEN;
|
||||
|
||||
return "";
|
||||
}
|
||||
public static boolean isDeckName(final String lineAsIs) {
|
||||
if (lineAsIs == null)
|
||||
return false;
|
||||
|
||||
@@ -30,27 +30,28 @@ public class ChangeTextEffect extends SpellAbilityEffect {
|
||||
|
||||
final String changedColorWordOriginal, changedColorWordNew;
|
||||
if (sa.hasParam("ChangeColorWord")) {
|
||||
byte originalColor = 0;
|
||||
// all instances are Choose Choose
|
||||
MagicColor.Color originalColor = null;
|
||||
final String[] changedColorWordsArray = sa.getParam("ChangeColorWord").split(" ");
|
||||
if (changedColorWordsArray[0].equals("Choose")) {
|
||||
originalColor = sa.getActivatingPlayer().getController().chooseColor(
|
||||
Localizer.getInstance().getMessage("lblChooseColorReplace"), sa, ColorSet.WUBRG);
|
||||
changedColorWordOriginal = TextUtil.capitalize(MagicColor.toLongString(originalColor));
|
||||
changedColorWordOriginal = TextUtil.capitalize(originalColor.getName());
|
||||
} else {
|
||||
changedColorWordOriginal = changedColorWordsArray[0];
|
||||
originalColor = MagicColor.fromName(changedColorWordOriginal);
|
||||
originalColor = MagicColor.Color.fromByte(MagicColor.fromName(changedColorWordOriginal));
|
||||
}
|
||||
|
||||
if (changedColorWordsArray[1].equals("Choose")) {
|
||||
final ColorSet possibleNewColors;
|
||||
if (originalColor == 0) { // no original color (ie. any or absent)
|
||||
if (originalColor == null) { // no original color (ie. any or absent)
|
||||
possibleNewColors = ColorSet.WUBRG;
|
||||
} else { // may choose any except original color
|
||||
possibleNewColors = ColorSet.fromMask(originalColor).inverse();
|
||||
possibleNewColors = ColorSet.fromEnums(originalColor).inverse();
|
||||
}
|
||||
final byte newColor = sa.getActivatingPlayer().getController().chooseColor(
|
||||
MagicColor.Color newColor = sa.getActivatingPlayer().getController().chooseColor(
|
||||
Localizer.getInstance().getMessage("lblChooseNewColor"), sa, possibleNewColors);
|
||||
changedColorWordNew = TextUtil.capitalize(MagicColor.toLongString(newColor));
|
||||
changedColorWordNew = TextUtil.capitalize(newColor.getName());
|
||||
} else {
|
||||
changedColorWordNew = changedColorWordsArray[1];
|
||||
}
|
||||
|
||||
@@ -114,15 +114,15 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
// just use the first possible color.
|
||||
choice = colorsProduced[differentChoice ? nMana : 0];
|
||||
} else {
|
||||
byte chosenColor = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa,
|
||||
MagicColor.Color chosenColor = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa,
|
||||
differentChoice && (colorsNeeded == null || colorsNeeded.length <= nMana) ? fullOptions : colorOptions);
|
||||
if (chosenColor == 0)
|
||||
if (chosenColor == null)
|
||||
throw new RuntimeException("ManaEffect::resolve() /*combo mana*/ - " + p + " color mana choice is empty for " + card.getName());
|
||||
|
||||
if (differentChoice) {
|
||||
fullOptions = ColorSet.fromMask(fullOptions.getColor() - chosenColor);
|
||||
fullOptions = ColorSet.fromMask(fullOptions.getColor() - chosenColor.getColorMask());
|
||||
}
|
||||
choice = MagicColor.toShortString(chosenColor);
|
||||
choice = chosenColor.getShortName();
|
||||
}
|
||||
|
||||
if (nMana > 0) {
|
||||
@@ -157,13 +157,13 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
mask |= MagicColor.fromName(colorsNeeded.charAt(nChar));
|
||||
}
|
||||
colorMenu = mask == 0 ? ColorSet.WUBRG : ColorSet.fromMask(mask);
|
||||
byte val = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, colorMenu);
|
||||
if (0 == val) {
|
||||
MagicColor.Color val = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, colorMenu);
|
||||
if (val == null) {
|
||||
throw new RuntimeException("ManaEffect::resolve() /*any mana*/ - " + p + " color mana choice is empty for " + card.getName());
|
||||
}
|
||||
|
||||
game.getAction().notifyOfValue(sa, card, MagicColor.toSymbol(val), p);
|
||||
abMana.setExpressChoice(MagicColor.toShortString(val));
|
||||
game.getAction().notifyOfValue(sa, card, val.getSymbol(), p);
|
||||
abMana.setExpressChoice(val.getShortName());
|
||||
}
|
||||
else if (abMana.isSpecialMana()) {
|
||||
String type = abMana.getOrigProduced().split("Special ")[1];
|
||||
@@ -178,22 +178,22 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
|
||||
for (ManaCostShard s : enchanted.getManaCost()) {
|
||||
ColorSet cs = ColorSet.fromMask(s.getColorMask());
|
||||
byte chosenColor;
|
||||
MagicColor.Color chosenColor;
|
||||
if (cs.isColorless())
|
||||
continue;
|
||||
if (s.isOr2Generic()) { // CR 106.8
|
||||
chosenColor = chooser.getController().chooseColorAllowColorless(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), card, cs);
|
||||
if (chosenColor == MagicColor.COLORLESS) {
|
||||
if (chosenColor == MagicColor.Color.COLORLESS) {
|
||||
generic += 2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (cs.isMonoColor())
|
||||
chosenColor = s.getColorMask();
|
||||
chosenColor = MagicColor.Color.fromByte(s.getColorMask());
|
||||
else /* (cs.isMulticolor()) */ {
|
||||
chosenColor = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), sa, cs);
|
||||
}
|
||||
sb.append(MagicColor.toShortString(chosenColor));
|
||||
sb.append(chosenColor.getShortName());
|
||||
sb.append(' ');
|
||||
}
|
||||
if (generic > 0) {
|
||||
@@ -239,8 +239,8 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
if (cs.isMonoColor())
|
||||
sb.append(MagicColor.toShortString(s.getColorMask()));
|
||||
else /* (cs.isMulticolor()) */ {
|
||||
byte chosenColor = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), sa, cs);
|
||||
sb.append(MagicColor.toShortString(chosenColor));
|
||||
MagicColor.Color chosenColor = chooser.getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), sa, cs);
|
||||
sb.append(chosenColor.getShortName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ public class ManaReflectedEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (mask == 0 && !expressChoiceColors.isEmpty() && colors.contains("colorless")) {
|
||||
baseMana = MagicColor.toShortString(player.getController().chooseColorAllowColorless(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa.getHostCard(), ColorSet.fromMask(mask)));
|
||||
baseMana = player.getController().chooseColorAllowColorless(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa.getHostCard(), ColorSet.fromMask(mask)).getShortName();
|
||||
} else {
|
||||
// Nothing set previously so ask player if needed
|
||||
if (mask == 0) {
|
||||
@@ -105,18 +105,18 @@ public class ManaReflectedEffect extends SpellAbilityEffect {
|
||||
baseMana = MagicColor.toShortString(colors.iterator().next());
|
||||
} else {
|
||||
if (colors.contains("colorless")) {
|
||||
baseMana = MagicColor.toShortString(player.getController().chooseColorAllowColorless(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa.getHostCard(), ColorSet.fromNames(colors)));
|
||||
baseMana = player.getController().chooseColorAllowColorless(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa.getHostCard(), ColorSet.fromNames(colors)).getShortName();
|
||||
} else {
|
||||
baseMana = MagicColor.toShortString(player.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, ColorSet.fromNames(colors)));
|
||||
baseMana = player.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, ColorSet.fromNames(colors)).getShortName();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
colorMenu = ColorSet.fromMask(mask);
|
||||
byte color = sa.getActivatingPlayer().getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, colorMenu);
|
||||
if (color == 0) {
|
||||
MagicColor.Color color = sa.getActivatingPlayer().getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, colorMenu);
|
||||
if (color == null) {
|
||||
System.err.println("Unexpected behavior in ManaReflectedEffect: " + sa.getActivatingPlayer() + " - color mana choice is empty for " + sa.getHostCard().getName());
|
||||
}
|
||||
baseMana = MagicColor.toShortString(color);
|
||||
baseMana = color.getShortName();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,15 +34,15 @@ public class ReplaceManaEffect extends SpellAbilityEffect {
|
||||
// replace type and amount
|
||||
replaced = sa.getParam("ReplaceMana");
|
||||
if ("Any".equals(replaced)) {
|
||||
byte rs = player.getController().chooseColor("Choose a color", sa, ColorSet.WUBRG);
|
||||
replaced = MagicColor.toShortString(rs);
|
||||
MagicColor.Color rs = player.getController().chooseColor("Choose a color", sa, ColorSet.WUBRG);
|
||||
replaced = rs.getShortName();
|
||||
}
|
||||
} else if (sa.hasParam("ReplaceType")) {
|
||||
// replace color and colorless
|
||||
String color = sa.getParam("ReplaceType");
|
||||
if ("Any".equals(color)) {
|
||||
byte rs = player.getController().chooseColor("Choose a color", sa, ColorSet.WUBRG);
|
||||
color = MagicColor.toShortString(rs);
|
||||
MagicColor.Color rs = player.getController().chooseColor("Choose a color", sa, ColorSet.WUBRG);
|
||||
color = rs.getShortName();
|
||||
} else {
|
||||
// convert in case Color Word used
|
||||
color = MagicColor.toShortString(color);
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameOutcome;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollectionView;
|
||||
@@ -24,7 +21,6 @@ import forge.game.zone.PlayerZone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.collect.FCollectionView;
|
||||
|
||||
@@ -75,15 +71,7 @@ public class SubgameEffect extends SpellAbilityEffect {
|
||||
for (final Card card : commandCards) {
|
||||
if (card.isCommander()) {
|
||||
Card cmd = Card.fromPaperCard(card.getPaperCard(), player);
|
||||
if (cmd.hasKeyword("If CARDNAME is your commander, choose a color before the game begins.")) {
|
||||
List<String> colorChoices = new ArrayList<>(MagicColor.Constant.ONLY_COLORS);
|
||||
String prompt = Localizer.getInstance().getMessage("lblChooseAColorFor", cmd.getName());
|
||||
List<String> chosenColors;
|
||||
SpellAbility cmdColorsa = new SpellAbility.EmptySa(ApiType.ChooseColor, cmd, player);
|
||||
chosenColors = player.getController().chooseColors(prompt,cmdColorsa, 1, 1, colorChoices);
|
||||
cmd.setChosenColors(chosenColors);
|
||||
subgame.getAction().notifyOfValue(cmdColorsa, cmd, Localizer.getInstance().getMessage("lblPlayerPickedChosen", player.getName(), Lang.joinHomogenous(chosenColors)), player);
|
||||
}
|
||||
player.initCommanderColor(cmd);
|
||||
com.add(cmd);
|
||||
player.addCommander(cmd);
|
||||
}
|
||||
|
||||
@@ -3006,26 +3006,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
if (!registeredPlayer.getCommanders().isEmpty()) {
|
||||
for (PaperCard pc : registeredPlayer.getCommanders()) {
|
||||
Card cmd = Card.fromPaperCard(pc, this);
|
||||
boolean color = false;
|
||||
for (StaticAbility stAb : cmd.getStaticAbilities()) {
|
||||
if (stAb.hasParam("Description") && stAb.getParam("Description")
|
||||
.contains("If CARDNAME is your commander, choose a color before the game begins.")) {
|
||||
color = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (color) {
|
||||
Player p = cmd.getController();
|
||||
List<String> colorChoices = new ArrayList<>(MagicColor.Constant.ONLY_COLORS);
|
||||
String prompt = Localizer.getInstance().getMessage("lblChooseAColorFor", cmd.getName());
|
||||
List<String> chosenColors;
|
||||
SpellAbility cmdColorsa = new SpellAbility.EmptySa(ApiType.ChooseColor, cmd, p);
|
||||
chosenColors = p.getController().chooseColors(prompt,cmdColorsa, 1, 1, colorChoices);
|
||||
cmd.setChosenColors(chosenColors);
|
||||
p.getGame().getAction().notifyOfValue(cmdColorsa, cmd,
|
||||
Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(),
|
||||
Lang.joinHomogenous(chosenColors)), p);
|
||||
}
|
||||
initCommanderColor(cmd);
|
||||
cmd.setCollectible(true);
|
||||
com.add(cmd);
|
||||
this.addCommander(cmd);
|
||||
@@ -3113,6 +3094,19 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
public void initCommanderColor(Card cmd) {
|
||||
if (cmd.getStaticAbilities().stream().anyMatch(stAb -> stAb.hasParam("Description") && stAb.getParam("Description")
|
||||
.contains("If CARDNAME is your commander, choose a color before the game begins."))) {
|
||||
Player p = cmd.getController();
|
||||
String prompt = Localizer.getInstance().getMessage("lblChooseAColorFor", cmd.getName());
|
||||
SpellAbility cmdColorsa = new SpellAbility.EmptySa(ApiType.ChooseColor, cmd, p);
|
||||
MagicColor.Color chosenColor = p.getController().chooseColor(prompt, cmdColorsa, ColorSet.WUBRG);
|
||||
cmd.setChosenColors(List.of(chosenColor.getName()));
|
||||
p.getGame().getAction().notifyOfValue(cmdColorsa, cmd,
|
||||
Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), chosenColor.getName()), p);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean allCardsUniqueManaSymbols() {
|
||||
for (final Card c : getCardsIn(ZoneType.Library)) {
|
||||
Set<CardStateName> cardStateNames = c.isSplitCard() ? EnumSet.of(CardStateName.LeftSplit, CardStateName.RightSplit) : EnumSet.of(CardStateName.Original);
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.google.common.collect.Multimap;
|
||||
import forge.LobbyPlayer;
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.ICardFace;
|
||||
import forge.card.MagicColor;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.card.mana.ManaCostShard;
|
||||
import forge.deck.Deck;
|
||||
@@ -265,8 +266,8 @@ public abstract class PlayerController {
|
||||
|
||||
public abstract boolean chooseFlipResult(SpellAbility sa, Player flipper, boolean[] results, boolean call);
|
||||
|
||||
public abstract byte chooseColor(String message, SpellAbility sa, ColorSet colors);
|
||||
public abstract byte chooseColorAllowColorless(String message, Card c, ColorSet colors);
|
||||
public abstract MagicColor.Color chooseColor(String message, SpellAbility sa, ColorSet colors);
|
||||
public abstract MagicColor.Color chooseColorAllowColorless(String message, Card c, ColorSet colors);
|
||||
public abstract List<String> chooseColors(String message, SpellAbility sa, int min, int max, List<String> options);
|
||||
|
||||
public abstract ICardFace chooseSingleCardFace(SpellAbility sa, String message, Predicate<ICardFace> cpp, String name);
|
||||
|
||||
@@ -470,13 +470,16 @@ public class PlayerControllerForTests extends PlayerController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte chooseColor(String message, SpellAbility sa, ColorSet colors) {
|
||||
return Iterables.getFirst(colors, MagicColor.Color.WHITE).getColorMask();
|
||||
public MagicColor.Color chooseColor(String message, SpellAbility sa, ColorSet colors) {
|
||||
if (colors.countColors() == 0) {
|
||||
return null;
|
||||
}
|
||||
return Iterables.getFirst(colors, MagicColor.Color.WHITE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte chooseColorAllowColorless(String message, Card card, ColorSet colors) {
|
||||
return Iterables.getFirst(colors, MagicColor.Color.COLORLESS).getColorMask();
|
||||
public MagicColor.Color chooseColorAllowColorless(String message, Card card, ColorSet colors) {
|
||||
return Iterables.getFirst(colors, MagicColor.Color.COLORLESS);
|
||||
}
|
||||
|
||||
private CardCollection chooseItems(CardCollectionView items, int amount) {
|
||||
|
||||
@@ -77,7 +77,7 @@ public final class InputSelectCardsForConvokeOrImprovise extends InputSelectMany
|
||||
}
|
||||
if (colors.isMulticolor()) {
|
||||
//prompt user if more than one option for which color to pay towards convoke
|
||||
chosenColor = player.getController().chooseColorAllowColorless("Convoke " + card.toString() + " for which color?", card, colors);
|
||||
chosenColor = player.getController().chooseColorAllowColorless("Convoke " + card.toString() + " for which color?", card, colors).getColorMask();
|
||||
} else {
|
||||
// Since the convoke mana logic can use colored mana as generic if needed,
|
||||
// there is no need to prompt the user when convoking with a mono-color creature.
|
||||
|
||||
@@ -10,7 +10,6 @@ import forge.card.mana.ManaCost;
|
||||
import forge.card.mana.ManaCostShard;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckRecognizer;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.game.*;
|
||||
import forge.game.ability.AbilityKey;
|
||||
@@ -1836,53 +1835,51 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
@Override
|
||||
public List<String> chooseColors(final String message, final SpellAbility sa, final int min, final int max,
|
||||
List<String> options) {
|
||||
options = options.stream().map(DeckRecognizer::getLocalisedMagicColorName).collect(Collectors.toList());
|
||||
List<String> choices = getGui().getChoices(message, min, max, options);
|
||||
return choices.stream().map(DeckRecognizer::getColorNameByLocalisedName).collect(Collectors.toList());
|
||||
List<MagicColor.Color> enumOptions = options.stream().map(s -> MagicColor.Color.fromByte(MagicColor.fromName(s))).collect(Collectors.toList());
|
||||
List<MagicColor.Color> enumChoices = getGui().getChoices(message, min, max, enumOptions);
|
||||
return enumChoices.stream().map(MagicColor.Color::getName).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte chooseColor(final String message, final SpellAbility sa, final ColorSet colors) {
|
||||
public MagicColor.Color chooseColor(final String message, final SpellAbility sa, final ColorSet colors) {
|
||||
final int cntColors = colors.countColors();
|
||||
switch (cntColors) {
|
||||
case 0:
|
||||
return 0;
|
||||
return null;
|
||||
case 1:
|
||||
return colors.getColor();
|
||||
return MagicColor.Color.fromByte(colors.getColor());
|
||||
default:
|
||||
return chooseColorCommon(message, sa == null ? null : sa.getHostCard(), colors, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte chooseColorAllowColorless(final String message, final Card c, final ColorSet colors) {
|
||||
public MagicColor.Color chooseColorAllowColorless(final String message, final Card c, final ColorSet colors) {
|
||||
final int cntColors = 1 + colors.countColors();
|
||||
switch (cntColors) {
|
||||
case 1:
|
||||
return 0;
|
||||
return MagicColor.Color.COLORLESS;
|
||||
default:
|
||||
return chooseColorCommon(message, c, colors, true);
|
||||
}
|
||||
}
|
||||
|
||||
private byte chooseColorCommon(final String message, final Card c, final ColorSet colors,
|
||||
private MagicColor.Color chooseColorCommon(final String message, final Card c, final ColorSet colors,
|
||||
final boolean withColorless) {
|
||||
final ImmutableList.Builder<String> colorNamesBuilder = ImmutableList.builder();
|
||||
if (withColorless) {
|
||||
colorNamesBuilder.add(MagicColor.toLongString(MagicColor.COLORLESS));
|
||||
List<MagicColor.Color> options = Lists.newArrayList(colors.toEnumSet());
|
||||
if (withColorless && colors.countColors() > 0) {
|
||||
options.add(MagicColor.Color.COLORLESS);
|
||||
}
|
||||
for (final MagicColor.Color color : colors) {
|
||||
colorNamesBuilder.add(color.getName());
|
||||
}
|
||||
final ImmutableList<String> colorNames = colorNamesBuilder.build();
|
||||
if (colorNames.size() > 2) {
|
||||
return MagicColor.fromName(getGui().one(message, colorNames));
|
||||
|
||||
if (options.size() > 2) {
|
||||
return getGui().one(message, options);
|
||||
}
|
||||
|
||||
boolean confirmed = false;
|
||||
confirmed = InputConfirm.confirm(this, CardView.get(c), message, true, colorNames);
|
||||
confirmed = InputConfirm.confirm(this, CardView.get(c), message, true,
|
||||
options.stream().map(MagicColor.Color::toString).collect(Collectors.toList()));
|
||||
final int idxChosen = confirmed ? 0 : 1;
|
||||
return MagicColor.fromName(colorNames.get(idxChosen));
|
||||
return options.get(idxChosen);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user