Hide connection tiles that cant be seen from current map

This commit is contained in:
BigBahss 2020-10-14 01:57:59 -04:00
parent f404f8c11f
commit 2f20a5d0b3
3 changed files with 36 additions and 0 deletions

View file

@ -64,6 +64,7 @@ public:
void displayMapBorder(); void displayMapBorder();
void displayMapGrid(); void displayMapGrid();
void displayWildMonTables(); void displayWildMonTables();
void maskNonVisibleConnectionTiles();
void updateMapBorder(); void updateMapBorder();
void updateMapConnections(); void updateMapConnections();
@ -109,6 +110,7 @@ public:
ConnectionPixmapItem* selected_connection_item = nullptr; ConnectionPixmapItem* selected_connection_item = nullptr;
QList<QGraphicsPixmapItem*> connection_items; QList<QGraphicsPixmapItem*> connection_items;
QList<ConnectionPixmapItem*> connection_edit_items; QList<ConnectionPixmapItem*> connection_edit_items;
QGraphicsPathItem *connection_mask = nullptr;
CollisionPixmapItem *collision_item = nullptr; CollisionPixmapItem *collision_item = nullptr;
QGraphicsItemGroup *events_group = nullptr; QGraphicsItemGroup *events_group = nullptr;
QList<QGraphicsPixmapItem*> borderItems; QList<QGraphicsPixmapItem*> borderItems;

View file

@ -759,11 +759,13 @@ void Editor::updateCurrentConnectionDirection(QString curDirection) {
QString originalDirection = selected_connection_item->connection->direction; QString originalDirection = selected_connection_item->connection->direction;
setCurrentConnectionDirection(curDirection); setCurrentConnectionDirection(curDirection);
updateMirroredConnectionDirection(selected_connection_item->connection, originalDirection); updateMirroredConnectionDirection(selected_connection_item->connection, originalDirection);
maskNonVisibleConnectionTiles();
} }
void Editor::onConnectionMoved(MapConnection* connection) { void Editor::onConnectionMoved(MapConnection* connection) {
updateMirroredConnectionOffset(connection); updateMirroredConnectionOffset(connection);
onConnectionOffsetChanged(connection->offset.toInt()); onConnectionOffsetChanged(connection->offset.toInt());
maskNonVisibleConnectionTiles();
} }
void Editor::onConnectionOffsetChanged(int newOffset) { void Editor::onConnectionOffsetChanged(int newOffset) {
@ -1458,6 +1460,8 @@ void Editor::displayMapConnections() {
if (!connection_edit_items.empty()) { if (!connection_edit_items.empty()) {
onConnectionItemSelected(connection_edit_items.first()); onConnectionItemSelected(connection_edit_items.first());
} }
maskNonVisibleConnectionTiles();
} }
void Editor::createConnectionItem(MapConnection* connection, bool hide) { void Editor::createConnectionItem(MapConnection* connection, bool hide) {
@ -1502,6 +1506,31 @@ void Editor::createConnectionItem(MapConnection* connection, bool hide) {
connection_edit_items.append(connection_edit_item); connection_edit_items.append(connection_edit_item);
} }
// Hides connected map tiles that cannot be seen from the current map (beyond BORDER_DISTANCE).
void Editor::maskNonVisibleConnectionTiles() {
if (connection_mask) {
if (connection_mask->scene()) {
connection_mask->scene()->removeItem(connection_mask);
}
delete connection_mask;
}
QPainterPath mask;
mask.addRect(scene->itemsBoundingRect().toRect());
mask.addRect(
-BORDER_DISTANCE * 16,
-BORDER_DISTANCE * 16,
(map->getWidth() + BORDER_DISTANCE * 2) * 16,
(map->getHeight() + BORDER_DISTANCE * 2) * 16
);
// Mask the tiles with the current theme's background color.
QPen pen(ui->graphicsView_Map->palette().color(QPalette::Base));
QBrush brush(ui->graphicsView_Map->palette().color(QPalette::Base));
connection_mask = scene->addPath(mask, pen, brush);
}
void Editor::displayMapBorder() { void Editor::displayMapBorder() {
for (QGraphicsPixmapItem* item : borderItems) { for (QGraphicsPixmapItem* item : borderItems) {
if (item->scene()) { if (item->scene()) {
@ -1548,6 +1577,8 @@ void Editor::updateMapConnections() {
connection_edit_items[i]->basePixmap = pixmap; connection_edit_items[i]->basePixmap = pixmap;
connection_edit_items[i]->setPixmap(pixmap); connection_edit_items[i]->setPixmap(pixmap);
} }
maskNonVisibleConnectionTiles();
} }
int Editor::getBorderDrawDistance(int dimension) { int Editor::getBorderDrawDistance(int dimension) {
@ -1604,6 +1635,7 @@ void Editor::updateConnectionOffset(int offset) {
} }
selected_connection_item->blockSignals(false); selected_connection_item->blockSignals(false);
updateMirroredConnectionOffset(selected_connection_item->connection); updateMirroredConnectionOffset(selected_connection_item->connection);
maskNonVisibleConnectionTiles();
} }
void Editor::setConnectionMap(QString mapName) { void Editor::setConnectionMap(QString mapName) {
@ -1624,6 +1656,7 @@ void Editor::setConnectionMap(QString mapName) {
selected_connection_item->connection->map_name = mapName; selected_connection_item->connection->map_name = mapName;
setCurrentConnectionDirection(selected_connection_item->connection->direction); setCurrentConnectionDirection(selected_connection_item->connection->direction);
updateMirroredConnectionMap(selected_connection_item->connection, originalMapName); updateMirroredConnectionMap(selected_connection_item->connection, originalMapName);
maskNonVisibleConnectionTiles();
} }
void Editor::addNewConnection() { void Editor::addNewConnection() {

View file

@ -2536,6 +2536,7 @@ void MainWindow::on_actionThemes_triggered()
QString theme = themeSelector->currentText(); QString theme = themeSelector->currentText();
porymapConfig.setTheme(theme); porymapConfig.setTheme(theme);
this->setTheme(theme); this->setTheme(theme);
editor->maskNonVisibleConnectionTiles();
} }
}); });
connect(&buttonBox, SIGNAL(rejected()), &themeSelectorWindow, SLOT(reject())); connect(&buttonBox, SIGNAL(rejected()), &themeSelectorWindow, SLOT(reject()));