summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/BoundingBox.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2019-12-05 10:58:03 -0500
committerLioncash <mathew1800@gmail.com>2019-12-05 11:48:42 -0500
commit9bd533ebe4cee1dfef9725f32fe0b9ca42f5680d (patch)
tree4f7b7b1da059b8299e459e76ebbcf930e58c9df0 /Source/Core/VideoCommon/BoundingBox.cpp
parent15fc71cfcf5f94221443aaff99ae559fa3cb4633 (diff)
VideoCommon/BoundingBox: Make interface for querying bounding box data
Rather than expose the bounding box members directly, we can instead provide an interface for code to use. This makes it nicer to transition from global data, as the interface function names are already in place.
Diffstat (limited to 'Source/Core/VideoCommon/BoundingBox.cpp')
-rw-r--r--Source/Core/VideoCommon/BoundingBox.cpp63
1 files changed, 57 insertions, 6 deletions
diff --git a/Source/Core/VideoCommon/BoundingBox.cpp b/Source/Core/VideoCommon/BoundingBox.cpp
index 4c9b6c4c3b..7c2127d353 100644
--- a/Source/Core/VideoCommon/BoundingBox.cpp
+++ b/Source/Core/VideoCommon/BoundingBox.cpp
@@ -3,20 +3,71 @@
// Refer to the license.txt file included.
#include "VideoCommon/BoundingBox.h"
+
+#include <algorithm>
+#include <array>
+
#include "Common/ChunkFile.h"
#include "Common/CommonTypes.h"
namespace BoundingBox
{
-// External vars
-bool active = false;
-u16 coords[4] = {0x80, 0xA0, 0x80, 0xA0};
+namespace
+{
+// Whether or not bounding box is enabled.
+bool s_is_active = false;
+
+// Current bounding box coordinates.
+std::array<u16, 4> s_coordinates{
+ 0x80,
+ 0xA0,
+ 0x80,
+ 0xA0,
+};
+} // Anonymous namespace
+
+void Enable()
+{
+ s_is_active = true;
+}
+
+void Disable()
+{
+ s_is_active = false;
+}
+
+bool IsEnabled()
+{
+ return s_is_active;
+}
+
+u16 GetCoordinate(Coordinate coordinate)
+{
+ return s_coordinates[static_cast<u32>(coordinate)];
+}
+
+void SetCoordinate(Coordinate coordinate, u16 value)
+{
+ s_coordinates[static_cast<u32>(coordinate)] = value;
+}
+
+void Update(u16 left, u16 right, u16 top, u16 bottom)
+{
+ const u16 new_left = std::min(left, GetCoordinate(Coordinate::Left));
+ const u16 new_right = std::max(right, GetCoordinate(Coordinate::Right));
+ const u16 new_top = std::min(top, GetCoordinate(Coordinate::Top));
+ const u16 new_bottom = std::max(bottom, GetCoordinate(Coordinate::Bottom));
+
+ SetCoordinate(Coordinate::Left, new_left);
+ SetCoordinate(Coordinate::Right, new_right);
+ SetCoordinate(Coordinate::Top, new_top);
+ SetCoordinate(Coordinate::Bottom, new_bottom);
+}
-// Save state
void DoState(PointerWrap& p)
{
- p.Do(active);
- p.Do(coords);
+ p.Do(s_is_active);
+ p.DoArray(s_coordinates);
}
} // namespace BoundingBox