From 6187c7268fcb576f462d2d62350e12a96e7015ff Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Fri, 26 Sep 2025 10:12:20 -0700 Subject: [PATCH 1/3] [Game] Fix double concede in log (#6179) --- cockatrice/src/game/game_event_handler.cpp | 4 ++++ cockatrice/src/game/game_event_handler.h | 2 ++ cockatrice/src/tabs/tab_game.cpp | 11 +++-------- cockatrice/src/tabs/tab_game.h | 1 - 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cockatrice/src/game/game_event_handler.cpp b/cockatrice/src/game/game_event_handler.cpp index ef5ca96db..e46b4f0fe 100644 --- a/cockatrice/src/game/game_event_handler.cpp +++ b/cockatrice/src/game/game_event_handler.cpp @@ -340,6 +340,8 @@ void GameEventHandler::eventPlayerPropertiesChanged(const Event_PlayerProperties while (playerIterator.hasNext()) playerIterator.next().value()->updateZones(); + emit logConcede(eventPlayerId); + break; } case GameEventContext::UNCONCEDE: { @@ -349,6 +351,8 @@ void GameEventHandler::eventPlayerPropertiesChanged(const Event_PlayerProperties while (playerIterator.hasNext()) playerIterator.next().value()->updateZones(); + emit logUnconcede(eventPlayerId); + break; } case GameEventContext::DECK_SELECT: { diff --git a/cockatrice/src/game/game_event_handler.h b/cockatrice/src/game/game_event_handler.h index 251273dc7..4270bed74 100644 --- a/cockatrice/src/game/game_event_handler.h +++ b/cockatrice/src/game/game_event_handler.h @@ -122,6 +122,8 @@ signals: void logGameClosed(); void logActivePlayer(Player *activePlayer); void logActivePhaseChanged(int activePhase); + void logConcede(int playerId); + void logUnconcede(int playerId); }; #endif // COCKATRICE_GAME_EVENT_HANDLER_H diff --git a/cockatrice/src/tabs/tab_game.cpp b/cockatrice/src/tabs/tab_game.cpp index c8ea5e7fe..7e345472d 100644 --- a/cockatrice/src/tabs/tab_game.cpp +++ b/cockatrice/src/tabs/tab_game.cpp @@ -78,7 +78,6 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay) connectToGameEventHandler(); connectPlayerListToGameEventHandler(); connectMessageLogToGameEventHandler(); - connectMessageLogToPlayerHandler(); retranslateUi(); connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this, @@ -124,7 +123,6 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, connectToGameEventHandler(); connectPlayerListToGameEventHandler(); connectMessageLogToGameEventHandler(); - connectMessageLogToPlayerHandler(); retranslateUi(); connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this, @@ -206,16 +204,13 @@ void TabGame::connectMessageLogToGameEventHandler() connect(game->getGameEventHandler(), &GameEventHandler::logTurnReversed, messageLog, &MessageLogWidget::logReverseTurn); + connect(game->getGameEventHandler(), &GameEventHandler::logConcede, messageLog, &MessageLogWidget::logConcede); + connect(game->getGameEventHandler(), &GameEventHandler::logUnconcede, messageLog, &MessageLogWidget::logUnconcede); + connect(game->getGameEventHandler(), &GameEventHandler::logGameClosed, messageLog, &MessageLogWidget::logGameClosed); } -void TabGame::connectMessageLogToPlayerHandler() -{ - connect(game->getPlayerManager(), &PlayerManager::playerConceded, messageLog, &MessageLogWidget::logConcede); - connect(game->getPlayerManager(), &PlayerManager::playerUnconceded, messageLog, &MessageLogWidget::logUnconcede); -} - void TabGame::connectPlayerListToGameEventHandler() { connect(game->getGameEventHandler(), &GameEventHandler::playerJoined, playerListWidget, diff --git a/cockatrice/src/tabs/tab_game.h b/cockatrice/src/tabs/tab_game.h index 660e64506..a0aeb8138 100644 --- a/cockatrice/src/tabs/tab_game.h +++ b/cockatrice/src/tabs/tab_game.h @@ -168,7 +168,6 @@ public: void connectToPlayerManager(); void connectToGameEventHandler(); void connectMessageLogToGameEventHandler(); - void connectMessageLogToPlayerHandler(); void connectPlayerListToGameEventHandler(); TabGame(TabSupervisor *_tabSupervisor, GameReplay *replay); ~TabGame() override; From fad1280185cfb5148d847a6cbc317a04f5ee2df6 Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:28:07 +0200 Subject: [PATCH 2/3] [Game] Fix game timer starting twice, not stopping and not resetting correctly. (#6177) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix timer starting twice, not stopping and not resetting correctly. Took 39 minutes * Don't stop/start, just start. Took 29 minutes * Fix build. Took 2 minutes --------- Co-authored-by: Lukas BrĂ¼bach --- cockatrice/src/game/game_state.cpp | 13 +++++-------- cockatrice/src/game/game_state.h | 3 --- cockatrice/src/tabs/tab_game.cpp | 1 - 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/cockatrice/src/game/game_state.cpp b/cockatrice/src/game/game_state.cpp index 04248819f..854878b92 100644 --- a/cockatrice/src/game/game_state.cpp +++ b/cockatrice/src/game/game_state.cpp @@ -15,6 +15,10 @@ GameState::GameState(AbstractGame *parent, clients(_clients), gameStateKnown(_gameStateKnown), resuming(_resuming), currentPhase(_currentPhase), activePlayer(-1), gameClosed(_gameClosed) { + gameTimer = new QTimer(this); + gameTimer->setInterval(1000); + connect(gameTimer, &QTimer::timeout, this, &GameState::incrementGameTime); + gameTimer->start(); } void GameState::incrementGameTime() @@ -24,6 +28,7 @@ void GameState::incrementGameTime() void GameState::setGameTime(int _secondsElapsed) { + secondsElapsed = _secondsElapsed; int seconds = _secondsElapsed; int minutes = seconds / 60; seconds -= minutes * 60; @@ -33,12 +38,4 @@ void GameState::setGameTime(int _secondsElapsed) emit updateTimeElapsedLabel(QString::number(hours).rightJustified(2, '0') + ":" + QString::number(minutes).rightJustified(2, '0') + ":" + QString::number(seconds).rightJustified(2, '0')); -} - -void GameState::startGameTimer() -{ - gameTimer = new QTimer(this); - gameTimer->setInterval(1000); - connect(gameTimer, &QTimer::timeout, this, &GameState::incrementGameTime); - gameTimer->start(); } \ No newline at end of file diff --git a/cockatrice/src/game/game_state.h b/cockatrice/src/game/game_state.h index 63d38ebb7..6edf579b0 100644 --- a/cockatrice/src/game/game_state.h +++ b/cockatrice/src/game/game_state.h @@ -91,15 +91,12 @@ public: void onStartedChanged(bool _started) { if (_started) { - startGameTimer(); emit gameStarted(_started); } else { emit gameStopped(); } } - void startGameTimer(); - void setGameStateKnown(bool known) { gameStateKnown = known; diff --git a/cockatrice/src/tabs/tab_game.cpp b/cockatrice/src/tabs/tab_game.cpp index 7e345472d..3bd857428 100644 --- a/cockatrice/src/tabs/tab_game.cpp +++ b/cockatrice/src/tabs/tab_game.cpp @@ -1277,7 +1277,6 @@ void TabGame::createMessageDock(bool bReplay) timeElapsedLabel = new QLabel; timeElapsedLabel->setAlignment(Qt::AlignCenter); connect(game->getGameState(), &GameState::updateTimeElapsedLabel, this, &TabGame::updateTimeElapsedLabel); - game->getGameState()->startGameTimer(); messageLogLayout->addWidget(timeElapsedLabel); } 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 3/3] [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(),