[Replay] Fix cards accumulating in zone view when rewinding (#7357)

* [Replay] Fix cards accumulating in zone view when rewinding

* rename method
This commit is contained in:
RickyRister 2026-10-02 08:17:34 -07:00 • committed by GitHub
parent ecd955bc60
commit ffcb9094ca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 31 additions and 3 deletions

View file

@ -154,6 +154,14 @@ void ZoneViewZoneLogic::removeCard(int position, bool toNewZone)
reorganizeCards();
}
void ZoneViewZoneLogic::clearCards()
{
for (auto card : cards) {
card->deleteLater();
}
cards.clear();
}
void ZoneViewZoneLogic::setWriteableRevealZone(bool _writeableRevealZone)
{

View file

@ -41,6 +41,10 @@ public:
bool prepareAddCard(int x);
void removeCard(int position, bool toNewZone);
void updateCardIds(CardAction action);
/** @brief Removes all cards from the view, without touching anything else. Used in replay rewind */
void clearCards();
int getNumberCards() const
{
return numberCards;

View file

@ -735,6 +735,16 @@ void GameScene::clearViews()
}
}
void GameScene::emptyActiveViews()
{
for (auto zoneView : zoneViews) {
auto logic = qobject_cast<ZoneViewZoneLogic *>(zoneView->getZone()->getLogic());
if (!logic->getRevealZone()) {
logic->clearCards();
}
}
}
/**
* @brief Closes the most recently added zone view.
*/

View file

@ -227,6 +227,9 @@ public slots:
/** @brief Closes all zone views. */
void clearViews();
/** @brief Empties the contents of all non-reveal zone views. Used for replay rewinding */
void emptyActiveViews();
/** @brief Closes the most recently added zone view. */
void closeMostRecentZoneView();
QTransform getViewTransform() const;

View file

@ -259,7 +259,7 @@ void TabGame::linkCardToChat(const QString &cardName)
sayEdit->setFocus();
}
void TabGame::resetChatAndPhase()
void TabGame::resetForRewind()
{
// reset chat log
messageLog->clearChat();
@ -267,6 +267,9 @@ void TabGame::resetChatAndPhase()
// reset phase markers
game->getGameState()->setCurrentPhase(-1);
// reset view zones
static_cast<GameScene *>(gameView->scene())->emptyActiveViews();
// reset spectator state so the replay can rebuild it from the start
game->getPlayerManager()->clearSpectators();
playerListWidget->clearSpectators();
@ -1270,7 +1273,7 @@ void TabGame::createReplayDock(GameReplay *replay)
replayDock->setWidget(replayWidget);
replayDock->setFloating(false);
connect(replayWidget, &ReplayWidget::rewound, this, &TabGame::resetChatAndPhase);
connect(replayWidget, &ReplayWidget::rewound, this, &TabGame::resetForRewind);
connect(replayWidget, &ReplayWidget::eventReplayed, game->getGameEventHandler(),
[this](const auto &event, auto options) {
game->getGameEventHandler()->processGameEventContainer(event, nullptr, options);

View file

@ -204,7 +204,7 @@ public:
public slots:
void viewCardInfo(const CardRef &cardRef = {}) const;
void resetChatAndPhase();
void resetForRewind();
void updateTimeElapsedLabel(QString newTime);
void addPlayerToAutoCompleteList(QString playerName);
void removePlayerFromAutoCompleteList(QString playerName);