diff --git a/include/editor.h b/include/editor.h index c57b87c8..7aa06113 100644 --- a/include/editor.h +++ b/include/editor.h @@ -212,6 +212,7 @@ signals: void currentMetatilesSelectionChanged(); void mapRulerStatusChanged(const QString &); void editedMapData(); + void tilesetUpdated(QString); }; #endif // EDITOR_H diff --git a/include/scripting.h b/include/scripting.h index 570e9c66..d5d04c28 100644 --- a/include/scripting.h +++ b/include/scripting.h @@ -13,6 +13,7 @@ enum CallbackType { OnProjectClosed, OnBlockChanged, OnMapOpened, + OnTilesetUpdated, }; class Scripting @@ -32,6 +33,7 @@ public: static void cb_ProjectClosed(QString projectPath); static void cb_MetatileChanged(int x, int y, Block prevBlock, Block newBlock); static void cb_MapOpened(QString mapName); + static void cb_TilesetUpdated(QString tilesetName); static bool tryErrorJS(QJSValue js); private: diff --git a/include/ui/metatileselector.h b/include/ui/metatileselector.h index ec1fc790..93e1b7d1 100644 --- a/include/ui/metatileselector.h +++ b/include/ui/metatileselector.h @@ -31,6 +31,8 @@ public: void setExternalSelection(int, int, QList, QList>); QPoint getMetatileIdCoordsOnWidget(uint16_t); void setMap(Map*); + Tileset *primaryTileset; + Tileset *secondaryTileset; protected: void mousePressEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*); @@ -41,8 +43,6 @@ private: bool externalSelection; int numMetatilesWide; Map *map; - Tileset *primaryTileset; - Tileset *secondaryTileset; QList *selectedMetatiles; QList> *selectedCollisions; int externalSelectionWidth; diff --git a/src/editor.cpp b/src/editor.cpp index 2362321c..6f78f776 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -1361,6 +1361,12 @@ void Editor::displayMetatileSelector() { metatile_selector_item->select(0); } else { metatile_selector_item->setMap(map); + if (metatile_selector_item->primaryTileset + && metatile_selector_item->primaryTileset->name != map->layout->tileset_primary->name) + emit tilesetUpdated(map->layout->tileset_primary->name); + if (metatile_selector_item->secondaryTileset + && metatile_selector_item->secondaryTileset->name != map->layout->tileset_secondary->name) + emit tilesetUpdated(map->layout->tileset_secondary->name); metatile_selector_item->setTilesets(map->layout->tileset_primary, map->layout->tileset_secondary); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 61c7c8ce..d46e30f5 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -258,6 +258,7 @@ void MainWindow::initEditor() { connect(this->editor, &Editor::wildMonDataChanged, this, &MainWindow::onWildMonDataChanged); connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged); connect(this->editor, &Editor::editedMapData, this, &MainWindow::markMapEdited); + connect(this->editor, &Editor::tilesetUpdated, this, &Scripting::cb_TilesetUpdated); connect(ui->toolButton_Open_Scripts, &QToolButton::pressed, this->editor, &Editor::openMapScripts); connect(ui->actionOpen_Project_in_Text_Editor, &QAction::triggered, this->editor, &Editor::openProjectInTextEditor); @@ -2701,12 +2702,14 @@ void MainWindow::onTilesetsSaved(QString primaryTilesetLabel, QString secondaryT bool updated = false; if (primaryTilesetLabel == this->editor->map->layout->tileset_primary_label) { this->editor->updatePrimaryTileset(primaryTilesetLabel, true); + Scripting::cb_TilesetUpdated(primaryTilesetLabel); updated = true; } else { this->editor->project->getTileset(primaryTilesetLabel, true); } if (secondaryTilesetLabel == this->editor->map->layout->tileset_secondary_label) { this->editor->updateSecondaryTileset(secondaryTilesetLabel, true); + Scripting::cb_TilesetUpdated(secondaryTilesetLabel); updated = true; } else { this->editor->project->getTileset(secondaryTilesetLabel, true); diff --git a/src/scripting.cpp b/src/scripting.cpp index 7fb41d8f..042ee157 100644 --- a/src/scripting.cpp +++ b/src/scripting.cpp @@ -6,6 +6,7 @@ QMap callbackFunctions = { {OnProjectClosed, "onProjectClosed"}, {OnBlockChanged, "onBlockChanged"}, {OnMapOpened, "onMapOpened"}, + {OnTilesetUpdated, "onTilesetUpdated"}, }; Scripting *instance = nullptr; @@ -140,6 +141,15 @@ void Scripting::cb_MapOpened(QString mapName) { instance->invokeCallback(OnMapOpened, args); } +void Scripting::cb_TilesetUpdated(QString tilesetName) { + if (!instance) return; + + QJSValueList args { + tilesetName, + }; + instance->invokeCallback(OnTilesetUpdated, args); +} + QJSValue Scripting::fromBlock(Block block) { QJSValue obj = instance->engine->newObject(); obj.setProperty("metatileId", block.metatileId);