summaryrefslogtreecommitdiff
path: root/engine/src/Rect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/Rect.cpp')
-rw-r--r--engine/src/Rect.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/engine/src/Rect.cpp b/engine/src/Rect.cpp
new file mode 100644
index 0000000..293e099
--- /dev/null
+++ b/engine/src/Rect.cpp
@@ -0,0 +1,74 @@
+#include <kurator/engine/Rect.h>
+
+#include <algorithm>
+#include <cmath>
+
+#include <raylib.h>
+
+#include <kurator/engine/Point.h>
+
+
+using std::abs;
+
+
+namespace kurator
+{
+namespace engine
+{
+
+
+Rect::Rect() :
+ position {0, 0},
+ size {0, 0}
+{
+}
+
+
+Rect::Rect(const Point& first, const Point& second) :
+ position {std::min(first.x, second.x), std::min(first.y, second.y)},
+ size {abs(second - first)}
+{
+}
+
+
+Point Rect::topleft() const
+{
+ return position;
+}
+
+
+Point Rect::bottomright() const
+{
+ return position + size;
+}
+
+
+Point Rect::center() const
+{
+ return position + size.scale(0.5);
+}
+
+
+bool Rect::contains(const Point& point)
+{
+ const auto br = bottomright();
+ return point.x >= position.x && point.x <= br.x && point.y >= position.y && point.y <= br.y;
+}
+
+
+bool Rect::contains(const Point& circle, double radius)
+{
+ return CheckCollisionCircleRec(
+ {static_cast<float>(circle.x), static_cast<float>(circle.y)},
+ radius,
+ {
+ static_cast<float>(position.x),
+ static_cast<float>(position.y),
+ static_cast<float>(size.x),
+ static_cast<float>(size.y)
+ });
+}
+
+
+} // namespace engine
+} // namespace kurator