From 096a66067d0820b5fcc3981cf2a20b59f08b6069 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 22 Mar 2022 23:49:49 -0400 Subject: [PATCH] Automatically disable encounters if JSON is missing --- include/mainwindow.h | 1 + include/project.h | 1 + src/mainwindow.cpp | 10 +++++++--- src/project.cpp | 8 ++++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/include/mainwindow.h b/include/mainwindow.h index b447e816..a9a5deb9 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -418,6 +418,7 @@ private: void initShortcuts(); void initExtraShortcuts(); void setProjectSpecificUIVisibility(); + void setWildEncountersUIEnabled(bool enabled); void loadUserSettings(); void applyMapListFilter(QString filterText); void restoreWindowState(); diff --git a/include/project.h b/include/project.h index 6fac21c9..a081733b 100644 --- a/include/project.h +++ b/include/project.h @@ -244,6 +244,7 @@ signals: void reloadProject(); void uncheckMonitorFilesAction(); void mapCacheCleared(); + void disableWildEncountersUI(); }; #endif // PROJECT_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 33784144..b05d4b9c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -349,12 +349,15 @@ void MainWindow::markMapEdited() { } } +void MainWindow::setWildEncountersUIEnabled(bool enabled) { + ui->actionUse_Encounter_Json->setChecked(enabled); + ui->mainTabBar->setTabEnabled(4, enabled); +} + void MainWindow::setProjectSpecificUIVisibility() { - ui->actionUse_Encounter_Json->setChecked(projectConfig.getEncounterJsonActive()); ui->actionUse_Poryscript->setChecked(projectConfig.getUsePoryScript()); - - ui->mainTabBar->setTabEnabled(4, projectConfig.getEncounterJsonActive()); + this->setWildEncountersUIEnabled(projectConfig.getEncounterJsonActive()); switch (projectConfig.getBaseGameVersion()) { @@ -515,6 +518,7 @@ bool MainWindow::openProject(QString dir) { editor->project = new Project(this); QObject::connect(editor->project, &Project::reloadProject, this, &MainWindow::on_action_Reload_Project_triggered); QObject::connect(editor->project, &Project::mapCacheCleared, this, &MainWindow::onMapCacheCleared); + QObject::connect(editor->project, &Project::disableWildEncountersUI, [this]() { this->setWildEncountersUIEnabled(false); }); QObject::connect(editor->project, &Project::uncheckMonitorFilesAction, [this]() { ui->actionMonitor_Project_Files->setChecked(false); }); on_actionMonitor_Project_Files_triggered(porymapConfig.getMonitorFiles()); editor->project->set_root(dir); diff --git a/src/project.cpp b/src/project.cpp index 6bbd4fb9..797ca4f1 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -1723,8 +1723,12 @@ bool Project::readWildMonData() { OrderedJson::object wildMonObj; if (!parser.tryParseOrderedJsonFile(&wildMonObj, wildMonJsonFilepath)) { - logError(QString("Failed to read wild encounters from %1").arg(wildMonJsonFilepath)); - return false; + // Failing to read wild encounters data is not a critical error, just disable the + // encounter editor and log a warning in case the user intended to have this data. + projectConfig.setEncounterJsonActive(false); + emit disableWildEncountersUI(); + logWarn(QString("Failed to read wild encounters from %1").arg(wildMonJsonFilepath)); + return true; } for (OrderedJson subObjectRef : wildMonObj["wild_encounter_groups"].array_items()) {