diff --git a/apps/openmw/mwgui/mapwindow.cpp b/apps/openmw/mwgui/mapwindow.cpp index 448d44e7cb..b101b2f40e 100644 --- a/apps/openmw/mwgui/mapwindow.cpp +++ b/apps/openmw/mwgui/mapwindow.cpp @@ -391,7 +391,7 @@ namespace MWGui const int x = cell.getGridX(); const int y = cell.getGridY(); - MyGUI::IntSize oldSize{ mGrid.width(), mGrid.height() }; + const MyGUI::IntRect prevGrid = mGrid; if (cell.isExterior()) { @@ -424,6 +424,18 @@ namespace MWGui ++it; } } + + if (mActiveCell && mActiveCell->isExterior()) + { + for (int cx = prevGrid.left; cx <= prevGrid.right; ++cx) + { + for (int cy = prevGrid.top; cy <= prevGrid.bottom; ++cy) + { + if (!mGrid.inside({ cx, cy })) + mLocalMapRender->removeExteriorCell(cx, cy); + } + } + } } else { @@ -471,7 +483,7 @@ namespace MWGui resetEntry(mMaps[i], false, nullptr); } - if (oldSize != MyGUI::IntSize{ mGrid.width(), mGrid.height() }) + if (prevGrid.width() != mGrid.width() || prevGrid.height() != mGrid.height()) setCanvasSize(mLocalMap, mGrid, static_cast(getWidgetSize())); // Delay the door markers update until scripts have been given a chance to run. diff --git a/apps/openmw/mwrender/localmap.cpp b/apps/openmw/mwrender/localmap.cpp index 5cdf084a45..39d088084f 100644 --- a/apps/openmw/mwrender/localmap.cpp +++ b/apps/openmw/mwrender/localmap.cpp @@ -206,13 +206,16 @@ namespace MWRender std::make_pair(cell->getCell()->getGridX(), cell->getCell()->getGridY()), MapSegment{}); } + void LocalMap::removeExteriorCell(int x, int y) + { + mExteriorSegments.erase({ x, y }); + } + void LocalMap::removeCell(MWWorld::CellStore* cell) { saveFogOfWar(cell); - if (cell->isExterior()) - mExteriorSegments.erase({ cell->getCell()->getGridX(), cell->getCell()->getGridY() }); - else + if (!cell->isExterior()) mInteriorSegments.clear(); } @@ -301,6 +304,7 @@ namespace MWRender return; mInterior = true; + mExteriorSegments.clear(); mBounds = bounds; diff --git a/apps/openmw/mwrender/localmap.hpp b/apps/openmw/mwrender/localmap.hpp index aa27b489f9..c5b63766b7 100644 --- a/apps/openmw/mwrender/localmap.hpp +++ b/apps/openmw/mwrender/localmap.hpp @@ -55,6 +55,7 @@ namespace MWRender void requestMap(const MWWorld::CellStore* cell); void addCell(MWWorld::CellStore* cell); + void removeExteriorCell(int x, int y); void removeCell(MWWorld::CellStore* cell);