mirror of
https://github.com/huderlem/porymap.git
synced 2026-09-08 00:45:39 -05:00
Merge pull request #682 from GriffinRichards/event-loading
Limit the maximum number of events
This commit is contained in:
@@ -264,8 +264,6 @@ void MainWindow::initCustomUI() {
|
||||
}
|
||||
|
||||
void MainWindow::initExtraSignals() {
|
||||
// other signals
|
||||
connect(ui->newEventToolButton, &NewEventToolButton::newEventAdded, this, &MainWindow::addNewEvent);
|
||||
connect(ui->tabWidget_EventType, &QTabWidget::currentChanged, this, &MainWindow::eventTabChanged);
|
||||
|
||||
// Change pages on wild encounter groups
|
||||
@@ -343,6 +341,7 @@ void MainWindow::initEditor() {
|
||||
connect(this->editor, &Editor::wildMonTableEdited, [this] { this->markMapEdited(); });
|
||||
connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged);
|
||||
connect(this->editor, &Editor::tilesetUpdated, this, &Scripting::cb_TilesetUpdated);
|
||||
connect(ui->newEventToolButton, &NewEventToolButton::newEventAdded, this->editor, &Editor::addNewEvent);
|
||||
connect(ui->toolButton_deleteEvent, &QAbstractButton::clicked, this->editor, &Editor::deleteSelectedEvents);
|
||||
|
||||
this->loadUserSettings();
|
||||
@@ -1028,18 +1027,13 @@ void MainWindow::openWarpMap(QString map_name, int event_id, Event::Group event_
|
||||
|
||||
// Select the target event.
|
||||
int index = event_id - Event::getIndexOffset(event_group);
|
||||
Event* event = editor->map->getEvent(event_group, index);
|
||||
Event* event = this->editor->map->getEvent(event_group, index);
|
||||
if (event) {
|
||||
auto item = event->getPixmapItem();
|
||||
if (item) {
|
||||
editor->selected_events->clear();
|
||||
editor->selected_events->append(item);
|
||||
editor->updateSelectedEvents();
|
||||
return;
|
||||
}
|
||||
this->editor->selectMapEvent(event);
|
||||
} else {
|
||||
// Can still warp to this map, but can't select the specified event
|
||||
logWarn(QString("%1 %2 doesn't exist on map '%3'").arg(Event::groupToString(event_group)).arg(event_id).arg(map_name));
|
||||
}
|
||||
// Can still warp to this map, but can't select the specified event
|
||||
logWarn(QString("%1 %2 doesn't exist on map '%3'").arg(Event::eventGroupToString(event_group)).arg(event_id).arg(map_name));
|
||||
}
|
||||
|
||||
void MainWindow::displayMapProperties() {
|
||||
@@ -1302,7 +1296,7 @@ void MainWindow::onNewMapCreated(Map *newMap, const QString &groupName) {
|
||||
logInfo(QString("Created a new map named %1.").arg(newMap->name()));
|
||||
|
||||
if (newMap->needsHealLocation()) {
|
||||
addNewEvent(Event::Type::HealLocation);
|
||||
this->editor->addNewEvent(Event::Type::HealLocation);
|
||||
}
|
||||
|
||||
// TODO: Creating a new map shouldn't be automatically saved.
|
||||
@@ -1627,17 +1621,10 @@ void MainWindow::copy() {
|
||||
OrderedJson::object copyObject;
|
||||
copyObject["object"] = "events";
|
||||
|
||||
QList<DraggablePixmapItem *> events;
|
||||
if (editor->selected_events && editor->selected_events->length()) {
|
||||
events = *editor->selected_events;
|
||||
}
|
||||
|
||||
OrderedJson::array eventsArray;
|
||||
|
||||
for (auto item : events) {
|
||||
Event *event = item->event;
|
||||
for (const auto &event : this->editor->selectedEvents) {
|
||||
OrderedJson::object eventContainer;
|
||||
eventContainer["event_type"] = Event::eventTypeToString(event->getEventType());
|
||||
eventContainer["event_type"] = Event::typeToString(event->getEventType());
|
||||
OrderedJson::object eventJson = event->buildEventJson(editor->project);
|
||||
eventContainer["event"] = eventJson;
|
||||
eventsArray.append(eventContainer);
|
||||
@@ -1748,14 +1735,7 @@ void MainWindow::paste() {
|
||||
QJsonArray events = pasteObject["events"].toArray();
|
||||
for (QJsonValue event : events) {
|
||||
// paste the event to the map
|
||||
const QString typeString = event["event_type"].toString();
|
||||
Event::Type type = Event::eventTypeFromString(typeString);
|
||||
|
||||
if (this->editor->eventLimitReached(type)) {
|
||||
logWarn(QString("Cannot paste event, the limit for type '%1' has been reached.").arg(typeString));
|
||||
continue;
|
||||
}
|
||||
|
||||
Event::Type type = Event::typeFromString(event["event_type"].toString());
|
||||
Event *pasteEvent = Event::create(type);
|
||||
if (!pasteEvent)
|
||||
continue;
|
||||
@@ -1764,12 +1744,16 @@ void MainWindow::paste() {
|
||||
pasteEvent->setMap(this->editor->map);
|
||||
newEvents.append(pasteEvent);
|
||||
}
|
||||
if (newEvents.empty())
|
||||
return;
|
||||
|
||||
if (!newEvents.empty()) {
|
||||
editor->map->commit(new EventPaste(this->editor, editor->map, newEvents));
|
||||
updateEvents();
|
||||
if (!this->editor->canAddEvents(newEvents)) {
|
||||
WarningMessage::show(QStringLiteral("Unable to paste, the maximum number of events would be exceeded."), this);
|
||||
qDeleteAll(newEvents);
|
||||
return;
|
||||
}
|
||||
|
||||
this->editor->map->commit(new EventPaste(this->editor, this->editor->map, newEvents));
|
||||
updateEvents();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1981,33 +1965,10 @@ void MainWindow::resetMapViewScale() {
|
||||
editor->scaleMapView(0);
|
||||
}
|
||||
|
||||
void MainWindow::addNewEvent(Event::Type type) {
|
||||
if (editor && editor->project) {
|
||||
DraggablePixmapItem *item = editor->addNewEvent(type);
|
||||
if (item) {
|
||||
auto halfSize = ui->graphicsView_Map->size() / 2;
|
||||
auto centerPos = ui->graphicsView_Map->mapToScene(halfSize.width(), halfSize.height());
|
||||
item->moveTo(Metatile::coordFromPixmapCoord(centerPos));
|
||||
updateEvents();
|
||||
editor->selectMapEvent(item);
|
||||
} else {
|
||||
WarningMessage msgBox(QStringLiteral("Failed to add new event."), this);
|
||||
if (Event::typeToGroup(type) == Event::Group::Object) {
|
||||
msgBox.setInformativeText(QString("The limit for object events (%1) has been reached.\n\n"
|
||||
"This limit can be adjusted with %2 in '%3'.")
|
||||
.arg(editor->project->getMaxObjectEvents())
|
||||
.arg(projectConfig.getIdentifier(ProjectIdentifier::define_obj_event_count))
|
||||
.arg(projectConfig.getFilePath(ProjectFilePath::constants_global)));
|
||||
}
|
||||
msgBox.exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::tryAddEventTab(QWidget * tab) {
|
||||
auto group = getEventGroupFromTabWidget(tab);
|
||||
if (editor->map->getNumEvents(group))
|
||||
ui->tabWidget_EventType->addTab(tab, QString("%1s").arg(Event::eventGroupToString(group)));
|
||||
ui->tabWidget_EventType->addTab(tab, QString("%1s").arg(Event::groupToString(group)));
|
||||
}
|
||||
|
||||
void MainWindow::displayEventTabs() {
|
||||
@@ -2022,31 +1983,32 @@ void MainWindow::displayEventTabs() {
|
||||
}
|
||||
|
||||
void MainWindow::updateEvents() {
|
||||
QList<DraggablePixmapItem *> items = editor->getEventPixmapItems();
|
||||
for (auto i = this->lastSelectedEvent.cbegin(), end = this->lastSelectedEvent.cend(); i != end; i++) {
|
||||
if (i.value() && !items.contains(i.value()))
|
||||
this->lastSelectedEvent.insert(i.key(), nullptr);
|
||||
if (this->editor->map) {
|
||||
for (auto i = this->lastSelectedEvent.begin(); i != this->lastSelectedEvent.end(); i++) {
|
||||
if (i.value() && !this->editor->map->hasEvent(i.value()))
|
||||
this->lastSelectedEvent.insert(i.key(), nullptr);
|
||||
}
|
||||
}
|
||||
displayEventTabs();
|
||||
updateSelectedEvents();
|
||||
}
|
||||
|
||||
void MainWindow::updateSelectedEvents() {
|
||||
QList<DraggablePixmapItem *> events;
|
||||
QList<Event*> events;
|
||||
|
||||
if (editor->selected_events && editor->selected_events->length()) {
|
||||
events = *editor->selected_events;
|
||||
if (!this->editor->selectedEvents.isEmpty()) {
|
||||
events = this->editor->selectedEvents;
|
||||
}
|
||||
else {
|
||||
QList<Event *> all_events;
|
||||
if (editor->map) {
|
||||
all_events = editor->map->getEvents();
|
||||
QList<Event *> allEvents;
|
||||
if (this->editor->map) {
|
||||
allEvents = this->editor->map->getEvents();
|
||||
}
|
||||
if (all_events.length()) {
|
||||
DraggablePixmapItem *selectedEvent = all_events.first()->getPixmapItem();
|
||||
if (!allEvents.isEmpty()) {
|
||||
Event *selectedEvent = allEvents.first();
|
||||
if (selectedEvent) {
|
||||
editor->selected_events->append(selectedEvent);
|
||||
editor->redrawEventPixmapItem(selectedEvent);
|
||||
this->editor->selectedEvents.append(selectedEvent);
|
||||
this->editor->redrawEventPixmapItem(selectedEvent->getPixmapItem());
|
||||
events.append(selectedEvent);
|
||||
}
|
||||
}
|
||||
@@ -2059,12 +2021,13 @@ void MainWindow::updateSelectedEvents() {
|
||||
|
||||
if (events.length() == 1) {
|
||||
// single selected event case
|
||||
Event *current = events[0]->event;
|
||||
Event *current = events.constFirst();
|
||||
Event::Group eventGroup = current->getEventGroup();
|
||||
int event_offs = Event::getIndexOffset(eventGroup);
|
||||
|
||||
if (eventGroup != Event::Group::None)
|
||||
this->lastSelectedEvent.insert(eventGroup, current->getPixmapItem());
|
||||
if (eventGroup != Event::Group::None) {
|
||||
this->lastSelectedEvent.insert(eventGroup, current);
|
||||
}
|
||||
|
||||
switch (eventGroup) {
|
||||
case Event::Group::Object: {
|
||||
@@ -2135,8 +2098,7 @@ void MainWindow::updateSelectedEvents() {
|
||||
this->isProgrammaticEventTabChange = false;
|
||||
|
||||
QList<QFrame *> frames;
|
||||
for (DraggablePixmapItem *item : events) {
|
||||
Event *event = item->event;
|
||||
for (auto event : events) {
|
||||
EventFrame *eventFrame = event->createEventFrame();
|
||||
eventFrame->populate(this->editor->project);
|
||||
eventFrame->initialize();
|
||||
@@ -2191,7 +2153,7 @@ Event::Group MainWindow::getEventGroupFromTabWidget(QWidget *tab) {
|
||||
void MainWindow::eventTabChanged(int index) {
|
||||
if (editor->map) {
|
||||
Event::Group group = getEventGroupFromTabWidget(ui->tabWidget_EventType->widget(index));
|
||||
DraggablePixmapItem *selectedItem = this->lastSelectedEvent.value(group, nullptr);
|
||||
Event *selectedEvent = this->lastSelectedEvent.value(group, nullptr);
|
||||
|
||||
switch (group) {
|
||||
case Event::Group::Object:
|
||||
@@ -2214,11 +2176,8 @@ void MainWindow::eventTabChanged(int index) {
|
||||
}
|
||||
|
||||
if (!isProgrammaticEventTabChange) {
|
||||
if (!selectedItem) {
|
||||
Event *event = editor->map->getEvent(group, 0);
|
||||
if (event) selectedItem = event->getPixmapItem();
|
||||
}
|
||||
if (selectedItem) editor->selectMapEvent(selectedItem);
|
||||
if (!selectedEvent) selectedEvent = this->editor->map->getEvent(group, 0);
|
||||
this->editor->selectMapEvent(selectedEvent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user