#pragma once #include "Vector2.h" namespace quadtree { template class Box { public: T left; T top; T width; // Must be positive T height; // Must be positive constexpr Box(T Left = 0, T Top = 0, T Width = 0, T Height = 0) noexcept : left(Left), top(Top), width(Width), height(Height) { } constexpr Box(const Vector2& position, const Vector2& size) noexcept : left(position.x), top(position.y), width(size.x), height(size.y) { } constexpr T getRight() const noexcept { return left + width; } constexpr T getBottom() const noexcept { return top + height; } constexpr Vector2 getTopLeft() const noexcept { return Vector2(left, top); } constexpr Vector2 getCenter() const noexcept { return Vector2(left + width / 2, top + height / 2); } constexpr Vector2 getSize() const noexcept { return Vector2(width, height); } constexpr bool contains(const Box& box) const noexcept { return left <= box.left && box.getRight() <= getRight() && top <= box.top && box.getBottom() <= getBottom(); } constexpr bool intersects(const Box& box) const noexcept { return !(left >= box.getRight() || getRight() <= box.left || top >= box.getBottom() || getBottom() <= box.top); } }; }