From 39b5e3c7582dded0930b3d512815c4fab8c3b1b2 Mon Sep 17 00:00:00 2001 From: Zach Halpern Date: Tue, 3 Dec 2024 20:34:56 -0500 Subject: [PATCH] Address weird crash case --- cockatrice/src/game/player/player.cpp | 36 +++++++++++-------------- cockatrice/src/game/player/player.h | 2 +- cockatrice/src/game/zones/card_zone.cpp | 16 ++++++++--- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index 71402fc61..18c9ff923 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -1693,7 +1693,7 @@ void Player::actCreatePredefinedToken() void Player::actCreateRelatedCard() { - CardItem *sourceCard = game->getActiveCard(); + const CardItem *sourceCard = game->getActiveCard(); if (!sourceCard) { return; } @@ -1714,7 +1714,7 @@ void Player::actCreateRelatedCard() void Player::actCreateAllRelatedCards() { - CardItem *sourceCard = game->getActiveCard(); + const CardItem *sourceCard = game->getActiveCard(); if (!sourceCard) { return; } @@ -3247,11 +3247,10 @@ void Player::actSetPT() void Player::actDrawArrow() { - if (!game->getActiveCard()) { - return; + auto *card = game->getActiveCard(); + if (card) { + card->drawArrow(Qt::red); } - - game->getActiveCard()->drawArrow(Qt::red); } void Player::actIncP() @@ -3436,30 +3435,27 @@ void Player::actCardCounterTrigger() void Player::actPlay() { - if (!game->getActiveCard()) { - return; + auto *card = game->getActiveCard(); + if (card) { + const bool cipt = card->getInfo() ? card->getInfo()->getCipt() : false; + playCard(card, false, cipt); } - - bool cipt = game->getActiveCard()->getInfo() ? game->getActiveCard()->getInfo()->getCipt() : false; - playCard(game->getActiveCard(), false, cipt); } -void Player::actHide() +void Player::actHide() const { - if (!game->getActiveCard()) { - return; + auto *card = game->getActiveCard(); + if (card) { + card->getZone()->removeCard(card); } - - game->getActiveCard()->getZone()->removeCard(game->getActiveCard()); } void Player::actPlayFacedown() { - if (!game->getActiveCard()) { - return; + auto *card = game->getActiveCard(); + if (card) { + playCard(card, true, false); } - - playCard(game->getActiveCard(), true, false); } void Player::actReveal(QAction *action) diff --git a/cockatrice/src/game/player/player.h b/cockatrice/src/game/player/player.h index 7f744a909..c013d1a16 100644 --- a/cockatrice/src/game/player/player.h +++ b/cockatrice/src/game/player/player.h @@ -222,7 +222,7 @@ private slots: void actFlowT(); void actSetAnnotation(); void actPlay(); - void actHide(); + void actHide() const; void actPlayFacedown(); void actReveal(QAction *action); void refreshShortcuts(); diff --git a/cockatrice/src/game/zones/card_zone.cpp b/cockatrice/src/game/zones/card_zone.cpp index ad0175506..95970a383 100644 --- a/cockatrice/src/game/zones/card_zone.cpp +++ b/cockatrice/src/game/zones/card_zone.cpp @@ -130,8 +130,13 @@ void CardZone::mousePressEvent(QGraphicsSceneMouseEvent *event) event->ignore(); } -void CardZone::addCard(CardItem *card, bool reorganize, int x, int y) +void CardZone::addCard(CardItem *card, const bool reorganize, const int x, const int y) { + if (!card) { + qDebug() << "CardZone::addCard() card is null(???)"; + return; + } + for (auto *view : views) { if ((x <= view->getCards().size()) || (view->getNumberCards() == -1)) { view->addCard(new CardItem(player, nullptr, card->getName(), card->getProviderId(), card->getId()), @@ -153,7 +158,7 @@ CardItem *CardZone::getCard(int cardId, const QString &cardName) CardItem *c = cards.findCard(cardId); if (!c) { qDebug() << "CardZone::getCard: card id=" << cardId << "not found"; - return 0; + return nullptr; } // If the card's id is -1, this zone is invisible, // so we need to give the card an id and a name as it comes out. @@ -179,7 +184,7 @@ CardItem *CardZone::takeCard(int position, int cardId, bool /*canResize*/) position = 0; } if (position >= cards.size()) - return 0; + return nullptr; CardItem *c = cards.takeAt(position); @@ -196,6 +201,11 @@ CardItem *CardZone::takeCard(int position, int cardId, bool /*canResize*/) void CardZone::removeCard(CardItem *card) { + if (!card) { + qDebug() << "CardZone::removeCard: card is null(???)"; + return; + } + cards.removeOne(card); reorganizeCards(); emit cardCountChanged();