Hide connection tiles that cant be seen from current map
This commit is contained in:
parent
f404f8c11f
commit
2f20a5d0b3
3 changed files with 36 additions and 0 deletions
|
@ -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;
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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()));
|
||||||
|
|
Loading…
Reference in a new issue