Skip to content

Commit 8b2532f

Browse files
authored
PlayerControllerHuman: use translated MagicColor enum (Card-Forge#9224)
* PlayerControllerHuman: use translated MagicColor enum * Desktop ListChooser: allow Icon for MagicColor
1 parent 403ec57 commit 8b2532f

File tree

18 files changed

+87
-85
lines changed

18 files changed

+87
-85
lines changed

forge-ai/src/main/java/forge/ai/AiCostDecision.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import forge.ai.AiCardMemory.MemorySet;
66
import forge.card.CardType;
7-
import forge.card.MagicColor;
7+
import forge.card.ColorSet;
88
import forge.game.Game;
99
import forge.game.GameEntityCounterTable;
1010
import forge.game.ability.AbilityUtils;
@@ -60,9 +60,7 @@ public PaymentDecision visit(CostBehold cost) {
6060
@Override
6161
public PaymentDecision visit(CostChooseColor cost) {
6262
int c = cost.getAbilityAmount(ability);
63-
List<String> choices = player.getController().chooseColors("Color", ability, c, c,
64-
new ArrayList<>(MagicColor.Constant.ONLY_COLORS));
65-
return PaymentDecision.colors(choices);
63+
return PaymentDecision.colors(player.getController().chooseColors("Color", ability, c, c, ColorSet.WUBRG));
6664
}
6765

6866
@Override

forge-ai/src/main/java/forge/ai/PlayerControllerAi.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949

5050
import java.util.*;
5151
import java.util.function.Predicate;
52+
import java.util.stream.Collectors;
5253

5354

5455
/**
@@ -1051,8 +1052,8 @@ public byte chooseColor(String message, SpellAbility sa, ColorSet colors) {
10511052
}
10521053

10531054
@Override
1054-
public List<String> chooseColors(String message, SpellAbility sa, int min, int max, List<String> options) {
1055-
return ComputerUtilCard.chooseColor(sa, min, max, options);
1055+
public ColorSet chooseColors(String message, SpellAbility sa, int min, int max, ColorSet options) {
1056+
return ColorSet.fromNames(ComputerUtilCard.chooseColor(sa, min, max, options.stream().map(MagicColor.Color::getName).collect(Collectors.toList())));
10561057
}
10571058

10581059
/*

forge-core/src/main/java/forge/card/ColorSet.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@ public static ColorSet fromEnums(final Color... colors) {
9494
}
9595
return fromMask(mask);
9696
}
97+
public static ColorSet fromEnums(final Iterable<Color> colors) {
98+
byte mask = 0;
99+
for (Color e : colors) {
100+
mask |= e.getColorMask();
101+
}
102+
return fromMask(mask);
103+
}
97104

98105
public static ColorSet fromNames(final String... colors) {
99106
byte mask = 0;

forge-core/src/main/java/forge/deck/DeckRecognizer.java

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,36 +1013,6 @@ private static MagicColor.Color getMagicColor(String colorName){
10131013
return MagicColor.Color.fromByte(MagicColor.fromName(colorName.toLowerCase()));
10141014
}
10151015

1016-
public static String getLocalisedMagicColorName(String colorName){
1017-
Localizer localizer = Localizer.getInstance();
1018-
return switch (colorName.toLowerCase()) {
1019-
case MagicColor.Constant.WHITE -> localizer.getMessage("lblWhite");
1020-
case MagicColor.Constant.BLUE -> localizer.getMessage("lblBlue");
1021-
case MagicColor.Constant.BLACK -> localizer.getMessage("lblBlack");
1022-
case MagicColor.Constant.RED -> localizer.getMessage("lblRed");
1023-
case MagicColor.Constant.GREEN -> localizer.getMessage("lblGreen");
1024-
case MagicColor.Constant.COLORLESS -> localizer.getMessage("lblColorless");
1025-
case "multicolour", "multicolor" -> localizer.getMessage("lblMulticolor");
1026-
default -> "";
1027-
};
1028-
}
1029-
1030-
/**
1031-
* Get the magic color by the localised/translated name.
1032-
* @param localisedName String of localised color name.
1033-
* @return The string of the magic color.
1034-
*/
1035-
public static String getColorNameByLocalisedName(String localisedName) {
1036-
Localizer localizer = Localizer.getInstance();
1037-
1038-
if(localisedName.equals(localizer.getMessage("lblWhite"))) return MagicColor.Constant.WHITE;
1039-
if(localisedName.equals(localizer.getMessage("lblBlue"))) return MagicColor.Constant.BLUE;
1040-
if(localisedName.equals(localizer.getMessage("lblBlack"))) return MagicColor.Constant.BLACK;
1041-
if(localisedName.equals(localizer.getMessage("lblRed"))) return MagicColor.Constant.RED;
1042-
if(localisedName.equals(localizer.getMessage("lblGreen"))) return MagicColor.Constant.GREEN;
1043-
1044-
return "";
1045-
}
10461016
public static boolean isDeckName(final String lineAsIs) {
10471017
if (lineAsIs == null)
10481018
return false;

forge-game/src/main/java/forge/game/GameAction.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import forge.card.CardType.Supertype;
2525
import forge.card.ColorSet;
2626
import forge.card.GamePieceType;
27-
import forge.card.MagicColor;
2827
import forge.deck.DeckSection;
2928
import forge.game.ability.AbilityFactory;
3029
import forge.game.ability.AbilityKey;
@@ -2440,8 +2439,7 @@ private void runPreOpeningHandActions(final Player first) {
24402439
Localizer.getInstance().getMessage("lblChooseNColors", Lang.getNumeral(2));
24412440
SpellAbility sa = new SpellAbility.EmptySa(ApiType.ChooseColor, c, takesAction);
24422441
sa.putParam("AILogic", "MostProminentInComputerDeck");
2443-
ColorSet chosenColors = ColorSet.fromNames(takesAction.getController().chooseColors(prompt, sa, 2, 2, MagicColor.Constant.ONLY_COLORS));
2444-
c.setMarkedColors(chosenColors);
2442+
c.setMarkedColors(takesAction.getController().chooseColors(prompt, sa, 2, 2, ColorSet.WUBRG));
24452443
}
24462444
}
24472445
}

forge-game/src/main/java/forge/game/ability/effects/ChooseColorEffect.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import forge.card.ColorSet;
44
import forge.card.MagicColor;
5-
import forge.deck.DeckRecognizer;
65
import forge.game.ability.AbilityUtils;
76
import forge.game.ability.SpellAbilityEffect;
87
import forge.game.card.Card;
@@ -61,7 +60,7 @@ public void resolve(SpellAbility sa) {
6160
if (!p.isInGame()) {
6261
p = getNewChooser(sa, p);
6362
}
64-
List<String> chosenColors = new ArrayList<>();
63+
6564
int cntMin = sa.hasParam("UpTo") ? 0 : sa.hasParam("TwoColors") ? 2 : 1;
6665
int cntMax = sa.hasParam("TwoColors") ? 2 : sa.hasParam("OrColors") ? colorChoices.size() : 1;
6766
String prompt = null;
@@ -76,24 +75,25 @@ public void resolve(SpellAbility sa) {
7675
} else {
7776
prompt = Localizer.getInstance().getMessage("lblChooseNColors", Lang.getNumeral(cntMax));
7877
}
78+
ColorSet chosenColors = ColorSet.C;
7979
Player noNotify = p;
8080
if (sa.hasParam("Random")) {
8181
String choice;
8282
for (int i=0; i<cntMin; i++) {
8383
choice = Aggregates.random(colorChoices);
8484
colorChoices.remove(choice);
85-
chosenColors.add(choice);
85+
chosenColors = ColorSet.combine(chosenColors, ColorSet.fromNames(choice));
8686
}
8787
noNotify = null;
8888
} else {
89-
chosenColors = p.getController().chooseColors(prompt, sa, cntMin, cntMax, colorChoices);
89+
chosenColors = p.getController().chooseColors(prompt, sa, cntMin, cntMax, ColorSet.fromNames(colorChoices));
9090
}
91-
if (chosenColors.isEmpty()) {
91+
if (chosenColors.isColorless()) {
9292
return;
9393
}
94-
card.setChosenColors(chosenColors);
95-
chosenColors = chosenColors.stream().map(DeckRecognizer::getLocalisedMagicColorName).collect(Collectors.toList());
96-
p.getGame().getAction().notifyOfValue(sa, p, Lang.joinHomogenous(chosenColors), noNotify);
94+
card.setChosenColors(chosenColors.stream().map(MagicColor.Color::getName).collect(Collectors.toList()));
95+
String desc = Lang.joinHomogenous(chosenColors.stream().map(MagicColor.Color::getTranslatedName).collect(Collectors.toList()));
96+
p.getGame().getAction().notifyOfValue(sa, p, desc, noNotify);
9797
}
9898
}
9999
}

forge-game/src/main/java/forge/game/cost/CostChooseColor.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
*/
1818
package forge.game.cost;
1919

20+
import java.util.stream.Collectors;
21+
22+
import forge.card.MagicColor;
2023
import forge.game.card.Card;
2124
import forge.game.player.Player;
2225
import forge.game.spellability.SpellAbility;
@@ -55,7 +58,7 @@ public final boolean canPay(final SpellAbility ability, final Player payer, fina
5558

5659
@Override
5760
public boolean payAsDecided(Player payer, PaymentDecision pd, SpellAbility sa, final boolean effect) {
58-
sa.getHostCard().setChosenColors(pd.colors);
61+
sa.getHostCard().setChosenColors(pd.colors.stream().map(MagicColor.Color::getName).collect(Collectors.toList()));
5962
return true;
6063
}
6164

forge-game/src/main/java/forge/game/cost/PaymentDecision.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package forge.game.cost;
22

3+
import forge.card.ColorSet;
34
import forge.game.GameEntityCounterTable;
45
import forge.game.card.Card;
56
import forge.game.card.CardCollection;
@@ -14,7 +15,7 @@
1415
public class PaymentDecision {
1516
public int c = 0;
1617
public String type;
17-
public List<String> colors;
18+
public ColorSet colors;
1819

1920
public final CardCollection cards = new CardCollection();
2021
public final List<Mana> mana;
@@ -51,7 +52,7 @@ public PaymentDecision(String choice) {
5152
type = choice;
5253
}
5354

54-
public PaymentDecision(List<String> choices) {
55+
public PaymentDecision(ColorSet choices) {
5556
this(null, null, null, null, null);
5657
colors = choices;
5758
}
@@ -96,7 +97,7 @@ public static PaymentDecision type(String choice) {
9697
return new PaymentDecision(choice);
9798
}
9899

99-
public static PaymentDecision colors(List<String> choices) {
100+
public static PaymentDecision colors(ColorSet choices) {
100101
return new PaymentDecision(choices);
101102
}
102103

forge-game/src/main/java/forge/game/player/PlayerController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ public int chooseNumber(SpellAbility sa, String string, int min, int max, Map<St
267267

268268
public abstract byte chooseColor(String message, SpellAbility sa, ColorSet colors);
269269
public abstract byte chooseColorAllowColorless(String message, Card c, ColorSet colors);
270-
public abstract List<String> chooseColors(String message, SpellAbility sa, int min, int max, List<String> options);
270+
public abstract ColorSet chooseColors(String message, SpellAbility sa, int min, int max, ColorSet options);
271271

272272
public abstract ICardFace chooseSingleCardFace(SpellAbility sa, String message, Predicate<ICardFace> cpp, String name);
273273
public abstract ICardFace chooseSingleCardFace(SpellAbility sa, List<ICardFace> faces, String message);

forge-gui-desktop/src/main/java/forge/gui/ListChooser.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,13 @@
4040
import com.google.common.collect.ImmutableList;
4141
import com.google.common.collect.Lists;
4242

43+
import forge.card.MagicColor;
44+
import forge.localinstance.skin.FSkinProp;
4345
import forge.toolbox.FList;
4446
import forge.toolbox.FMouseAdapter;
4547
import forge.toolbox.FOptionPane;
4648
import forge.toolbox.FScrollPane;
49+
import forge.toolbox.FSkin;
4750
import forge.util.Localizer;
4851

4952
/**
@@ -305,8 +308,11 @@ public TransformedCellRenderer(final Function<T, String> t1) {
305308
*/
306309
@Override
307310
public Component getListCellRendererComponent(final JList<? extends T> list, final T value, final int index, final boolean isSelected, final boolean cellHasFocus) {
308-
// TODO Auto-generated method stub
309-
return defRenderer.getListCellRendererComponent(list, transformer.apply(value), index, isSelected, cellHasFocus);
311+
Component result = defRenderer.getListCellRendererComponent(list, transformer.apply(value), index, isSelected, cellHasFocus);
312+
if (value instanceof MagicColor.Color c) {
313+
defRenderer.setIcon(FSkin.getImage(FSkinProp.iconFromColor(c), 24, 24).getIcon());
314+
}
315+
return result;
310316
}
311317
}
312318
}

0 commit comments

Comments
 (0)