implement load config on game restart
This commit is contained in:
@@ -8,15 +8,18 @@
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "BuildButtonGrid.h"
|
||||
#include "ConfigLoader.h"
|
||||
#include "GameWorldView.h"
|
||||
#include "HeaderBar.h"
|
||||
#include "SelectedBuildingPanel.h"
|
||||
#include "Simulation.h"
|
||||
#include "Tick.h"
|
||||
#include "VisualsLoader.h"
|
||||
|
||||
MainWindow::MainWindow(Simulation* sim, const GameConfig* config,
|
||||
const VisualsConfig* visuals, QWidget* parent)
|
||||
MainWindow::MainWindow(Simulation* sim, const std::string& configDir, QWidget* parent)
|
||||
: QWidget(parent)
|
||||
, m_configDir(configDir)
|
||||
, m_visuals(VisualsLoader::load(configDir + "/visuals.toml"))
|
||||
, m_sim(sim)
|
||||
{
|
||||
setWindowTitle("Dota Factory");
|
||||
@@ -24,15 +27,15 @@ MainWindow::MainWindow(Simulation* sim, const GameConfig* config,
|
||||
|
||||
m_headerBar = new HeaderBar(this);
|
||||
|
||||
m_gameWorldView = new GameWorldView(sim, config, visuals, this);
|
||||
m_gameWorldView = new GameWorldView(sim, &sim->config(), &m_visuals, this);
|
||||
|
||||
m_bottomPanel = new QWidget(this);
|
||||
QHBoxLayout* bottomLayout = new QHBoxLayout(m_bottomPanel);
|
||||
bottomLayout->setContentsMargins(0, 0, 0, 0);
|
||||
bottomLayout->setSpacing(0);
|
||||
|
||||
m_selectedBuildingPanel = new SelectedBuildingPanel(sim, config, m_bottomPanel);
|
||||
m_buildButtonGrid = new BuildButtonGrid(config, m_bottomPanel);
|
||||
m_selectedBuildingPanel = new SelectedBuildingPanel(sim, &sim->config(), m_bottomPanel);
|
||||
m_buildButtonGrid = new BuildButtonGrid(&sim->config(), m_bottomPanel);
|
||||
|
||||
bottomLayout->addWidget(m_selectedBuildingPanel, 1);
|
||||
bottomLayout->addWidget(m_buildButtonGrid, 1);
|
||||
@@ -128,7 +131,20 @@ void MainWindow::onEscapeMenuRequested()
|
||||
QAbstractButton* clicked = box.clickedButton();
|
||||
if (clicked == restartBtn)
|
||||
{
|
||||
m_sim->reset();
|
||||
try
|
||||
{
|
||||
GameConfig newConfig = ConfigLoader::loadFromDirectory(m_configDir);
|
||||
VisualsConfig newVisuals = VisualsLoader::load(m_configDir + "/visuals.toml");
|
||||
m_visuals = std::move(newVisuals);
|
||||
m_sim->reset(std::move(newConfig));
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
QMessageBox::critical(this, "Config Error",
|
||||
QString("Failed to reload config:\n%1").arg(e.what()));
|
||||
m_gameWorldView->setGameSpeed(prevSpeed);
|
||||
return;
|
||||
}
|
||||
m_gameWorldView->resetForNewGame();
|
||||
}
|
||||
else if (clicked == quitBtn)
|
||||
@@ -159,7 +175,19 @@ void MainWindow::onGameOver()
|
||||
|
||||
if (box.clickedButton() == restartBtn)
|
||||
{
|
||||
m_sim->reset();
|
||||
try
|
||||
{
|
||||
GameConfig newConfig = ConfigLoader::loadFromDirectory(m_configDir);
|
||||
VisualsConfig newVisuals = VisualsLoader::load(m_configDir + "/visuals.toml");
|
||||
m_visuals = std::move(newVisuals);
|
||||
m_sim->reset(std::move(newConfig));
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
QMessageBox::critical(this, "Config Error",
|
||||
QString("Failed to reload config:\n%1").arg(e.what()));
|
||||
return;
|
||||
}
|
||||
m_gameWorldView->resetForNewGame();
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user