diff options
Diffstat (limited to 'engine')
-rw-r--r-- | engine/CMakeLists.txt | 1 | ||||
-rw-r--r-- | engine/include/kurator/engine/Point.h | 1 | ||||
-rw-r--r-- | engine/include/kurator/engine/Rect.h | 27 | ||||
-rw-r--r-- | engine/src/Point.cpp | 7 | ||||
-rw-r--r-- | engine/src/Rect.cpp | 74 |
5 files changed, 110 insertions, 0 deletions
diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 7cb7f20..266e109 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -4,6 +4,7 @@ add_library( src/Camera.cpp src/Clock.cpp src/Point.cpp + src/Rect.cpp ) target_include_directories( ${PROJECT_NAME} diff --git a/engine/include/kurator/engine/Point.h b/engine/include/kurator/engine/Point.h index 4b352d6..eecf2c6 100644 --- a/engine/include/kurator/engine/Point.h +++ b/engine/include/kurator/engine/Point.h @@ -23,6 +23,7 @@ struct Point Point subtract(double _x, double _y) const; bool operator==(const Point& other) const; bool operator!=(const Point& other) const; + friend Point abs(const Point& point); }; diff --git a/engine/include/kurator/engine/Rect.h b/engine/include/kurator/engine/Rect.h new file mode 100644 index 0000000..d485937 --- /dev/null +++ b/engine/include/kurator/engine/Rect.h @@ -0,0 +1,27 @@ +#pragma once + +#include "Point.h" + + +namespace kurator +{ +namespace engine +{ + + +struct Rect +{ + Rect(); + Rect(const Point& first, const Point& second); + Point position; + Point size; + Point topleft() const; + Point bottomright() const; + Point center() const; + bool contains(const Point& point); + bool contains(const Point& circle, double radius); +}; + + +} // namespace engine +} // namespace kurator diff --git a/engine/src/Point.cpp b/engine/src/Point.cpp index e01de57..8dd50bd 100644 --- a/engine/src/Point.cpp +++ b/engine/src/Point.cpp @@ -96,5 +96,12 @@ Point::operator!=(const Point& other) const } +Point +abs(const Point& point) +{ + return {std::abs(point.x), std::abs(point.y)}; +} + + } // namespace engine } // namespace kurator 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 |