diff --git a/include/project.h b/include/project.h index da5ade6b..b9669641 100644 --- a/include/project.h +++ b/include/project.h @@ -51,6 +51,8 @@ public: QMap mapSecToMapHoverName; QMap mapSectionNameToValue; QMap mapSectionValueToName; + QStringList gfxNames; + QStringList songNames; QStringList itemNames; QStringList flagNames; QStringList varNames; @@ -151,7 +153,6 @@ public: void saveTilesetPalettes(Tileset*); QString defaultSong; - QStringList getSongNames(); QStringList getVisibilities(); QMap getTilesetLabels(); bool readTilesetProperties(); @@ -173,9 +174,10 @@ public: bool readHealLocations(); bool readMiscellaneousConstants(); bool readEventScriptLabels(); + bool readObjEventGfxConstants(); + bool readSongNames(); void loadEventPixmaps(QList objects); - QMap getEventObjGfxConstants(); QString fixPalettePath(QString path); QString fixGraphicPath(QString path); diff --git a/src/core/event.cpp b/src/core/event.cpp index 36b665bc..9dc69845 100644 --- a/src/core/event.cpp +++ b/src/core/event.cpp @@ -71,7 +71,7 @@ Event* Event::createNewObjectEvent(Project *project) Event *event = new Event; event->put("event_group_type", "object_event_group"); event->put("event_type", EventType::Object); - event->put("sprite", project->getEventObjGfxConstants().keys().first()); + event->put("sprite", project->gfxNames.first()); event->put("movement_type", project->movementTypes.first()); if (projectConfig.getObjectEventInConnectionEnabled()) { event->put("in_connection", false); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 57bb3bff..df6682b3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -941,7 +941,9 @@ bool MainWindow::loadDataStructures() { && project->readMiscellaneousConstants() && project->readSpeciesIconPaths() && project->readWildMonData() - && project->readEventScriptLabels(); + && project->readEventScriptLabels() + && project->readObjEventGfxConstants() + && project->readSongNames(); return success && loadProjectCombos(); } @@ -960,7 +962,7 @@ bool MainWindow::loadProjectCombos() { const QSignalBlocker blocker7(ui->comboBox_Type); ui->comboBox_Song->clear(); - ui->comboBox_Song->addItems(project->getSongNames()); + ui->comboBox_Song->addItems(project->songNames); ui->comboBox_Location->clear(); ui->comboBox_Location->addItems(project->mapSectionValueToName.values()); @@ -1954,8 +1956,6 @@ void MainWindow::updateSelectedObjects() { delete button; openScriptButtons.clear(); - QMap event_obj_gfx_constants = editor->project->getEventObjGfxConstants(); - QList frames; bool inConnectionEnabled = projectConfig.getObjectEventInConnectionEnabled(); @@ -2043,7 +2043,7 @@ void MainWindow::updateSelectedObjects() { if (event_type == EventType::Object) { frame->ui->sprite->setVisible(true); - frame->ui->comboBox_sprite->addItems(event_obj_gfx_constants.keys()); + frame->ui->comboBox_sprite->addItems(editor->project->gfxNames); frame->ui->comboBox_sprite->setCurrentIndex(frame->ui->comboBox_sprite->findText(item->event->get("sprite"))); connect(frame->ui->comboBox_sprite, &QComboBox::currentTextChanged, item, &DraggablePixmapItem::set_sprite); connect(frame->ui->comboBox_sprite, &QComboBox::currentTextChanged, this, &MainWindow::markMapEdited); diff --git a/src/mainwindow_scriptapi.cpp b/src/mainwindow_scriptapi.cpp index 95dff4d4..7ce31b4e 100644 --- a/src/mainwindow_scriptapi.cpp +++ b/src/mainwindow_scriptapi.cpp @@ -1078,8 +1078,7 @@ QString MainWindow::getSong() { void MainWindow::setSong(QString song) { if (!this->ui || !this->editor || !this->editor->project) return; - QStringList songs = this->editor->project->getSongNames(); - if (!songs.contains(song)) { + if (!this->editor->project->songNames.contains(song)) { logError(QString("Unknown song '%1'").arg(song)); return; } diff --git a/src/project.cpp b/src/project.cpp index ae739e99..260e2cce 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -2276,25 +2276,31 @@ bool Project::readMetatileBehaviors() { return true; } -QStringList Project::getSongNames() { +bool Project::readSongNames() { QStringList songDefinePrefixes{ "\\bSE_", "\\bMUS_" }; QString filename = "include/constants/songs.h"; fileWatcher.addPath(root + "/" + filename); QMap songDefines = parser.readCDefines(filename, songDefinePrefixes); - QStringList names = songDefines.keys(); - this->defaultSong = names.value(0, "MUS_DUMMY"); - - return names; + this->songNames = songDefines.keys(); + this->defaultSong = this->songNames.value(0, "MUS_DUMMY"); + if (this->songNames.isEmpty()) { + logError(QString("Failed to read song names from %1.").arg(filename)); + return false; + } + return true; } -QMap Project::getEventObjGfxConstants() { - QStringList eventObjGfxPrefixes("\\bOBJ_EVENT_GFX_"); - +bool Project::readObjEventGfxConstants() { + QStringList objEventGfxPrefixes("\\bOBJ_EVENT_GFX_"); QString filename = "include/constants/event_objects.h"; fileWatcher.addPath(root + "/" + filename); - QMap constants = parser.readCDefines(filename, eventObjGfxPrefixes); - - return constants; + QMap gfxDefines = parser.readCDefines(filename, objEventGfxPrefixes); + this->gfxNames = gfxDefines.keys(); + if (this->gfxNames.isEmpty()) { + logError(QString("Failed to read object event graphics constants from %1.").arg(filename)); + return false; + } + return true; } bool Project::readMiscellaneousConstants() { @@ -2424,8 +2430,6 @@ void Project::loadEventPixmaps(QList objects) { return; } - QMap constants = getEventObjGfxConstants(); - fileWatcher.addPaths(QStringList() << root + "/" + "src/data/object_events/object_event_graphics_info_pointers.h" << root + "/" + "src/data/object_events/object_event_graphics_info.h" << root + "/" + "src/data/object_events/object_event_pic_tables.h" diff --git a/src/ui/newmappopup.cpp b/src/ui/newmappopup.cpp index 0d96f42b..2509fe18 100644 --- a/src/ui/newmappopup.cpp +++ b/src/ui/newmappopup.cpp @@ -116,7 +116,7 @@ void NewMapPopup::setDefaultValues(int groupNum, QString mapSec) { ui->comboBox_NewMap_Group->addItems(project->groupNames); ui->comboBox_NewMap_Group->setCurrentText(project->groupNames.at(groupNum)); - ui->comboBox_Song->addItems(project->getSongNames()); + ui->comboBox_Song->addItems(project->songNames); if (existingLayout) { ui->spinBox_NewMap_Width->setValue(project->mapLayouts.value(layoutId)->width.toInt(nullptr, 0));