diff --git a/editor.cpp b/editor.cpp index 2e935b11..3c374ebc 100755 --- a/editor.cpp +++ b/editor.cpp @@ -1515,13 +1515,15 @@ void DraggablePixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent *mouse) { } void DraggablePixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouse) { - if (clicking) { - this->editor->selectMapEvent(this, mouse->modifiers() & Qt::ControlModifier); - this->editor->updateSelectedEvents(); - } active = false; } +void DraggablePixmapItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouse) { + if (this->event->get("event_type") == EventType::Warp) { + emit editor->warpEventDoubleClicked(this->event->get("destination_map_name"), this->event->get("destination_warp")); + } +} + QList *Editor::getObjects() { QList *list = new QList; for (Event *event : map->getAllEvents()) { diff --git a/editor.h b/editor.h index 360ec21f..ba51c4aa 100755 --- a/editor.h +++ b/editor.h @@ -138,6 +138,7 @@ signals: void selectedObjectsChanged(); void loadMapRequested(QString, QString); void tilesetChanged(QString); + void warpEventDoubleClicked(QString mapName, QString warpNum); }; @@ -228,6 +229,7 @@ protected: void mousePressEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*); void mouseReleaseEvent(QGraphicsSceneMouseEvent*); + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*); }; class EventGroup : public QGraphicsItemGroup { diff --git a/mainwindow.cpp b/mainwindow.cpp index 1afa4d19..1fb79ad1 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -37,6 +37,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(editor, SIGNAL(selectedObjectsChanged()), this, SLOT(updateSelectedObjects())); connect(editor, SIGNAL(loadMapRequested(QString, QString)), this, SLOT(onLoadMapRequested(QString, QString))); connect(editor, SIGNAL(tilesetChanged(QString)), this, SLOT(onTilesetChanged(QString))); + connect(editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString))); on_toolButton_Paint_clicked(); @@ -196,6 +197,39 @@ void MainWindow::redrawMapScene() ui->graphicsView_Elevation->setFixedSize(editor->elevation_metatiles_item->pixmap().width() + 2, editor->elevation_metatiles_item->pixmap().height() + 2); } +void MainWindow::openWarpMap(QString map_name, QString warp_num) { + // Ensure valid destination map name. + if (!editor->project->mapNames->contains(map_name)) { + qDebug() << QString("Invalid warp destination map name '%1'").arg(map_name); + return; + } + + // Ensure valid destination warp number. + bool ok; + int warpNum = warp_num.toInt(&ok, 0); + if (!ok) { + qDebug() << QString("Invalid warp number '%1' for destination map '%2'").arg(warp_num).arg(map_name); + return; + } + + // Open the destination map, and select the target warp event. + setMap(map_name); + QList warp_events = editor->map->events["warp_event_group"]; + if (warp_events.length() > warpNum) { + Event *warp_event = warp_events.at(warpNum); + QList *all_events = editor->getObjects(); + for (DraggablePixmapItem *item : *all_events) { + if (item->event == warp_event) { + editor->selected_events->clear(); + editor->selected_events->append(item); + editor->updateSelectedEvents(); + } + } + + delete all_events; + } +} + void MainWindow::setRecentMap(QString map_name) { QSettings settings; QString key = "project:" + editor->project->root; diff --git a/mainwindow.h b/mainwindow.h index 04b4cdb6..7d9c908f 100755 --- a/mainwindow.h +++ b/mainwindow.h @@ -32,6 +32,7 @@ private slots: void on_action_Open_Project_triggered(); void on_mapList_activated(const QModelIndex &index); void on_action_Save_Project_triggered(); + void openWarpMap(QString map_name, QString warp_num); void undo(); void redo();