Skip to content

Commit

Permalink
Allow warping by double-clicking clone objects
Browse files Browse the repository at this point in the history
  • Loading branch information
GriffinRichards authored and huderlem committed Feb 10, 2022
1 parent b01581d commit b919143
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 17 deletions.
2 changes: 1 addition & 1 deletion include/editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ private slots:
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();
Expand Down
2 changes: 1 addition & 1 deletion include/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
23 changes: 13 additions & 10 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -718,11 +718,14 @@ void MainWindow::openWarpMap(QString map_name, QString warp_num) {
return;
}

QList<Event*> 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<Event*> 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();
Expand Down
15 changes: 11 additions & 4 deletions src/ui/draggablepixmapitem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
2 changes: 1 addition & 1 deletion src/ui/neweventtoolbutton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit b919143

Please sign in to comment.