GUI: added card hints in choose replacement effect dialog

This commit is contained in:
Oleg Agafonov 2024-07-19 00:05:57 +04:00
parent 67ff2da060
commit 7b2e9b390c
7 changed files with 50 additions and 26 deletions

View file

@ -868,7 +868,10 @@ public class ContinuousEffects implements Serializable {
} else {
//20100716 - 616.1c
Player player = game.getPlayer(event.getPlayerId());
index = player.chooseReplacementEffect(getReplacementEffectsTexts(rEffects, game), game);
Map<String, String> effectsMap = new LinkedHashMap<>();
Map<String, MageObject> objectsMap = new LinkedHashMap<>();
prepareReplacementEffectMaps(rEffects, game, effectsMap, objectsMap);
index = player.chooseReplacementEffect(effectsMap, objectsMap, game);
}
// get the selected effect
int checked = 0;
@ -1317,18 +1320,26 @@ public class ContinuousEffects implements Serializable {
}
}
public Map<String, String> getReplacementEffectsTexts(Map<ReplacementEffect, Set<Ability>> rEffects, Game game) {
public void prepareReplacementEffectMaps(Map<ReplacementEffect, Set<Ability>> rEffects, Game game,
Map<String, String> effectsMap, Map<String, MageObject> objectsMap) {
// warning, autoSelectReplacementEffects uses [object id] in texts as different settings,
// so if you change keys or texts logic then don't forget to change auto-choose too
Map<String, String> texts = new LinkedHashMap<>();
if (!(effectsMap instanceof LinkedHashMap) || !(objectsMap instanceof LinkedHashMap)) {
throw new IllegalArgumentException("Wrong code usage: must use LinkedHashMap only");
}
effectsMap.clear();
objectsMap.clear();
for (Map.Entry<ReplacementEffect, Set<Ability>> entry : rEffects.entrySet()) {
if (entry.getValue() != null) {
for (Ability ability : entry.getValue()) {
MageObject object = game.getObject(ability.getSourceId());
String key = ability.getId().toString() + '_' + entry.getKey().getId().toString();
if (object != null) {
texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), object.getIdName() + ": " + ability.getRule(object.getName()));
effectsMap.put(key, object.getIdName() + ": " + ability.getRule(object.getName()));
objectsMap.put(key, object);
} else {
texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), entry.getKey().getText(null));
effectsMap.put(key, entry.getKey().getText(null));
objectsMap.put(key, null);
}
}
} else {
@ -1337,7 +1348,6 @@ public class ContinuousEffects implements Serializable {
}
}
}
return texts;
}
public boolean existRequirementEffects() {

View file

@ -740,8 +740,8 @@ public interface Player extends MageItem, Copyable<Player> {
// set the value for non mana X costs
int announceXCost(int min, int max, String message, Game game, Ability ability, VariableCost variableCost);
// TODO: rework choose replacement effects to use array, not map (it'a random order now)
int chooseReplacementEffect(Map<String, String> abilityMap, Game game);
// TODO: rework to use pair's list of effect + ability instead string's map
int chooseReplacementEffect(Map<String, String> effectsMap, Map<String, MageObject> objectsMap, Game game);
TriggeredAbility chooseTriggeredAbility(List<TriggeredAbility> abilities, Game game);

View file

@ -2,6 +2,7 @@ package mage.players;
import com.google.common.collect.Iterables;
import mage.MageItem;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.Modes;
@ -165,7 +166,7 @@ public class StubPlayer extends PlayerImpl {
}
@Override
public int chooseReplacementEffect(Map<String, String> abilityMap, Game game) {
public int chooseReplacementEffect(Map<String, String> effectsMap, Map<String, MageObject> objectsMap, Game game) {
return 0;
}