mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Added full support to card preview with foil and correct updates
Now all cards displayed in cardpreview panel will automatically adapt to any change in the decklist. That is, the panel will be reset only if current-displayed card is not in decklist anymore. In all other cases, the preview will adjust depending on the new token status, and/or whether the card is/was foiled! Signed-off-by: leriomaggio <valeriomaggio@gmail.com>
This commit is contained in:
@@ -554,7 +554,7 @@ public class DeckImport<TModel extends DeckBase> extends FDialog {
|
||||
}
|
||||
|
||||
private void activateCardPreview(HyperlinkEvent e) {
|
||||
// TODO: FOIL and Card Status
|
||||
// FIXME: Card Status
|
||||
if(e.getEventType() == HyperlinkEvent.EventType.ENTERED ||
|
||||
e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||
String keyString = e.getDescription();
|
||||
@@ -675,7 +675,32 @@ public class DeckImport<TModel extends DeckBase> extends FDialog {
|
||||
private void updateSummaries(final List<DeckRecognizer.Token> tokens) {
|
||||
this.cStatsView.updateStats(tokens, this.controller.importBannedAndRestrictedCards());
|
||||
cmdAcceptButton.setEnabled(this.cStatsView.getTotalCardsInDecklist() > 0);
|
||||
this.resetCardImagePreviewPanel();
|
||||
Object displayedCardInPanel = this.cardImagePreview.getDisplayed();
|
||||
if (!(displayedCardInPanel instanceof PaperCard)) // also accounts for any null
|
||||
this.resetCardImagePreviewPanel();
|
||||
else {
|
||||
PaperCard cardDisplayed = (PaperCard) displayedCardInPanel;
|
||||
// this will return either the same card instance or its [un]foiled version
|
||||
// null will be returned if not found in card list anymore
|
||||
cardDisplayed = this.controller.getCardFromDecklist(cardDisplayed);
|
||||
if (cardDisplayed == null)
|
||||
this.resetCardImagePreviewPanel(); // current displayed card is not in decklist
|
||||
else {
|
||||
if (this.controller.isTokenInListLegal(cardDisplayed)) {
|
||||
this.cardImagePreview.setItem(cardDisplayed);
|
||||
this.cardImagePreview.showAsEnabled();
|
||||
} else if (this.controller.isTokenInListLimited(cardDisplayed)) {
|
||||
this.cardImagePreview.setItem(cardDisplayed);
|
||||
if (this.includeBnRCheck.isSelected())
|
||||
this.cardImagePreview.showAsEnabled();
|
||||
else
|
||||
this.cardImagePreview.showAsDisabled();
|
||||
} else { // any other card token NOT legal nor limited
|
||||
this.cardImagePreview.setItem(cardDisplayed);
|
||||
this.cardImagePreview.showAsDisabled();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String toHTML(final DeckRecognizer.Token token) {
|
||||
@@ -721,7 +746,8 @@ public class DeckImport<TModel extends DeckBase> extends FDialog {
|
||||
private String getTokenMessage(DeckRecognizer.Token token){
|
||||
switch (token.getType()){
|
||||
case LIMITED_CARD:
|
||||
return String.format("- %s", Localizer.getInstance().getMessage("lblErrLimitedCard",
|
||||
return String.format("- <span class=\"%s\">%s</span>", WARN_MSG_CLASS,
|
||||
Localizer.getInstance().getMessage("lblErrLimitedCard",
|
||||
StringUtils.capitalize(token.getLimitedCardType().name()), getGameFormatLabel()));
|
||||
case CARD_FROM_NOT_ALLOWED_SET:
|
||||
return String.format("- %s", Localizer.getInstance().getMessage("lblErrNotAllowedCard",
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package forge.deck;
|
||||
|
||||
import java.text.DateFormatSymbols;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import forge.StaticData;
|
||||
import forge.card.CardDb;
|
||||
@@ -34,6 +32,7 @@ public class DeckImportController {
|
||||
private boolean inlcludeBnRInDeck = false;
|
||||
|
||||
private final List<Token> tokens = new ArrayList<>();
|
||||
private final Map<PaperCard, Token> cardsInTokens = new HashMap<>();
|
||||
private final boolean currentDeckNotEmpty;
|
||||
private DeckFormat currentDeckFormat;
|
||||
private GameFormat currentGameFormat;
|
||||
@@ -145,6 +144,7 @@ public class DeckImportController {
|
||||
|
||||
public List<Token> parseInput(String input) {
|
||||
tokens.clear();
|
||||
cardsInTokens.clear();
|
||||
DeckRecognizer recognizer = new DeckRecognizer();
|
||||
// Set Art Preference first thing
|
||||
recognizer.setArtPreference(this.artPreference);
|
||||
@@ -177,11 +177,18 @@ public class DeckImportController {
|
||||
checkAndFixCommanderIn(DeckSection.Commander);
|
||||
}
|
||||
|
||||
collectAllCardsInTokens();
|
||||
return tokens;
|
||||
}
|
||||
|
||||
public boolean currentGameFormatAllowsCommander(){
|
||||
return this.allowedSections.contains(DeckSection.Commander);
|
||||
private void collectAllCardsInTokens(){
|
||||
cardsInTokens.clear();
|
||||
for (Token token : tokens){
|
||||
if (!token.isCardToken())
|
||||
continue;
|
||||
PaperCard tokenCard = token.getCard();
|
||||
cardsInTokens.put(tokenCard, token);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkAndFixCommanderIn(DeckSection targetDeckSection){
|
||||
@@ -277,6 +284,34 @@ public class DeckImportController {
|
||||
return tokensInSection;
|
||||
}
|
||||
|
||||
public boolean currentGameFormatAllowsCommander(){
|
||||
return this.allowedSections.contains(DeckSection.Commander);
|
||||
}
|
||||
|
||||
public PaperCard getCardFromDecklist(final PaperCard card){
|
||||
if (cardsInTokens.containsKey(card))
|
||||
return card; // found - same instance returned
|
||||
|
||||
// Account for any [un]foiled version
|
||||
PaperCard cardKey;
|
||||
if (card.isFoil())
|
||||
cardKey = new PaperCard(card.getRules(), card.getEdition(), card.getRarity(), card.getArtIndex(),
|
||||
false, card.getCollectorNumber(), card.getArtist());
|
||||
else
|
||||
cardKey = card.getFoiled();
|
||||
return cardsInTokens.containsKey(cardKey) ? cardsInTokens.get(cardKey).getCard() : null;
|
||||
}
|
||||
|
||||
public boolean isTokenInListLimited(PaperCard cardKey) {
|
||||
Token cardToken = this.cardsInTokens.getOrDefault(cardKey, null);
|
||||
return (cardToken != null) && (cardToken.getType() == TokenType.LIMITED_CARD);
|
||||
}
|
||||
|
||||
public boolean isTokenInListLegal(PaperCard cardKey) {
|
||||
Token cardToken = this.cardsInTokens.getOrDefault(cardKey, null);
|
||||
return (cardToken != null) && (cardToken.getType() == TokenType.LEGAL_CARD);
|
||||
}
|
||||
|
||||
public Deck accept(){
|
||||
return this.accept("");
|
||||
}
|
||||
@@ -321,7 +356,7 @@ public class DeckImportController {
|
||||
/* Deck Sections have been already validated for tokens by DeckRecogniser,
|
||||
* plus any other adjustment (like accounting for Commander in Sideboard) has been
|
||||
* already taken care of in previous parseInput.
|
||||
* Therefore we can safely proceed here by just adding the cards. */
|
||||
* Therefore, we can safely proceed here by just adding the cards. */
|
||||
resultDeck.getOrCreate(deckSection).add(crd, t.getQuantity());
|
||||
}
|
||||
return resultDeck;
|
||||
|
||||
Reference in New Issue
Block a user