From 891e7bf6e47921711d5cdb205c27e4ad2b4309f0 Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:58:48 +0200 Subject: [PATCH] [TabGame/PlayerManager] Handle concession properly. (#6178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Handle concession properly. Took 57 minutes Took 38 seconds Took 18 seconds Took 21 seconds * Set text and enable/disable on game start/stop. (Does not fix the translation issue but at least disables the button.) Took 51 minutes --------- Co-authored-by: Lukas BrĂ¼bach --- cockatrice/src/game/player/player_manager.cpp | 8 -------- cockatrice/src/tabs/tab_game.cpp | 13 ++++++++++++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/cockatrice/src/game/player/player_manager.cpp b/cockatrice/src/game/player/player_manager.cpp index 8fa7bde78..d8c12cee6 100644 --- a/cockatrice/src/game/player/player_manager.cpp +++ b/cockatrice/src/game/player/player_manager.cpp @@ -72,14 +72,6 @@ Player *PlayerManager::getPlayer(int playerId) const void PlayerManager::onPlayerConceded(int playerId, bool conceded) { - // GameEventHandler cares about this for sending the concede/unconcede commands - if (isLocalPlayer(playerId)) { - if (conceded) { - emit activeLocalPlayerConceded(); - } else { - emit activeLocalPlayerUnconceded(); - } - } // Everything else cares about this if (conceded) { emit playerConceded(playerId); diff --git a/cockatrice/src/tabs/tab_game.cpp b/cockatrice/src/tabs/tab_game.cpp index 3bd857428..1a4cfe673 100644 --- a/cockatrice/src/tabs/tab_game.cpp +++ b/cockatrice/src/tabs/tab_game.cpp @@ -150,6 +150,7 @@ void TabGame::connectToPlayerManager() connect(game->getPlayerManager(), &PlayerManager::playerRemoved, this, &TabGame::processPlayerLeave); // update menu text when player concedes so that "concede" gets updated to "unconcede" connect(game->getPlayerManager(), &PlayerManager::playerConceded, this, &TabGame::retranslateUi); + connect(game->getPlayerManager(), &PlayerManager::playerUnconceded, this, &TabGame::retranslateUi); } void TabGame::connectToGameEventHandler() @@ -492,13 +493,14 @@ void TabGame::actConcede() if (QMessageBox::question(this, tr("Concede"), tr("Are you sure you want to concede this game?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) return; + emit game->getPlayerManager()->activeLocalPlayerConceded(); player->setConceded(true); } else { if (QMessageBox::question(this, tr("Unconcede"), tr("You have already conceded. Do you want to return to this game?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) return; - + emit game->getPlayerManager()->activeLocalPlayerUnconceded(); player->setConceded(false); } } @@ -800,6 +802,9 @@ void TabGame::startGame(bool _resuming) playerListWidget->setGameStarted(true, game->getGameState()->isResuming()); game->getGameMetaInfo()->setStarted(true); static_cast(gameView->scene())->rearrange(); + + aConcede->setText(tr("&Concede")); + aConcede->setEnabled(true); } void TabGame::stopGame() @@ -816,6 +821,9 @@ void TabGame::stopGame() playerListWidget->setGameStarted(false, false); scene->clearViews(); + + aConcede->setText(tr("&Concede")); + aConcede->setEnabled(false); } void TabGame::closeGame() @@ -935,6 +943,9 @@ void TabGame::createMenuItems() connect(aGameInfo, &QAction::triggered, this, &TabGame::actGameInfo); aConcede = new QAction(this); connect(aConcede, &QAction::triggered, this, &TabGame::actConcede); + if (!game->getGameMetaInfo()->started()) { + aConcede->setEnabled(false); + } connect(game->getPlayerManager(), &PlayerManager::activeLocalPlayerConceded, game->getGameEventHandler(), &GameEventHandler::handleActiveLocalPlayerConceded); connect(game->getPlayerManager(), &PlayerManager::activeLocalPlayerUnconceded, game->getGameEventHandler(),