fix bug where game simulation continues while dialog is shown

This commit is contained in:
2026-06-13 14:31:03 +02:00
parent 49f7129bd5
commit ed17664ef1
3 changed files with 11 additions and 0 deletions

View File

@@ -1432,6 +1432,11 @@ double GameWorldView::gameSpeed() const
return m_gameSpeedMultiplier; return m_gameSpeedMultiplier;
} }
void GameWorldView::resetFrameTimer()
{
m_frameTimer.restart();
}
void GameWorldView::setGameSpeed(double multiplier) void GameWorldView::setGameSpeed(double multiplier)
{ {
m_gameSpeedMultiplier = multiplier; m_gameSpeedMultiplier = multiplier;

View File

@@ -56,6 +56,7 @@ signals:
public: public:
double gameSpeed() const; double gameSpeed() const;
void resetFrameTimer();
public slots: public slots:
void enterBuilderMode(BuildingType type); void enterBuilderMode(BuildingType type);

View File

@@ -188,6 +188,7 @@ void MainWindow::handleEvent(std::shared_ptr<const SchematicChoicesAvailableEven
m_sim->applySchematicChoice(dialog.getChosenIndex()); m_sim->applySchematicChoice(dialog.getChosenIndex());
m_gameWorldView->setGameSpeed(prevSpeed); m_gameWorldView->setGameSpeed(prevSpeed);
m_gameWorldView->resetFrameTimer();
} }
void MainWindow::onEscapeMenuRequested() void MainWindow::onEscapeMenuRequested()
@@ -218,6 +219,7 @@ void MainWindow::onEscapeMenuRequested()
QMessageBox::critical(this, tr("Config Error"), QMessageBox::critical(this, tr("Config Error"),
tr("Failed to reload config:\n%1").arg(e.what())); tr("Failed to reload config:\n%1").arg(e.what()));
m_gameWorldView->setGameSpeed(prevSpeed); m_gameWorldView->setGameSpeed(prevSpeed);
m_gameWorldView->resetFrameTimer();
return; return;
} }
m_gameWorldView->resetForNewGame(); m_gameWorldView->resetForNewGame();
@@ -229,6 +231,7 @@ void MainWindow::onEscapeMenuRequested()
else else
{ {
m_gameWorldView->setGameSpeed(prevSpeed); m_gameWorldView->setGameSpeed(prevSpeed);
m_gameWorldView->resetFrameTimer();
} }
} }
@@ -241,6 +244,7 @@ void MainWindow::onLayoutDialogRequested(BuildingId shipyardId)
if (!b) if (!b)
{ {
m_gameWorldView->setGameSpeed(prevSpeed); m_gameWorldView->setGameSpeed(prevSpeed);
m_gameWorldView->resetFrameTimer();
return; return;
} }
@@ -272,6 +276,7 @@ void MainWindow::onLayoutDialogRequested(BuildingId shipyardId)
} }
m_gameWorldView->setGameSpeed(prevSpeed); m_gameWorldView->setGameSpeed(prevSpeed);
m_gameWorldView->resetFrameTimer();
} }
void MainWindow::onGameOver() void MainWindow::onGameOver()