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:
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user