From b91914310ef5e6bb6b508a1ad30c74c2e47235ec Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 7 Feb 2022 09:28:59 -0500 Subject: [PATCH] Allow warping by double-clicking clone objects --- include/editor.h | 2 +- include/mainwindow.h | 2 +- src/mainwindow.cpp | 23 +++++++++++++---------- src/ui/draggablepixmapitem.cpp | 15 +++++++++++---- src/ui/neweventtoolbutton.cpp | 2 +- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/include/editor.h b/include/editor.h index f17eb771..11efabda 100644 --- a/include/editor.h +++ b/include/editor.h @@ -210,7 +210,7 @@ signals: void selectedObjectsChanged(); void loadMapRequested(QString, QString); void wildMonDataChanged(); - void warpEventDoubleClicked(QString mapName, QString warpNum); + void warpEventDoubleClicked(QString, QString, QString); void currentMetatilesSelectionChanged(); void mapRulerStatusChanged(const QString &); void editedMapData(); diff --git a/include/mainwindow.h b/include/mainwindow.h index 043d421e..b447e816 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -212,7 +212,7 @@ private slots: void on_action_Reload_Project_triggered(); void on_mapList_activated(const QModelIndex &index); void on_action_Save_Project_triggered(); - void openWarpMap(QString map_name, QString warp_num); + void openWarpMap(QString map_name, QString event_id, QString event_group); void duplicate(); void setClipboardData(poryjson::Json::object); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f3133137..c6cc63f0 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -692,22 +692,22 @@ void MainWindow::refreshMapScene() on_horizontalSlider_MetatileZoom_valueChanged(ui->horizontalSlider_MetatileZoom->value()); } -void MainWindow::openWarpMap(QString map_name, QString warp_num) { +void MainWindow::openWarpMap(QString map_name, QString event_id, QString event_group) { // Ensure valid destination map name. if (!editor->project->mapNames.contains(map_name)) { - logError(QString("Invalid warp destination map name '%1'").arg(map_name)); + logError(QString("Invalid map name '%1'").arg(map_name)); return; } - // Ensure valid destination warp number. + // Ensure valid event number. bool ok; - int warpNum = warp_num.toInt(&ok, 0); + int event_index = event_id.toInt(&ok, 0); if (!ok) { - logError(QString("Invalid warp number '%1' for destination map '%2'").arg(warp_num).arg(map_name)); + logError(QString("Invalid event number '%1' for map '%2'").arg(event_id).arg(map_name)); return; } - // Open the destination map, and select the target warp event. + // Open the destination map. if (!setMap(map_name, true)) { QMessageBox msgBox(this); QString errorMsg = QString("There was an error opening map %1. Please see %2 for full error details.\n\n%3") @@ -718,11 +718,14 @@ void MainWindow::openWarpMap(QString map_name, QString warp_num) { return; } - QList warp_events = editor->map->events[EventGroup::Warp]; - if (warp_events.length() > warpNum) { - Event *warp_event = warp_events.at(warpNum); + // Select the target event. + if (event_group != EventGroup::Warp && event_index) + event_index--; + QList events = editor->map->events[event_group]; + if (events.length() > event_index) { + Event *event = events.at(event_index); for (DraggablePixmapItem *item : editor->getObjects()) { - if (item->event == warp_event) { + if (item->event == event) { editor->selected_events->clear(); editor->selected_events->append(item); editor->updateSelectedEvents(); diff --git a/src/ui/draggablepixmapitem.cpp b/src/ui/draggablepixmapitem.cpp index cbc4d584..6fc9f157 100644 --- a/src/ui/draggablepixmapitem.cpp +++ b/src/ui/draggablepixmapitem.cpp @@ -102,17 +102,24 @@ void DraggablePixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *) { } void DraggablePixmapItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *) { - if (this->event->get("event_type") == EventType::Warp) { + QString eventType = this->event->get("event_type"); + if (eventType == EventType::Warp) { QString destMap = this->event->get("destination_map_name"); if (destMap != NONE_MAP_NAME) { - emit editor->warpEventDoubleClicked(this->event->get("destination_map_name"), this->event->get("destination_warp")); + emit editor->warpEventDoubleClicked(destMap, this->event->get("destination_warp"), EventGroup::Warp); } } - else if (this->event->get("event_type") == EventType::SecretBase) { + else if (eventType == EventType::CloneObject) { + QString destMap = this->event->get("target_map"); + if (destMap != NONE_MAP_NAME) { + emit editor->warpEventDoubleClicked(destMap, this->event->get("target_local_id"), EventGroup::Object); + } + } + else if (eventType == EventType::SecretBase) { QString baseId = this->event->get("secret_base_id"); QString destMap = editor->project->mapConstantsToMapNames.value("MAP_" + baseId.left(baseId.lastIndexOf("_"))); if (destMap != NONE_MAP_NAME) { - emit editor->warpEventDoubleClicked(destMap, "0"); + emit editor->warpEventDoubleClicked(destMap, "0", EventGroup::Warp); } } } diff --git a/src/ui/neweventtoolbutton.cpp b/src/ui/neweventtoolbutton.cpp index 94db8807..d03b6c15 100644 --- a/src/ui/neweventtoolbutton.cpp +++ b/src/ui/neweventtoolbutton.cpp @@ -18,7 +18,7 @@ void NewEventToolButton::init() this->newObjectAction->setIcon(QIcon(":/icons/add.ico")); connect(this->newObjectAction, &QAction::triggered, this, &NewEventToolButton::newObject); - this->newCloneObjectAction = new QAction("New Object Clone", this); + this->newCloneObjectAction = new QAction("New Clone Object", this); this->newCloneObjectAction->setIcon(QIcon(":/icons/add.ico")); connect(this->newCloneObjectAction, &QAction::triggered, this, &NewEventToolButton::newCloneObject);