Avoid prompting to order the same set of spell/abilities more than once

This commit is contained in:
drdev
2015-11-24 19:07:10 +00:00
parent 96ecb71c85
commit 89c11676d7

View File

@@ -1195,20 +1195,44 @@ public class PlayerControllerHuman
return HumanPlay.payCostDuringAbilityResolve(this, player, sa.getHostCard(), cost, sa, null); return HumanPlay.payCostDuringAbilityResolve(this, player, sa.getHostCard(), cost, sa, null);
} }
//stores saved order for different sets of SpellAbilities
private final HashMap<String, List<Integer>> orderedSALookup = new HashMap<String, List<Integer>>();
@Override @Override
public void orderAndPlaySimultaneousSa(final List<SpellAbility> activePlayerSAs) { public void orderAndPlaySimultaneousSa(final List<SpellAbility> activePlayerSAs) {
List<SpellAbility> orderedSAs = activePlayerSAs; List<SpellAbility> orderedSAs = activePlayerSAs;
if (activePlayerSAs.size() > 1) { // give a dual list form to create instead of needing to do it one at a time if (activePlayerSAs.size() > 1) {
final String firstStr = orderedSAs.get(0).toString(); final String firstStr = orderedSAs.get(0).toString();
for (int i = 1; i < orderedSAs.size(); i++) { //don't prompt user if all options are the same boolean needPrompt = false;
if (!orderedSAs.get(i).toString().equals(firstStr)) { String saLookupKey = firstStr;
char delim = (char)5;
for (int i = 1; i < orderedSAs.size(); i++) {
final String saStr = orderedSAs.get(i).toString();
if (!needPrompt && !saStr.equals(firstStr)) {
needPrompt = true; //prompt by default unless all abilities are the same
}
saLookupKey += delim + saStr;
}
if (needPrompt) {
List<Integer> savedOrder = orderedSALookup.get(saLookupKey);
if (savedOrder == null) { //prompt if no saved order for the current set of abilities
orderedSAs = getGui().order("Select order for simultaneous abilities", "Resolve first", activePlayerSAs, null); orderedSAs = getGui().order("Select order for simultaneous abilities", "Resolve first", activePlayerSAs, null);
break; //save order to avoid needing to prompt a second time to order the same abilties
savedOrder = new ArrayList<Integer>(activePlayerSAs.size());
for (SpellAbility sa : activePlayerSAs) {
savedOrder.add(orderedSAs.indexOf(sa));
}
orderedSALookup.put(saLookupKey, savedOrder);
}
else { //avoid prompt and just apply saved order
orderedSAs = new ArrayList<SpellAbility>();
for (Integer index : savedOrder) {
orderedSAs.add(activePlayerSAs.get(index));
}
} }
} }
} }
final int size = orderedSAs.size(); for (int i = orderedSAs.size() - 1; i >= 0; i--) {
for (int i = size - 1; i >= 0; i--) {
final SpellAbility next = orderedSAs.get(i); final SpellAbility next = orderedSAs.get(i);
if (next.isTrigger()) { if (next.isTrigger()) {
HumanPlay.playSpellAbility(this, player, next); HumanPlay.playSpellAbility(this, player, next);