1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-12-22 08:53:09 +00:00

Remove rendered segments outside the map grid again

This commit is contained in:
Evil Eye 2025-09-11 17:04:07 +02:00
parent cd60d0e8c5
commit a7a99145cf
3 changed files with 22 additions and 5 deletions

View file

@ -391,7 +391,7 @@ namespace MWGui
const int x = cell.getGridX(); const int x = cell.getGridX();
const int y = cell.getGridY(); const int y = cell.getGridY();
MyGUI::IntSize oldSize{ mGrid.width(), mGrid.height() }; const MyGUI::IntRect prevGrid = mGrid;
if (cell.isExterior()) if (cell.isExterior())
{ {
@ -424,6 +424,18 @@ namespace MWGui
++it; ++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 else
{ {
@ -471,7 +483,7 @@ namespace MWGui
resetEntry(mMaps[i], false, nullptr); 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<int>(getWidgetSize())); setCanvasSize(mLocalMap, mGrid, static_cast<int>(getWidgetSize()));
// Delay the door markers update until scripts have been given a chance to run. // Delay the door markers update until scripts have been given a chance to run.

View file

@ -206,13 +206,16 @@ namespace MWRender
std::make_pair(cell->getCell()->getGridX(), cell->getCell()->getGridY()), MapSegment{}); 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) void LocalMap::removeCell(MWWorld::CellStore* cell)
{ {
saveFogOfWar(cell); saveFogOfWar(cell);
if (cell->isExterior()) if (!cell->isExterior())
mExteriorSegments.erase({ cell->getCell()->getGridX(), cell->getCell()->getGridY() });
else
mInteriorSegments.clear(); mInteriorSegments.clear();
} }
@ -301,6 +304,7 @@ namespace MWRender
return; return;
mInterior = true; mInterior = true;
mExteriorSegments.clear();
mBounds = bounds; mBounds = bounds;

View file

@ -55,6 +55,7 @@ namespace MWRender
void requestMap(const MWWorld::CellStore* cell); void requestMap(const MWWorld::CellStore* cell);
void addCell(MWWorld::CellStore* cell); void addCell(MWWorld::CellStore* cell);
void removeExteriorCell(int x, int y);
void removeCell(MWWorld::CellStore* cell); void removeCell(MWWorld::CellStore* cell);