#pragma once #include template class Size2 { public: T width; T height; public: Size2() : width{ 0 }, height{ 0 } { } Size2(T width, T height) : width{ width }, height{ height } { } Size2(glm::vec<2, T> vec) : width{ vec.x }, height{ vec.y } { } operator glm::vec<2, T>() const { return { width, height }; } glm::vec<2, T> AsVec() const { return { width, height }; } friend bool operator==(const Size2&, const Size2&) = default; template Size2 Cast() const { return { static_cast(width), static_cast(height), }; } }; template Size2 operator+(Size2 a, Size2 b) { return { a.width + b.width, a.height + b.height }; } template Size2 operator-(Size2 a, Size2 b) { return { a.width - b.width, a.height - b.height }; } template auto operator*(Size2 a, N mult) -> Size2 { return { a.width * mult, a.height * mult }; } template auto operator/(Size2 a, N mult) -> Size2 { return { a.width / mult, a.height / mult }; }