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

View file

@ -759,11 +759,13 @@ void Editor::updateCurrentConnectionDirection(QString curDirection) {
QString originalDirection = selected_connection_item->connection->direction;
setCurrentConnectionDirection(curDirection);
updateMirroredConnectionDirection(selected_connection_item->connection, originalDirection);
maskNonVisibleConnectionTiles();
}
void Editor::onConnectionMoved(MapConnection* connection) {
updateMirroredConnectionOffset(connection);
onConnectionOffsetChanged(connection->offset.toInt());
maskNonVisibleConnectionTiles();
}
void Editor::onConnectionOffsetChanged(int newOffset) {
@ -1458,6 +1460,8 @@ void Editor::displayMapConnections() {
if (!connection_edit_items.empty()) {
onConnectionItemSelected(connection_edit_items.first());
}
maskNonVisibleConnectionTiles();
}
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);
}
// 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() {
for (QGraphicsPixmapItem* item : borderItems) {
if (item->scene()) {
@ -1548,6 +1577,8 @@ void Editor::updateMapConnections() {
connection_edit_items[i]->basePixmap = pixmap;
connection_edit_items[i]->setPixmap(pixmap);
}
maskNonVisibleConnectionTiles();
}
int Editor::getBorderDrawDistance(int dimension) {
@ -1604,6 +1635,7 @@ void Editor::updateConnectionOffset(int offset) {
}
selected_connection_item->blockSignals(false);
updateMirroredConnectionOffset(selected_connection_item->connection);
maskNonVisibleConnectionTiles();
}
void Editor::setConnectionMap(QString mapName) {
@ -1624,6 +1656,7 @@ void Editor::setConnectionMap(QString mapName) {
selected_connection_item->connection->map_name = mapName;
setCurrentConnectionDirection(selected_connection_item->connection->direction);
updateMirroredConnectionMap(selected_connection_item->connection, originalMapName);
maskNonVisibleConnectionTiles();
}
void Editor::addNewConnection() {

View file

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