From b6793a5e01f5d9ffb1495756548b50213ac53950 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Sun, 29 Dec 2024 19:25:11 -0800 Subject: [PATCH] fix cards having the wrong printing if rejoin game before card db finishes loading (#5390) * rename cardInfoUpdated to refreshCardInfo and make it public * refresh card infos when db finishes loading --- cockatrice/src/game/cards/abstract_card_item.cpp | 8 ++++---- cockatrice/src/game/cards/abstract_card_item.h | 5 ++++- cockatrice/src/game/zones/card_zone.cpp | 13 +++++++++++++ cockatrice/src/game/zones/card_zone.h | 3 +++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/cockatrice/src/game/cards/abstract_card_item.cpp b/cockatrice/src/game/cards/abstract_card_item.cpp index 336ce6f79..f0daf5eef 100644 --- a/cockatrice/src/game/cards/abstract_card_item.cpp +++ b/cockatrice/src/game/cards/abstract_card_item.cpp @@ -25,7 +25,7 @@ AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, setCacheMode(DeviceCoordinateCache); connect(&SettingsCache::instance(), SIGNAL(displayCardNamesChanged()), this, SLOT(callUpdate())); - cardInfoUpdated(); + refreshCardInfo(); } AbstractCardItem::~AbstractCardItem() @@ -51,7 +51,7 @@ void AbstractCardItem::pixmapUpdated() emit sigPixmapUpdated(); } -void AbstractCardItem::cardInfoUpdated() +void AbstractCardItem::refreshCardInfo() { info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(name, providerId); @@ -185,7 +185,7 @@ void AbstractCardItem::setName(const QString &_name) disconnect(info.data(), nullptr, this, nullptr); name = _name; - cardInfoUpdated(); + refreshCardInfo(); } void AbstractCardItem::setProviderId(const QString &_providerId) @@ -200,7 +200,7 @@ void AbstractCardItem::setProviderId(const QString &_providerId) } providerId = _providerId; - cardInfoUpdated(); + refreshCardInfo(); } void AbstractCardItem::setHovered(bool _hovered) diff --git a/cockatrice/src/game/cards/abstract_card_item.h b/cockatrice/src/game/cards/abstract_card_item.h index 372588150..809f90498 100644 --- a/cockatrice/src/game/cards/abstract_card_item.h +++ b/cockatrice/src/game/cards/abstract_card_item.h @@ -28,11 +28,14 @@ private: qreal realZValue; private slots: void pixmapUpdated(); - void cardInfoUpdated(); void callUpdate() { update(); } + +public slots: + void refreshCardInfo(); + signals: void hovered(AbstractCardItem *card); void showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId); diff --git a/cockatrice/src/game/zones/card_zone.cpp b/cockatrice/src/game/zones/card_zone.cpp index 4dd6b3409..6252bd297 100644 --- a/cockatrice/src/game/zones/card_zone.cpp +++ b/cockatrice/src/game/zones/card_zone.cpp @@ -1,5 +1,6 @@ #include "card_zone.h" +#include "../cards/card_database_manager.h" #include "../cards/card_item.h" #include "../player/player.h" #include "pb/command_move_card.pb.h" @@ -31,6 +32,11 @@ CardZone::CardZone(Player *_p, { if (!isView) player->addZone(this); + + // If we join a game before the card db finishes loading, the cards might have the wrong printings. + // Force refresh all cards in the zone when db finishes loading to fix that. + connect(CardDatabaseManager::getInstance(), &CardDatabase::cardDatabaseLoadingFinished, this, + &CardZone::refreshCardInfos); } CardZone::~CardZone() @@ -119,6 +125,13 @@ bool CardZone::showContextMenu(const QPoint &screenPos) return false; } +void CardZone::refreshCardInfos() +{ + for (const auto &cardItem : cards) { + cardItem->refreshCardInfo(); + } +} + void CardZone::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::RightButton) { diff --git a/cockatrice/src/game/zones/card_zone.h b/cockatrice/src/game/zones/card_zone.h index 6d6cddd81..f3e889113 100644 --- a/cockatrice/src/game/zones/card_zone.h +++ b/cockatrice/src/game/zones/card_zone.h @@ -43,6 +43,9 @@ public slots: void moveAllToZone(); bool showContextMenu(const QPoint &screenPos); +private slots: + void refreshCardInfos(); + public: enum {