diff --git a/tempest/CMakeLists.txt b/tempest/CMakeLists.txt index a730533..fb04450 100644 --- a/tempest/CMakeLists.txt +++ b/tempest/CMakeLists.txt @@ -1,6 +1,7 @@ file(GLOB TEMPEST_SOURCES "*.cpp" "matrix/*.cpp" + "rect/*.cpp" "vector/*.cpp" ) diff --git a/tempest/Rect.hpp b/tempest/Rect.hpp new file mode 100644 index 0000000..abe3566 --- /dev/null +++ b/tempest/Rect.hpp @@ -0,0 +1,6 @@ +#ifndef TEMPEST_RECT_HPP +#define TEMPEST_RECT_HPP + +#include "tempest/rect/CRect.hpp" + +#endif diff --git a/tempest/rect/CRect.cpp b/tempest/rect/CRect.cpp new file mode 100644 index 0000000..96df04a --- /dev/null +++ b/tempest/rect/CRect.cpp @@ -0,0 +1,25 @@ +#include "tempest/rect/CRect.hpp" +#include "tempest/Vector.hpp" + +CRect CRect::Intersection(const CRect& l, const CRect& r) { + CRect i; + + i.maxX = r.maxX <= l.maxX ? r.maxX : l.maxX; + i.maxY = r.maxY <= l.maxY ? r.maxY : l.maxY; + i.minX = r.minX >= l.minX ? r.minX : l.minX; + i.minY = r.minY >= l.minY ? r.minY : l.minY; + + return i; +} + +bool CRect::operator==(const CRect& rect) { + return this->minX == rect.minX && this->minY == rect.minY && this->maxX == rect.maxX && this->maxY == rect.maxY; +} + +bool CRect::IsPointInside(const C2Vector& pt) { + return this->minX <= pt.x && this->maxX >= pt.x && this->minY <= pt.y && this->maxY >= pt.y; +} + +bool CRect::Sub4826D0() const { + return this->maxY < 0.0f || this->minY > 1.0f || this->maxX < 0.0f || this->minX > 1.0f; +} diff --git a/tempest/rect/CRect.hpp b/tempest/rect/CRect.hpp new file mode 100644 index 0000000..b831620 --- /dev/null +++ b/tempest/rect/CRect.hpp @@ -0,0 +1,29 @@ +#ifndef TEMPEST_RECT_C_RECT_HPP +#define TEMPEST_RECT_C_RECT_HPP + +class C2Vector; + +class CRect { + public: + // Static functions + static CRect Intersection(const CRect& l, const CRect& r); + + // Member variables + float minY = 0.0f; // t + float minX = 0.0f; // l + float maxY = 0.0f; // b + float maxX = 0.0f; // r + + // Member functions + CRect() = default; + CRect(float minY, float minX, float maxY, float maxX) + : minY(minY) + , minX(minX) + , maxY(maxY) + , maxX(maxX) {}; + bool operator==(const CRect& r); + bool IsPointInside(const C2Vector& pt); + bool Sub4826D0() const; +}; + +#endif diff --git a/test/Rect.cpp b/test/Rect.cpp new file mode 100644 index 0000000..077197e --- /dev/null +++ b/test/Rect.cpp @@ -0,0 +1,20 @@ +#include "tempest/Rect.hpp" +#include "test/Test.hpp" + +TEST_CASE("CRect", "[rect]") { + SECTION("constructs with default constructor") { + CRect rect; + CHECK(rect.minY == 0.0f); + CHECK(rect.minX == 0.0f); + CHECK(rect.maxY == 0.0f); + CHECK(rect.maxX == 0.0f); + } + + SECTION("constructs with minY minX maxY maxX constructor") { + auto rect = CRect(1.0f, 2.0f, 3.0f, 4.0f); + CHECK(rect.minY == 1.0f); + CHECK(rect.minX == 2.0f); + CHECK(rect.maxY == 3.0f); + CHECK(rect.maxX == 4.0f); + } +}