[Game] Fix game timer starting twice, not stopping and not resetting correctly. (#6177)

* 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 <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL
2025-09-26 19:28:07 +02:00
committed by GitHub
parent 6187c7268f
commit fad1280185
3 changed files with 5 additions and 12 deletions

View File

@@ -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();
}

View File

@@ -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;

View File

@@ -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);
}