mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-22 07:23:06 +00:00
Remove rendered segments outside the map grid again
This commit is contained in:
parent
cd60d0e8c5
commit
a7a99145cf
3 changed files with 22 additions and 5 deletions
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue