From 987ebcaa35e452306166143e876d13f012aee298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Mon, 24 Aug 2026 07:29:58 +0200 Subject: [PATCH] [Game] Render custom deck zones in the deck view The in-game deck view now walks custom zones like the standard boards, so cards filed under a user-created zone show up in their zone's card pile instead of disappearing from the view. --- .../src/game_graphics/deckview/deck_view.cpp | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/cockatrice/src/game_graphics/deckview/deck_view.cpp b/cockatrice/src/game_graphics/deckview/deck_view.cpp index 1278737a0..de7726c0f 100644 --- a/cockatrice/src/game_graphics/deckview/deck_view.cpp +++ b/cockatrice/src/game_graphics/deckview/deck_view.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -381,18 +382,25 @@ void DeckViewScene::rebuildTree() addItem(container); } - for (int j = 0; j < currentZone->size(); j++) { - auto *currentCard = dynamic_cast(currentZone->at(j)); - if (!currentCard) { - continue; + // Cards in custom zones nested under a board are regular board cards in-game. + // They are collected recursively and reported with the top-level board zone + // as their origin, so that sideboard plans keep working. + std::function addZoneCards = [&addZoneCards, container, currentZone, + this](const InnerDecklistNode *zone) { + for (int j = 0; j < zone->size(); j++) { + auto *currentCard = dynamic_cast(zone->at(j)); + if (currentCard) { + for (int k = 0; k < currentCard->getNumber(); ++k) { + auto *newCard = new DeckViewCard(container, currentCard->toCardRef(), currentZone->getName()); + container->addCard(newCard); + emit newCardAdded(newCard); + } + } else if (auto *innerZone = dynamic_cast(zone->at(j))) { + addZoneCards(innerZone); + } } - - for (int k = 0; k < currentCard->getNumber(); ++k) { - auto *newCard = new DeckViewCard(container, currentCard->toCardRef(), currentZone->getName()); - container->addCard(newCard); - emit newCardAdded(newCard); - } - } + }; + addZoneCards(currentZone); } }