Add onTilesetUpdated to scripting callbacks

This commit is contained in:
GriffinR 2021-11-30 17:24:46 -05:00 committed by huderlem
parent 5a5d16bdc6
commit 6bae415fc1
6 changed files with 24 additions and 2 deletions

View file

@ -212,6 +212,7 @@ signals:
void currentMetatilesSelectionChanged(); void currentMetatilesSelectionChanged();
void mapRulerStatusChanged(const QString &); void mapRulerStatusChanged(const QString &);
void editedMapData(); void editedMapData();
void tilesetUpdated(QString);
}; };
#endif // EDITOR_H #endif // EDITOR_H

View file

@ -13,6 +13,7 @@ enum CallbackType {
OnProjectClosed, OnProjectClosed,
OnBlockChanged, OnBlockChanged,
OnMapOpened, OnMapOpened,
OnTilesetUpdated,
}; };
class Scripting class Scripting
@ -32,6 +33,7 @@ public:
static void cb_ProjectClosed(QString projectPath); static void cb_ProjectClosed(QString projectPath);
static void cb_MetatileChanged(int x, int y, Block prevBlock, Block newBlock); static void cb_MetatileChanged(int x, int y, Block prevBlock, Block newBlock);
static void cb_MapOpened(QString mapName); static void cb_MapOpened(QString mapName);
static void cb_TilesetUpdated(QString tilesetName);
static bool tryErrorJS(QJSValue js); static bool tryErrorJS(QJSValue js);
private: private:

View file

@ -31,6 +31,8 @@ public:
void setExternalSelection(int, int, QList<uint16_t>, QList<QPair<uint16_t, uint16_t>>); void setExternalSelection(int, int, QList<uint16_t>, QList<QPair<uint16_t, uint16_t>>);
QPoint getMetatileIdCoordsOnWidget(uint16_t); QPoint getMetatileIdCoordsOnWidget(uint16_t);
void setMap(Map*); void setMap(Map*);
Tileset *primaryTileset;
Tileset *secondaryTileset;
protected: protected:
void mousePressEvent(QGraphicsSceneMouseEvent*); void mousePressEvent(QGraphicsSceneMouseEvent*);
void mouseMoveEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*);
@ -41,8 +43,6 @@ private:
bool externalSelection; bool externalSelection;
int numMetatilesWide; int numMetatilesWide;
Map *map; Map *map;
Tileset *primaryTileset;
Tileset *secondaryTileset;
QList<uint16_t> *selectedMetatiles; QList<uint16_t> *selectedMetatiles;
QList<QPair<uint16_t, uint16_t>> *selectedCollisions; QList<QPair<uint16_t, uint16_t>> *selectedCollisions;
int externalSelectionWidth; int externalSelectionWidth;

View file

@ -1361,6 +1361,12 @@ void Editor::displayMetatileSelector() {
metatile_selector_item->select(0); metatile_selector_item->select(0);
} else { } else {
metatile_selector_item->setMap(map); 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); metatile_selector_item->setTilesets(map->layout->tileset_primary, map->layout->tileset_secondary);
} }

View file

@ -258,6 +258,7 @@ void MainWindow::initEditor() {
connect(this->editor, &Editor::wildMonDataChanged, this, &MainWindow::onWildMonDataChanged); connect(this->editor, &Editor::wildMonDataChanged, this, &MainWindow::onWildMonDataChanged);
connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged); connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged);
connect(this->editor, &Editor::editedMapData, this, &MainWindow::markMapEdited); 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->toolButton_Open_Scripts, &QToolButton::pressed, this->editor, &Editor::openMapScripts);
connect(ui->actionOpen_Project_in_Text_Editor, &QAction::triggered, this->editor, &Editor::openProjectInTextEditor); 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; bool updated = false;
if (primaryTilesetLabel == this->editor->map->layout->tileset_primary_label) { if (primaryTilesetLabel == this->editor->map->layout->tileset_primary_label) {
this->editor->updatePrimaryTileset(primaryTilesetLabel, true); this->editor->updatePrimaryTileset(primaryTilesetLabel, true);
Scripting::cb_TilesetUpdated(primaryTilesetLabel);
updated = true; updated = true;
} else { } else {
this->editor->project->getTileset(primaryTilesetLabel, true); this->editor->project->getTileset(primaryTilesetLabel, true);
} }
if (secondaryTilesetLabel == this->editor->map->layout->tileset_secondary_label) { if (secondaryTilesetLabel == this->editor->map->layout->tileset_secondary_label) {
this->editor->updateSecondaryTileset(secondaryTilesetLabel, true); this->editor->updateSecondaryTileset(secondaryTilesetLabel, true);
Scripting::cb_TilesetUpdated(secondaryTilesetLabel);
updated = true; updated = true;
} else { } else {
this->editor->project->getTileset(secondaryTilesetLabel, true); this->editor->project->getTileset(secondaryTilesetLabel, true);

View file

@ -6,6 +6,7 @@ QMap<CallbackType, QString> callbackFunctions = {
{OnProjectClosed, "onProjectClosed"}, {OnProjectClosed, "onProjectClosed"},
{OnBlockChanged, "onBlockChanged"}, {OnBlockChanged, "onBlockChanged"},
{OnMapOpened, "onMapOpened"}, {OnMapOpened, "onMapOpened"},
{OnTilesetUpdated, "onTilesetUpdated"},
}; };
Scripting *instance = nullptr; Scripting *instance = nullptr;
@ -140,6 +141,15 @@ void Scripting::cb_MapOpened(QString mapName) {
instance->invokeCallback(OnMapOpened, args); 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 Scripting::fromBlock(Block block) {
QJSValue obj = instance->engine->newObject(); QJSValue obj = instance->engine->newObject();
obj.setProperty("metatileId", block.metatileId); obj.setProperty("metatileId", block.metatileId);