From 8170a428e1aeb65e81e94041643e08ad0d73ce0f Mon Sep 17 00:00:00 2001 From: RickyRister Date: Sun, 15 Dec 2024 21:00:01 -0800 Subject: [PATCH] refactor --- cockatrice/src/game/player/player.cpp | 34 +++++++++++++-------------- cockatrice/src/game/player/player.h | 4 +++- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index 3d528acab..cebb1c17a 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -3479,7 +3479,7 @@ static bool isUnwritableRevealZone(CardZone *zone) return false; } -void Player::actPlay() +void Player::playSelectedCards(const bool faceDown) { QList selectedCards; for (const auto &item : scene()->selectedItems()) { @@ -3487,17 +3487,30 @@ void Player::actPlay() selectedCards.append(card); } + // CardIds will get shuffled downwards when cards leave the deck. + // We need to iterate through the cards in reverse order so cardIds don't get changed out from under us as we play + // out the cards one-by-one. std::sort(selectedCards.begin(), selectedCards.end(), [](const auto &card1, const auto &card2) { return card1->getId() > card2->getId(); }); for (auto &card : selectedCards) { if (card && !isUnwritableRevealZone(card->getZone())) { - const bool cipt = card->getInfo() ? card->getInfo()->getCipt() : false; - playCard(card, false, cipt); + const bool cipt = !faceDown && card->getInfo() ? card->getInfo()->getCipt() : false; + playCard(card, faceDown, cipt); } } } +void Player::actPlay() +{ + playSelectedCards(false); +} + +void Player::actPlayFacedown() +{ + playSelectedCards(true); +} + void Player::actHide() { for (const auto &item : scene()->selectedItems()) { @@ -3508,21 +3521,6 @@ void Player::actHide() } } -void Player::actPlayFacedown() -{ - QList selectedCards; - for (const auto &item : scene()->selectedItems()) { - auto *card = static_cast(item); - selectedCards.append(card); - } - - for (auto &card : selectedCards) { - if (card && !isUnwritableRevealZone(card->getZone())) { - playCard(card, true, false); - } - } -} - void Player::actReveal(QAction *action) { const int otherPlayerId = action->data().toInt(); diff --git a/cockatrice/src/game/player/player.h b/cockatrice/src/game/player/player.h index 484e509d7..14a6ed5aa 100644 --- a/cockatrice/src/game/player/player.h +++ b/cockatrice/src/game/player/player.h @@ -224,8 +224,8 @@ private slots: void actFlowT(); void actSetAnnotation(); void actPlay(); - void actHide(); void actPlayFacedown(); + void actHide(); void actReveal(QAction *action); void refreshShortcuts(); @@ -323,6 +323,8 @@ private: void addPlayerToList(QMenu *playerList, Player *player); static void removePlayerFromList(QMenu *playerList, Player *player); + void playSelectedCards(bool faceDown = false); + QRectF bRect; QMap counters;