// Copyright (C) 2012 Jérôme Leclercq // This file is part of the "Nazara Engine - Mathematics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_RECT_HPP #define NAZARA_RECT_HPP #include #include template class NzRect { public: NzRect(); NzRect(T X, T Y, T Width, T Height); NzRect(const T rect[4]); NzRect(const NzVector2& vec1, const NzVector2& vec2); template explicit NzRect(const NzRect& rect); NzRect(const NzRect& rect) = default; ~NzRect() = default; bool Contains(T X, T Y) const; bool Contains(const NzVector2& point) const; bool Contains(const NzRect& rect) const; void ExtendTo(const NzVector2& point); void ExtendTo(const NzRect& rect); NzVector2 GetCenter() const; bool Intersect(const NzRect& rect, NzRect* intersection = nullptr) const; bool IsValid() const; void MakeZero(); void Set(T X, T Y, T Width, T Height); void Set(const T rect[4]); void Set(const NzVector2& vec1, const NzVector2& vec2); template void Set(const NzRect& rect); NzString ToString() const; operator NzString() const; T& operator[](unsigned int i); T operator[](unsigned int i) const; NzRect operator*(T scalar) const; NzRect& operator*=(T scalar); bool operator==(const NzRect& rect) const; bool operator!=(const NzRect& rect) const; static NzRect Lerp(const NzRect& from, const NzRect& to, T interpolation); static NzRect Zero(); T x, y, width, height; }; template std::ostream& operator<<(std::ostream& out, const NzRect& vec); typedef NzRect NzRectd; typedef NzRect NzRectf; typedef NzRect NzRecti; typedef NzRect NzRectui; #include #endif // NAZARA_RECT_HPP