GUI: deck legality improves:

* Added partly valid status for deck legality panel (if all cards are fine but user must add more cards to complete, see #6854);
 * Improved legality errors sorting (important errors visible at the top now, e.g. commander's errors);
This commit is contained in:
Oleg Agafonov 2020-08-03 02:03:54 +04:00
parent 9dfc6eed69
commit e95b9f145c
20 changed files with 335 additions and 201 deletions

View file

@ -58,15 +58,15 @@ public class Constructed extends DeckValidator {
@Override
public boolean validate(Deck deck) {
boolean valid = true;
invalid.clear();
errorsList.clear();
//20091005 - 100.2a
if (deck.getCards().size() < getDeckMinSize()) {
invalid.put("Deck", "Must contain at least " + getDeckMinSize() + " cards: has only " + deck.getCards().size() + " cards");
addError(DeckValidatorErrorType.DECK_SIZE, "Deck", "Must contain at least " + getDeckMinSize() + " cards: has only " + deck.getCards().size() + " cards");
valid = false;
}
//20130713 - 100.4a
if (deck.getSideboard().size() > 15) {
invalid.put("Sideboard", "Must contain no more than 15 cards : has " + deck.getSideboard().size() + " cards");
addError(DeckValidatorErrorType.DECK_SIZE, "Sideboard", "Must contain no more than 15 cards : has " + deck.getSideboard().size() + " cards");
valid = false;
}
@ -77,7 +77,7 @@ public class Constructed extends DeckValidator {
for (String bannedCard : banned) {
if (counts.containsKey(bannedCard)) {
invalid.put(bannedCard, "Banned");
addError(DeckValidatorErrorType.BANNED, "Banned", bannedCard);
valid = false;
}
}
@ -86,7 +86,7 @@ public class Constructed extends DeckValidator {
if (counts.containsKey(restrictedCard)) {
int count = counts.get(restrictedCard);
if (count > 1) {
invalid.put(restrictedCard, "Restricted: " + count);
addError(DeckValidatorErrorType.OTHER, restrictedCard, "Restricted amount: " + count);
valid = false;
}
}
@ -142,8 +142,8 @@ public class Constructed extends DeckValidator {
break;
}
}
if (!legal && !invalid.containsKey(card.getName())) {
invalid.put(card.getName(), "Invalid rarity: " + card.getRarity());
if (!legal && !errorsListContainsGroup(card.getName())) {
addError(DeckValidatorErrorType.OTHER, card.getName(), "Invalid rarity: " + card.getRarity());
}
return legal;
}
@ -180,8 +180,8 @@ public class Constructed extends DeckValidator {
legal = true;
}
if (!legal && !invalid.containsKey(card.getName())) {
invalid.put(card.getName(), "Invalid set: " + card.getExpansionSetCode());
if (!legal && !errorsListContainsGroup(card.getName())) {
addError(DeckValidatorErrorType.WRONG_SET, card.getName(), "Invalid set: " + card.getExpansionSetCode());
}
return legal;
}
@ -192,11 +192,11 @@ public class Constructed extends DeckValidator {
if (entry.getValue() > maxCopies
&& !basicLandNames.contains(entry.getKey())
&& !anyNumberCardsAllowed.contains(entry.getKey())) {
invalid.put(entry.getKey(), "Too many: " + entry.getValue());
addError(DeckValidatorErrorType.OTHER, entry.getKey(), "Too many: " + entry.getValue());
valid = false;
}
if (entry.getValue() > 7 && entry.getKey().equals("Seven Dwarves")) {
invalid.put(entry.getKey(), "Too many: " + entry.getValue());
addError(DeckValidatorErrorType.OTHER, entry.getKey(), "Too many: " + entry.getValue());
valid = false;
}
}