#pragma once #include "engine/data/vector2.hpp" #include enum CoordsValidation { VALID, X_HIGH, X_LOW, Y_HIGH, Y_LOW }; struct BoundsOptions { uint32_t width; uint32_t height; }; class Bounds { public: using Value = uint32_t; explicit Bounds(const BoundsOptions &options) noexcept; [[nodiscard]] Value get_width() const noexcept; void set_width(Value width) noexcept; [[nodiscard]] Value get_height() const noexcept; void set_height(Value height) noexcept; [[nodiscard]] CoordsValidation validate_coords(const Vector2 &coords) const noexcept; const Bounds &operator*=(const Bounds &rhs) noexcept; const Bounds &operator+=(const Bounds &rhs) noexcept; const Bounds &operator-=(const Bounds &rhs) noexcept; Bounds operator-(const Bounds &rhs) const noexcept; private: Value _width = 0U; Value _height = 0U; };