From 59942d3de037b153563f463af884f9fe5e861904 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 16 May 2020 14:00:03 +0200 Subject: [PATCH] Added arithmetic operators --- SDLU/structures/Vector2.hpp | 101 ++++++++++++++++++++++++++++++++++++ SDLU_Example/main.cpp | 5 +- 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/SDLU/structures/Vector2.hpp b/SDLU/structures/Vector2.hpp index 2bd8664..cd5ccc4 100644 --- a/SDLU/structures/Vector2.hpp +++ b/SDLU/structures/Vector2.hpp @@ -17,6 +17,8 @@ namespace sdlu T x; ///< x component T y; ///< y component + //################## CONSTRUCTORS ##################// + /// Initializes a zero vector Vector2() : x(0), y(0) @@ -37,8 +39,107 @@ namespace sdlu { // Empty } + + + //################## OPERATORS ##################// + + friend Vector2 operator-(const Vector2& right) + { + return Vector2(-right.x, -right.y); + } + + friend Vector2 operator+(const Vector2& left, const Vector2& right) + { + return Vector2(left.x + right.x, left.y + right.y); + } + + friend Vector2 operator-(const Vector2& left, const Vector2& right) + { + return left + (-right) + } + + friend Vector2 operator*(const Vector2& left, const Vector2& right) + { + return Vector2(left.x * right.x, left.y * right.y); + } + + friend Vector2 operator/(const Vector2& left, const Vector2& right) + { + return Vector2(left.x / right.x, left.y / right.y); + } + + friend Vector2 operator*(T left, const Vector2& right) + { + return Vector2(left * right.x, left * right.y); + } + + friend Vector2 operator*(const Vector2& left, T right) + { + return right * left; + } + + friend Vector2 operator/(const Vector2& left, T right) + { + return Vector2(left.x / right, left.y / right); + } + + friend Vector2& operator+=(Vector2& left, const Vector2& right) + { + left.x += right.x; + left.y += right.y; + return left; + } + + friend Vector2& operator-=(Vector2& left, const Vector2& right) + { + left += (-right); + return left; + } + + friend Vector2& operator*=(Vector2& left, const Vector2& right) + { + left.x *= right.x; + left.y *= right.y; + return left; + } + + friend Vector2& operator/(Vector2& left, const Vector2& right) + { + left.x /= right.x; + left.y /= right.y; + return left; + } + + friend Vector2& operator*=(Vector2& left, T right) + { + left.x *= right; + left.y *= right; + return left; + } + + friend Vector2& operator/=(Vector2& left, T right) + { + left.x /= right; + left.y /= right; + return left; + } + + friend bool operator==(const Vector2& left, const Vector2& right) + { + return ((left.x == right.x) && (left.y == right.y)); + } + + friend bool operator!=(const Vector2& left, const Vector2& right) + { + return !(left == right); + } }; + + + + //################## TYPEDEFS ##################// + typedef Vector2 Vector2u, Vec2u; typedef Vector2 Vector2i, Vec2i; typedef Vector2 Vector2f, Vec2f; diff --git a/SDLU_Example/main.cpp b/SDLU_Example/main.cpp index dcb4d5f..75739b8 100644 --- a/SDLU_Example/main.cpp +++ b/SDLU_Example/main.cpp @@ -4,7 +4,10 @@ int main(int argc, char** argv) { - sdlu::Vector2f vec(.4f, -2.3f); + sdlu::Vector2f vecA(.4f, -2.3f); + sdlu::Vector2f vecB(-8.9f, 0.003f); + sdlu::Vector2f vec = vecA + vecB; + std::cout << "Vector2f: " << vec.x << ", " << vec.y << std::endl; return 0;