1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Invalidate map selection region and arrow only if changed

This commit is contained in:
mix
2025-11-16 03:13:08 +00:00
parent f3cedcc1d9
commit 68dc53bfc8
3 changed files with 60 additions and 0 deletions

View File

@@ -24,6 +24,7 @@
#include "../scenes/intro/IntroScene.h"
#include "../ui/UiContext.h"
#include "../ui/WindowManager.h"
#include "../world/MapSelection.h"
#include "../world/TileInspector.h"
using namespace OpenRCT2;
@@ -48,6 +49,7 @@ void Painter::Paint(IDrawingEngine& de)
}
else
{
MapSelection::Invalidate();
VirtualFloorInvalidate(false);
de.PaintWindows();

View File

@@ -21,6 +21,12 @@ uint8_t gMapSelectArrowDirection;
std::vector<CoordsXY> gMapSelectionTiles;
static MapSelectFlags _previousMapSelectFlags;
static CoordsXY _previousMapSelectPositionA;
static CoordsXY _previousMapSelectPositionB;
static CoordsXYZ _previousMapSelectArrowPosition;
static uint8_t _previousMapSelectArrowDirection;
MapRange getMapSelectRange()
{
return MapRange(gMapSelectPositionA, gMapSelectPositionB);
@@ -37,3 +43,50 @@ void setMapSelectRange(const CoordsXY coords)
{
setMapSelectRange({ coords, coords });
}
namespace OpenRCT2::MapSelection
{
void Invalidate()
{
if (!_previousMapSelectFlags.has(MapSelectFlag::enable) && gMapSelectFlags.has(MapSelectFlag::enable))
{
MapInvalidateRegion(gMapSelectPositionA, gMapSelectPositionB);
}
else if (_previousMapSelectFlags.has(MapSelectFlag::enable) && !gMapSelectFlags.has(MapSelectFlag::enable))
{
MapInvalidateRegion(_previousMapSelectPositionA, _previousMapSelectPositionB);
}
else if (
gMapSelectFlags.has(MapSelectFlag::enable)
&& (_previousMapSelectPositionA != gMapSelectPositionA || _previousMapSelectPositionB != gMapSelectPositionB))
{
MapInvalidateRegion(_previousMapSelectPositionA, _previousMapSelectPositionB);
MapInvalidateRegion(gMapSelectPositionA, gMapSelectPositionB);
}
if (!_previousMapSelectFlags.has(MapSelectFlag::enableArrow) && gMapSelectFlags.has(MapSelectFlag::enableArrow))
{
MapInvalidateTile({ gMapSelectArrowPosition, gMapSelectArrowPosition.z });
}
else if (_previousMapSelectFlags.has(MapSelectFlag::enableArrow) && !gMapSelectFlags.has(MapSelectFlag::enableArrow))
{
MapInvalidateTile({ _previousMapSelectArrowPosition, _previousMapSelectArrowPosition.z });
}
else if (gMapSelectFlags.has(MapSelectFlag::enableArrow) && _previousMapSelectArrowPosition != gMapSelectArrowPosition)
{
MapInvalidateTile({ _previousMapSelectArrowPosition, _previousMapSelectArrowPosition.z });
MapInvalidateTile({ gMapSelectArrowPosition, gMapSelectArrowPosition.z });
}
else if (_previousMapSelectArrowDirection != gMapSelectArrowDirection)
{
MapInvalidateTile({ gMapSelectArrowPosition, gMapSelectArrowPosition.z });
}
_previousMapSelectFlags = gMapSelectFlags;
_previousMapSelectPositionA = gMapSelectPositionA;
_previousMapSelectPositionB = gMapSelectPositionB;
_previousMapSelectArrowPosition = gMapSelectArrowPosition;
_previousMapSelectArrowDirection = gMapSelectArrowDirection;
}
} // namespace OpenRCT2::MapSelection

View File

@@ -66,3 +66,8 @@ extern std::vector<CoordsXY> gMapSelectionTiles;
MapRange getMapSelectRange();
void setMapSelectRange(const MapRange& range);
void setMapSelectRange(const CoordsXY coords);
namespace OpenRCT2::MapSelection
{
void Invalidate();
} // namespace OpenRCT2::MapSelection