From 31f400e2c958d69f68400b86ea326f22c9c2f43e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 5 Feb 2022 18:53:04 -0500 Subject: [PATCH] Add event group constants --- src/core/event.cpp | 43 +++++++++++++++----- src/editor.cpp | 2 +- src/mainwindow.cpp | 36 ++++++++--------- src/project.cpp | 80 ++++++++++++++++++------------------- src/ui/mapimageexporter.cpp | 10 ++--- 5 files changed, 98 insertions(+), 73 deletions(-) diff --git a/src/core/event.cpp b/src/core/event.cpp index 75656fc4..9de6a02f 100644 --- a/src/core/event.cpp +++ b/src/core/event.cpp @@ -3,6 +3,12 @@ #include "project.h" #include "config.h" +QString EventGroup::Object = "object_event_group"; +QString EventGroup::Warp = "warp_event_group"; +QString EventGroup::Heal = "heal_event_group"; +QString EventGroup::Coord = "coord_event_group"; +QString EventGroup::Bg = "bg_event_group"; + QString EventType::Object = "event_object"; QString EventType::Warp = "event_warp"; QString EventType::Trigger = "event_trigger"; @@ -10,7 +16,18 @@ QString EventType::WeatherTrigger = "event_weather_trigger"; QString EventType::Sign = "event_sign"; QString EventType::HiddenItem = "event_hidden_item"; QString EventType::SecretBase = "event_secret_base"; -QString EventType::HealLocation = "event_heal_location"; +QString EventType::HealLocation = "event_healspot"; + +const QMap EventTypeTable = { + {EventType::Object, EventGroup::Object}, + {EventType::Warp, EventGroup::Warp}, + {EventType::Trigger, EventGroup::Coord}, + {EventType::WeatherTrigger, EventGroup::Coord}, + {EventType::Sign, EventGroup::Bg}, + {EventType::HiddenItem, EventGroup::Bg}, + {EventType::SecretBase, EventGroup::Bg}, + {EventType::HealLocation, EventGroup::Heal}, +}; Event::Event() : spriteWidth(16), @@ -68,7 +85,7 @@ Event* Event::createNewEvent(QString event_type, QString map_name, Project *proj Event* Event::createNewObjectEvent(Project *project) { Event *event = new Event; - event->put("event_group_type", "object_event_group"); + event->put("event_group_type", EventGroup::Object); event->put("event_type", EventType::Object); event->put("sprite", project->gfxNames.first()); event->put("movement_type", project->movementTypes.first()); @@ -89,7 +106,7 @@ Event* Event::createNewObjectEvent(Project *project) Event* Event::createNewWarpEvent(QString map_name) { Event *event = new Event; - event->put("event_group_type", "warp_event_group"); + event->put("event_group_type", EventGroup::Warp); event->put("event_type", EventType::Warp); event->put("destination_warp", 0); event->put("destination_map_name", map_name); @@ -100,7 +117,7 @@ Event* Event::createNewWarpEvent(QString map_name) Event* Event::createNewHealLocationEvent(QString map_name) { Event *event = new Event; - event->put("event_group_type", "heal_event_group"); + event->put("event_group_type", EventGroup::Heal); event->put("event_type", EventType::HealLocation); event->put("loc_name", QString(Map::mapConstantFromName(map_name)).remove(0,4)); event->put("id_name", map_name.replace(QRegularExpression("([a-z])([A-Z])"), "\\1_\\2").toUpper()); @@ -115,7 +132,7 @@ Event* Event::createNewHealLocationEvent(QString map_name) Event* Event::createNewTriggerEvent(Project *project) { Event *event = new Event; - event->put("event_group_type", "coord_event_group"); + event->put("event_group_type", EventGroup::Coord); event->put("event_type", EventType::Trigger); event->put("script_label", "NULL"); event->put("script_var", project->varNames.first()); @@ -127,7 +144,7 @@ Event* Event::createNewTriggerEvent(Project *project) Event* Event::createNewWeatherTriggerEvent(Project *project) { Event *event = new Event; - event->put("event_group_type", "coord_event_group"); + event->put("event_group_type", EventGroup::Coord); event->put("event_type", EventType::WeatherTrigger); event->put("weather", project->coordEventWeatherNames.first()); event->put("elevation", 0); @@ -137,7 +154,7 @@ Event* Event::createNewWeatherTriggerEvent(Project *project) Event* Event::createNewSignEvent(Project *project) { Event *event = new Event; - event->put("event_group_type", "bg_event_group"); + event->put("event_group_type", EventGroup::Bg); event->put("event_type", EventType::Sign); event->put("player_facing_direction", project->bgEventFacingDirections.first()); event->put("script_label", "NULL"); @@ -148,7 +165,7 @@ Event* Event::createNewSignEvent(Project *project) Event* Event::createNewHiddenItemEvent(Project *project) { Event *event = new Event; - event->put("event_group_type", "bg_event_group"); + event->put("event_group_type", EventGroup::Bg); event->put("event_type", EventType::HiddenItem); event->put("item", project->itemNames.first()); event->put("flag", project->flagNames.first()); @@ -165,7 +182,7 @@ Event* Event::createNewHiddenItemEvent(Project *project) Event* Event::createNewSecretBaseEvent(Project *project) { Event *event = new Event; - event->put("event_group_type", "bg_event_group"); + event->put("event_group_type", EventGroup::Bg); event->put("event_type", EventType::SecretBase); event->put("secret_base_id", project->secretBaseIds.first()); event->put("elevation", 0); @@ -442,3 +459,11 @@ void Event::setFrameFromMovement(QString facingDir) { this->hFlip = true; } } + +bool Event::isValidType(QString event_type) { + return EventTypeTable.contains(event_type); +} + +QString Event::typeToGroup(QString event_type) { + return EventTypeTable.value(event_type, QString()); +} diff --git a/src/editor.cpp b/src/editor.cpp index 37eac9dc..2a4f4ed9 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -2065,7 +2065,7 @@ bool Editor::eventLimitReached(Map *map, QString event_type) { if (project && map && !event_type.isEmpty()) { if (event_type == EventType::Object) - return map->events.value("object_event_group").length() >= project->getMaxObjectEvents(); + return map->events.value(EventGroup::Object).length() >= project->getMaxObjectEvents(); } return false; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index b9c18c20..190719d0 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -728,7 +728,7 @@ void MainWindow::openWarpMap(QString map_name, QString warp_num) { return; } - QList warp_events = editor->map->events["warp_event_group"]; + QList warp_events = editor->map->events[EventGroup::Warp]; if (warp_events.length() > warpNum) { Event *warp_event = warp_events.at(warpNum); for (DraggablePixmapItem *item : editor->getObjects()) { @@ -2323,27 +2323,27 @@ void MainWindow::updateSelectedObjects() { { QString event_group_type = events[0]->event->get("event_group_type"); - if (event_group_type == "object_event_group") { + if (event_group_type == EventGroup::Object) { scrollTarget = ui->scrollArea_Objects; target = ui->scrollAreaWidgetContents_Objects; ui->tabWidget_EventType->setCurrentWidget(ui->tab_Objects); } - else if (event_group_type == "warp_event_group") { + else if (event_group_type == EventGroup::Warp) { scrollTarget = ui->scrollArea_Warps; target = ui->scrollAreaWidgetContents_Warps; ui->tabWidget_EventType->setCurrentWidget(ui->tab_Warps); } - else if (event_group_type == "coord_event_group") { + else if (event_group_type == EventGroup::Coord) { scrollTarget = ui->scrollArea_Triggers; target = ui->scrollAreaWidgetContents_Triggers; ui->tabWidget_EventType->setCurrentWidget(ui->tab_Triggers); } - else if (event_group_type == "bg_event_group") { + else if (event_group_type == EventGroup::Bg) { scrollTarget = ui->scrollArea_BGs; target = ui->scrollAreaWidgetContents_BGs; ui->tabWidget_EventType->setCurrentWidget(ui->tab_BGs); } - else if (event_group_type == "heal_event_group") { + else if (event_group_type == EventGroup::Heal) { scrollTarget = ui->scrollArea_Healspots; target = ui->scrollAreaWidgetContents_Healspots; ui->tabWidget_EventType->setCurrentWidget(ui->tab_Healspots); @@ -2400,23 +2400,23 @@ QString MainWindow::getEventGroupFromTabWidget(QWidget *tab) QString ret = ""; if (tab == eventTabObjectWidget) { - ret = "object_event_group"; + ret = EventGroup::Object; } else if (tab == eventTabWarpWidget) { - ret = "warp_event_group"; + ret = EventGroup::Warp; } else if (tab == eventTabTriggerWidget) { - ret = "coord_event_group"; + ret = EventGroup::Coord; } else if (tab == eventTabBGWidget) { - ret = "bg_event_group"; + ret = EventGroup::Bg; } else if (tab == eventTabHealspotWidget) { - ret = "heal_event_group"; + ret = EventGroup::Heal; } return ret; } @@ -2426,23 +2426,23 @@ void MainWindow::eventTabChanged(int index) { QString group = getEventGroupFromTabWidget(ui->tabWidget_EventType->widget(index)); DraggablePixmapItem *selectedEvent = nullptr; - if (group == "object_event_group") { + if (group == EventGroup::Object) { selectedEvent = selectedObject; ui->newEventToolButton->setDefaultAction(ui->newEventToolButton->newObjectAction); } - else if (group == "warp_event_group") { + else if (group == EventGroup::Warp) { selectedEvent = selectedWarp; ui->newEventToolButton->setDefaultAction(ui->newEventToolButton->newWarpAction); } - else if (group == "coord_event_group") { + else if (group == EventGroup::Coord) { selectedEvent = selectedTrigger; ui->newEventToolButton->setDefaultAction(ui->newEventToolButton->newTriggerAction); } - else if (group == "bg_event_group") { + else if (group == EventGroup::Bg) { selectedEvent = selectedBG; ui->newEventToolButton->setDefaultAction(ui->newEventToolButton->newSignAction); } - else if (group == "heal_event_group") { + else if (group == EventGroup::Heal) { selectedEvent = selectedHealspot; } @@ -2468,7 +2468,7 @@ void MainWindow::eventTabChanged(int index) { void MainWindow::selectedEventIndexChanged(int index) { QString group = getEventGroupFromTabWidget(ui->tabWidget_EventType->currentWidget()); - int event_offs = group == "warp_event_group" ? 0 : 1; + int event_offs = group == EventGroup::Warp ? 0 : 1; Event *event = editor->map->events.value(group).at(index - event_offs); DraggablePixmapItem *selectedEvent = nullptr; for (QGraphicsItem *child : editor->events_group->childItems()) { @@ -2502,7 +2502,7 @@ void MainWindow::on_toolButton_deleteObject_clicked() { int numDeleted = 0; for (DraggablePixmapItem *item : *editor->selected_events) { QString event_group = item->event->get("event_group_type"); - if (event_group != "heal_event_group") { + if (event_group != EventGroup::Heal) { // Get the index for the event that should be selected after this event has been deleted. // If it's at the end of the list, select the previous event, otherwise select the next one. // Don't bother getting the event to select if there are still more events to delete diff --git a/src/project.cpp b/src/project.cpp index 0de3ef89..98bc2cd5 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -211,7 +211,7 @@ bool Project::loadMapData(Map* map) { map->sharedScriptsMap = mapObj["shared_scripts_map"].toString(); // Events - map->events["object_event_group"].clear(); + map->events[EventGroup::Object].clear(); QJsonArray objectEventsArr = mapObj["object_events"].toArray(); for (int i = 0; i < objectEventsArr.size(); i++) { QJsonObject event = objectEventsArr[i].toObject(); @@ -231,11 +231,11 @@ bool Project::loadMapData(Map* map) { object->put("sight_radius_tree_id", event["trainer_sight_or_berry_tree_id"].toString()); object->put("script_label", event["script"].toString()); object->put("event_flag", event["flag"].toString()); - object->put("event_group_type", "object_event_group"); - map->events["object_event_group"].append(object); + object->put("event_group_type", EventGroup::Object); + map->events[EventGroup::Object].append(object); } - map->events["warp_event_group"].clear(); + map->events[EventGroup::Warp].clear(); QJsonArray warpEventsArr = mapObj["warp_events"].toArray(); for (int i = 0; i < warpEventsArr.size(); i++) { QJsonObject event = warpEventsArr[i].toObject(); @@ -250,18 +250,18 @@ bool Project::loadMapData(Map* map) { QString mapConstant = event["dest_map"].toString(); if (mapConstantsToMapNames.contains(mapConstant)) { warp->put("destination_map_name", mapConstantsToMapNames.value(mapConstant)); - warp->put("event_group_type", "warp_event_group"); - map->events["warp_event_group"].append(warp); + warp->put("event_group_type", EventGroup::Warp); + map->events[EventGroup::Warp].append(warp); } else if (mapConstant == NONE_MAP_CONSTANT) { warp->put("destination_map_name", NONE_MAP_NAME); - warp->put("event_group_type", "warp_event_group"); - map->events["warp_event_group"].append(warp); + warp->put("event_group_type", EventGroup::Warp); + map->events[EventGroup::Warp].append(warp); } else { logError(QString("Destination map constant '%1' is invalid for warp").arg(mapConstant)); } } - map->events["heal_event_group"].clear(); + map->events[EventGroup::Heal].clear(); for (auto it = healLocations.begin(); it != healLocations.end(); it++) { HealLocation loc = *it; @@ -277,18 +277,18 @@ bool Project::loadMapData(Map* map) { heal->put("index", loc.index); heal->put("elevation", 3); // TODO: change this? heal->put("destination_map_name", mapConstantsToMapNames.value(map->name)); - heal->put("event_group_type", "heal_event_group"); + heal->put("event_group_type", EventGroup::Heal); heal->put("event_type", EventType::HealLocation); if (projectConfig.getHealLocationRespawnDataEnabled()) { heal->put("respawn_map", mapConstantsToMapNames.value(QString("MAP_" + loc.respawnMap))); heal->put("respawn_npc", loc.respawnNPC); } - map->events["heal_event_group"].append(heal); + map->events[EventGroup::Heal].append(heal); } } - map->events["coord_event_group"].clear(); + map->events[EventGroup::Coord].clear(); QJsonArray coordEventsArr = mapObj["coord_events"].toArray(); for (int i = 0; i < coordEventsArr.size(); i++) { QJsonObject event = coordEventsArr[i].toObject(); @@ -302,8 +302,8 @@ bool Project::loadMapData(Map* map) { coord->put("script_var", event["var"].toString()); coord->put("script_var_value", event["var_value"].toString()); coord->put("script_label", event["script"].toString()); - coord->put("event_group_type", "coord_event_group"); - map->events["coord_event_group"].append(coord); + coord->put("event_group_type", EventGroup::Coord); + map->events[EventGroup::Coord].append(coord); } else if (type == "weather") { Event *coord = new Event(event, EventType::WeatherTrigger); coord->put("map_name", map->name); @@ -311,15 +311,15 @@ bool Project::loadMapData(Map* map) { coord->put("y", QString::number(event["y"].toInt())); coord->put("elevation", QString::number(event["elevation"].toInt())); coord->put("weather", event["weather"].toString()); - coord->put("event_group_type", "coord_event_group"); + coord->put("event_group_type", EventGroup::Coord); coord->put("event_type", EventType::WeatherTrigger); - map->events["coord_event_group"].append(coord); + map->events[EventGroup::Coord].append(coord); } else { logError(QString("Map %1 coord_event %2 has invalid type '%3'. Must be 'trigger' or 'weather'.").arg(map->name).arg(i).arg(type)); } } - map->events["bg_event_group"].clear(); + map->events[EventGroup::Bg].clear(); QJsonArray bgEventsArr = mapObj["bg_events"].toArray(); for (int i = 0; i < bgEventsArr.size(); i++) { QJsonObject event = bgEventsArr[i].toObject(); @@ -332,8 +332,8 @@ bool Project::loadMapData(Map* map) { bg->put("elevation", QString::number(event["elevation"].toInt())); bg->put("player_facing_direction", event["player_facing_dir"].toString()); bg->put("script_label", event["script"].toString()); - bg->put("event_group_type", "bg_event_group"); - map->events["bg_event_group"].append(bg); + bg->put("event_group_type", EventGroup::Bg); + map->events[EventGroup::Bg].append(bg); } else if (type == "hidden_item") { Event *bg = new Event(event, EventType::HiddenItem); bg->put("map_name", map->name); @@ -348,8 +348,8 @@ bool Project::loadMapData(Map* map) { if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) { bg->put("underfoot", event["underfoot"].toBool()); } - bg->put("event_group_type", "bg_event_group"); - map->events["bg_event_group"].append(bg); + bg->put("event_group_type", EventGroup::Bg); + map->events[EventGroup::Bg].append(bg); } else if (type == "secret_base") { Event *bg = new Event(event, EventType::SecretBase); bg->put("map_name", map->name); @@ -357,8 +357,8 @@ bool Project::loadMapData(Map* map) { bg->put("y", QString::number(event["y"].toInt())); bg->put("elevation", QString::number(event["elevation"].toInt())); bg->put("secret_base_id", event["secret_base_id"].toString()); - bg->put("event_group_type", "bg_event_group"); - map->events["bg_event_group"].append(bg); + bg->put("event_group_type", EventGroup::Bg); + map->events[EventGroup::Bg].append(bg); } else { logError(QString("Map %1 bg_event %2 has invalid type '%3'. Must be 'sign', 'hidden_item', or 'secret_base'.").arg(map->name).arg(i).arg(type)); } @@ -861,8 +861,8 @@ void Project::saveHealLocationStruct(Map *map) { } // set new location in healLocations list - if (map->events["heal_event_group"].length() > 0) { - for (Event *healEvent : map->events["heal_event_group"]) { + if (map->events[EventGroup::Heal].length() > 0) { + for (Event *healEvent : map->events[EventGroup::Heal]) { HealLocation hl = HealLocation::fromEvent(healEvent); healLocations[hl.index - 1] = hl; } @@ -1333,8 +1333,8 @@ void Project::saveMap(Map *map) { if (map->sharedEventsMap.isEmpty()) { // Object events OrderedJson::array objectEventsArr; - for (int i = 0; i < map->events["object_event_group"].length(); i++) { - Event *object_event = map->events["object_event_group"].value(i); + for (int i = 0; i < map->events[EventGroup::Object].length(); i++) { + Event *object_event = map->events[EventGroup::Object].value(i); OrderedJson::object eventObj = object_event->buildObjectEventJSON(); objectEventsArr.push_back(eventObj); } @@ -1342,8 +1342,8 @@ void Project::saveMap(Map *map) { // Warp events OrderedJson::array warpEventsArr; - for (int i = 0; i < map->events["warp_event_group"].length(); i++) { - Event *warp_event = map->events["warp_event_group"].value(i); + for (int i = 0; i < map->events[EventGroup::Warp].length(); i++) { + Event *warp_event = map->events[EventGroup::Warp].value(i); OrderedJson::object warpObj = warp_event->buildWarpEventJSON(mapNamesToMapConstants); warpEventsArr.append(warpObj); } @@ -1351,8 +1351,8 @@ void Project::saveMap(Map *map) { // Coord events OrderedJson::array coordEventsArr; - for (int i = 0; i < map->events["coord_event_group"].length(); i++) { - Event *event = map->events["coord_event_group"].value(i); + for (int i = 0; i < map->events[EventGroup::Coord].length(); i++) { + Event *event = map->events[EventGroup::Coord].value(i); QString event_type = event->get("event_type"); if (event_type == EventType::Trigger) { OrderedJson::object triggerObj = event->buildTriggerEventJSON(); @@ -1366,8 +1366,8 @@ void Project::saveMap(Map *map) { // Bg Events OrderedJson::array bgEventsArr; - for (int i = 0; i < map->events["bg_event_group"].length(); i++) { - Event *event = map->events["bg_event_group"].value(i); + for (int i = 0; i < map->events[EventGroup::Bg].length(); i++) { + Event *event = map->events[EventGroup::Bg].value(i); QString event_type = event->get("event_type"); if (event_type == EventType::Sign) { OrderedJson::object signObj = event->buildSignEventJSON(); @@ -2473,8 +2473,8 @@ bool Project::readSpeciesIconPaths() { void Project::saveMapHealEvents(Map *map) { // save heal event changes - if (map->events["heal_event_group"].length() > 0) { - for (Event *healEvent : map->events["heal_event_group"]) { + if (map->events[EventGroup::Heal].length() > 0) { + for (Event *healEvent : map->events[EventGroup::Heal]) { HealLocation hl = HealLocation::fromEvent(healEvent); healLocations[hl.index - 1] = hl; } @@ -2483,11 +2483,11 @@ void Project::saveMapHealEvents(Map *map) { } void Project::setNewMapEvents(Map *map) { - map->events["object_event_group"].clear(); - map->events["warp_event_group"].clear(); - map->events["heal_event_group"].clear(); - map->events["coord_event_group"].clear(); - map->events["bg_event_group"].clear(); + map->events[EventGroup::Object].clear(); + map->events[EventGroup::Warp].clear(); + map->events[EventGroup::Heal].clear(); + map->events[EventGroup::Coord].clear(); + map->events[EventGroup::Bg].clear(); } int Project::getNumTilesPrimary() diff --git a/src/ui/mapimageexporter.cpp b/src/ui/mapimageexporter.cpp index bd5c5bfb..d78ac427 100644 --- a/src/ui/mapimageexporter.cpp +++ b/src/ui/mapimageexporter.cpp @@ -371,11 +371,11 @@ QPixmap MapImageExporter::getFormattedMapPixmap(Map *map, bool ignoreBorder) { for (Event *event : events) { editor->project->setEventPixmap(event); QString group = event->get("event_group_type"); - if ((showObjects && group == "object_event_group") - || (showWarps && group == "warp_event_group") - || (showBGs && group == "bg_event_group") - || (showTriggers && group == "coord_event_group") - || (showHealSpots && group == "heal_event_group")) + if ((showObjects && group == EventGroup::Object) + || (showWarps && group == EventGroup::Warp) + || (showBGs && group == EventGroup::Bg) + || (showTriggers && group == EventGroup::Coord) + || (showHealSpots && group == EventGroup::Heal)) eventPainter.drawImage(QPoint(event->getPixelX(), event->getPixelY()), event->pixmap.toImage()); } eventPainter.end();