mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-10 16:24:45 -07:00
Allow tokens to consider providerIds. (#6075)
Tokens created through Ctrl + T use the pinned printing, if available. Tokens created through a related card menu use a token from the same set, if available. Took 2 hours 25 minutes Took 10 seconds Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
3a42354efd
commit
f2cbdae829
5 changed files with 36 additions and 9 deletions
|
|
@ -198,7 +198,16 @@ void DlgCreateToken::tokenSelectionChanged(const QModelIndex ¤t, const QMo
|
||||||
annotationEdit->setText("");
|
annotationEdit->setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
pic->setCard(CardDatabaseManager::getInstance()->getPreferredCard(cardInfo));
|
const auto &cardProviderId =
|
||||||
|
SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardInfo->getName());
|
||||||
|
if (!cardProviderId.isEmpty()) {
|
||||||
|
CardRef ref;
|
||||||
|
ref.name = cardInfo->getName();
|
||||||
|
ref.providerId = cardProviderId;
|
||||||
|
pic->setCard(CardDatabaseManager::getInstance()->getCard(ref));
|
||||||
|
} else {
|
||||||
|
pic->setCard(CardDatabaseManager::getInstance()->getPreferredCard(cardInfo));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DlgCreateToken::updateSearchFieldWithoutUpdatingFilter(const QString &newValue) const
|
void DlgCreateToken::updateSearchFieldWithoutUpdatingFilter(const QString &newValue) const
|
||||||
|
|
@ -250,5 +259,6 @@ TokenInfo DlgCreateToken::getTokenInfo() const
|
||||||
.pt = ptEdit->text(),
|
.pt = ptEdit->text(),
|
||||||
.annotation = annotationEdit->text(),
|
.annotation = annotationEdit->text(),
|
||||||
.destroy = destroyCheckBox->isChecked(),
|
.destroy = destroyCheckBox->isChecked(),
|
||||||
.faceDown = faceDownCheckBox->isChecked()};
|
.faceDown = faceDownCheckBox->isChecked(),
|
||||||
|
.providerId = SettingsCache::instance().cardOverrides().getCardPreferenceOverride(nameEdit->text())};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ struct TokenInfo
|
||||||
QString annotation;
|
QString annotation;
|
||||||
bool destroy = true;
|
bool destroy = true;
|
||||||
bool faceDown = false;
|
bool faceDown = false;
|
||||||
|
QString providerId;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DlgCreateToken : public QDialog
|
class DlgCreateToken : public QDialog
|
||||||
|
|
|
||||||
|
|
@ -458,6 +458,12 @@ bool CardDatabase::isPreferredPrinting(const CardRef &cardRef) const
|
||||||
return cardRef.providerId == getPreferredPrintingProviderId(cardRef.name);
|
return cardRef.providerId == getPreferredPrintingProviderId(cardRef.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ExactCard CardDatabase::getCardFromSameSet(const QString &cardName, const PrintingInfo &otherPrinting) const
|
||||||
|
{
|
||||||
|
PrintingInfo relatedPrinting = getSpecificPrinting(cardName, otherPrinting.getSet()->getCorrectedShortName(), "");
|
||||||
|
return ExactCard(guessCard({cardName}).getCardPtr(), relatedPrinting);
|
||||||
|
}
|
||||||
|
|
||||||
void CardDatabase::refreshCachedReverseRelatedCards()
|
void CardDatabase::refreshCachedReverseRelatedCards()
|
||||||
{
|
{
|
||||||
for (const CardInfoPtr &card : cards)
|
for (const CardInfoPtr &card : cards)
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@ public:
|
||||||
getSpecificPrinting(const QString &cardName, const QString &setShortName, const QString &collectorNumber) const;
|
getSpecificPrinting(const QString &cardName, const QString &setShortName, const QString &collectorNumber) const;
|
||||||
QString getPreferredPrintingProviderId(const QString &cardName) const;
|
QString getPreferredPrintingProviderId(const QString &cardName) const;
|
||||||
bool isPreferredPrinting(const CardRef &cardRef) const;
|
bool isPreferredPrinting(const CardRef &cardRef) const;
|
||||||
|
ExactCard getCardFromSameSet(const QString &cardName, const PrintingInfo &otherPrinting) const;
|
||||||
|
|
||||||
[[nodiscard]] ExactCard guessCard(const CardRef &cardRef) const;
|
[[nodiscard]] ExactCard guessCard(const CardRef &cardRef) const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1840,7 +1840,8 @@ void Player::actCreateToken()
|
||||||
|
|
||||||
lastTokenInfo = dlg.getTokenInfo();
|
lastTokenInfo = dlg.getTokenInfo();
|
||||||
|
|
||||||
ExactCard correctedCard = CardDatabaseManager::getInstance()->guessCard({lastTokenInfo.name});
|
ExactCard correctedCard =
|
||||||
|
CardDatabaseManager::getInstance()->guessCard({lastTokenInfo.name, lastTokenInfo.providerId});
|
||||||
if (correctedCard) {
|
if (correctedCard) {
|
||||||
lastTokenInfo.name = correctedCard.getName();
|
lastTokenInfo.name = correctedCard.getName();
|
||||||
lastTokenTableRow = TableZone::clampValidTableRow(2 - correctedCard.getInfo().getTableRow());
|
lastTokenTableRow = TableZone::clampValidTableRow(2 - correctedCard.getInfo().getTableRow());
|
||||||
|
|
@ -1863,6 +1864,7 @@ void Player::actCreateAnotherToken()
|
||||||
Command_CreateToken cmd;
|
Command_CreateToken cmd;
|
||||||
cmd.set_zone("table");
|
cmd.set_zone("table");
|
||||||
cmd.set_card_name(lastTokenInfo.name.toStdString());
|
cmd.set_card_name(lastTokenInfo.name.toStdString());
|
||||||
|
cmd.set_card_provider_id(lastTokenInfo.providerId.toStdString());
|
||||||
cmd.set_color(lastTokenInfo.color.toStdString());
|
cmd.set_color(lastTokenInfo.color.toStdString());
|
||||||
cmd.set_pt(lastTokenInfo.pt.toStdString());
|
cmd.set_pt(lastTokenInfo.pt.toStdString());
|
||||||
cmd.set_annotation(lastTokenInfo.annotation.toStdString());
|
cmd.set_annotation(lastTokenInfo.annotation.toStdString());
|
||||||
|
|
@ -1903,9 +1905,9 @@ void Player::actCreateRelatedCard()
|
||||||
* then let's allow it to be created via "create another token"
|
* then let's allow it to be created via "create another token"
|
||||||
*/
|
*/
|
||||||
if (createRelatedFromRelation(sourceCard, cardRelation) && cardRelation->getCanCreateAnother()) {
|
if (createRelatedFromRelation(sourceCard, cardRelation) && cardRelation->getCanCreateAnother()) {
|
||||||
ExactCard cardInfo =
|
ExactCard relatedCard = CardDatabaseManager::getInstance()->getCardFromSameSet(
|
||||||
CardDatabaseManager::getInstance()->getCard({cardRelation->getName(), sourceCard->getProviderId()});
|
cardRelation->getName(), sourceCard->getCard().getPrinting());
|
||||||
setLastToken(cardInfo.getCardPtr());
|
setLastToken(relatedCard.getCardPtr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2067,13 +2069,18 @@ void Player::createCard(const CardItem *sourceCard,
|
||||||
cmd.set_x(gridPoint.x());
|
cmd.set_x(gridPoint.x());
|
||||||
cmd.set_y(gridPoint.y());
|
cmd.set_y(gridPoint.y());
|
||||||
|
|
||||||
|
ExactCard relatedCard = CardDatabaseManager::getInstance()->getCardFromSameSet(cardInfo->getName(),
|
||||||
|
sourceCard->getCard().getPrinting());
|
||||||
|
|
||||||
switch (attachType) {
|
switch (attachType) {
|
||||||
case CardRelation::DoesNotAttach:
|
case CardRelation::DoesNotAttach:
|
||||||
cmd.set_target_zone("table");
|
cmd.set_target_zone("table");
|
||||||
|
cmd.set_card_provider_id(relatedCard.getPrinting().getUuid().toStdString());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CardRelation::AttachTo:
|
case CardRelation::AttachTo:
|
||||||
cmd.set_target_zone("table"); // We currently only support creating tokens on the table
|
cmd.set_target_zone("table"); // We currently only support creating tokens on the table
|
||||||
|
cmd.set_card_provider_id(relatedCard.getPrinting().getUuid().toStdString());
|
||||||
cmd.set_target_card_id(sourceCard->getId());
|
cmd.set_target_card_id(sourceCard->getId());
|
||||||
cmd.set_target_mode(Command_CreateToken::ATTACH_TO);
|
cmd.set_target_mode(Command_CreateToken::ATTACH_TO);
|
||||||
break;
|
break;
|
||||||
|
|
@ -4166,8 +4173,8 @@ void Player::addRelatedCardActions(const CardItem *card, QMenu *cardMenu)
|
||||||
int index = 0;
|
int index = 0;
|
||||||
QAction *createRelatedCards = nullptr;
|
QAction *createRelatedCards = nullptr;
|
||||||
for (const CardRelation *cardRelation : relatedCards) {
|
for (const CardRelation *cardRelation : relatedCards) {
|
||||||
ExactCard relatedCard =
|
ExactCard relatedCard = CardDatabaseManager::getInstance()->getCardFromSameSet(cardRelation->getName(),
|
||||||
CardDatabaseManager::getInstance()->getCard({cardRelation->getName(), exactCard.getPrinting().getUuid()});
|
card->getCard().getPrinting());
|
||||||
if (!relatedCard) {
|
if (!relatedCard) {
|
||||||
relatedCard = CardDatabaseManager::getInstance()->getCard({cardRelation->getName()});
|
relatedCard = CardDatabaseManager::getInstance()->getCard({cardRelation->getName()});
|
||||||
}
|
}
|
||||||
|
|
@ -4307,7 +4314,9 @@ void Player::setLastToken(CardInfoPtr cardInfo)
|
||||||
.color = cardInfo->getColors().isEmpty() ? QString() : cardInfo->getColors().left(1).toLower(),
|
.color = cardInfo->getColors().isEmpty() ? QString() : cardInfo->getColors().left(1).toLower(),
|
||||||
.pt = cardInfo->getPowTough(),
|
.pt = cardInfo->getPowTough(),
|
||||||
.annotation = SettingsCache::instance().getAnnotateTokens() ? cardInfo->getText() : "",
|
.annotation = SettingsCache::instance().getAnnotateTokens() ? cardInfo->getText() : "",
|
||||||
.destroy = true};
|
.destroy = true,
|
||||||
|
.providerId =
|
||||||
|
SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardInfo->getName())};
|
||||||
|
|
||||||
lastTokenTableRow = TableZone::clampValidTableRow(2 - cardInfo->getTableRow());
|
lastTokenTableRow = TableZone::clampValidTableRow(2 - cardInfo->getTableRow());
|
||||||
aCreateAnotherToken->setText(tr("C&reate another %1 token").arg(lastTokenInfo.name));
|
aCreateAnotherToken->setText(tr("C&reate another %1 token").arg(lastTokenInfo.name));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue