mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Avoid prompting to order the same set of spell/abilities more than once
This commit is contained in:
@@ -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 = size - 1; i >= 0; i--) {
|
for (int i = orderedSAs.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);
|
||||||
|
|||||||
Reference in New Issue
Block a user