#include "vector2.hpp" #include "util/hash.hpp" auto Vector2::get_x() const noexcept -> Vector2::Value { return _x; } void Vector2::set_x(Vector2::Value x) noexcept { _x = x; } auto Vector2::get_y() const noexcept -> Vector2::Value { return _y; } void Vector2::set_y(Vector2::Value y) noexcept { _y = y; } auto Vector2::to_direction(const Vector2 &direction, Vector2::Value amount) const noexcept -> Vector2 { return *this + (direction * Vector2({ .x = amount, .y = amount })); } auto Vector2::operator+=(const Vector2 &rhs) noexcept -> const Vector2 & { _x += rhs._x; _y += rhs._y; return *this; } auto Vector2::operator-=(const Vector2 &rhs) noexcept -> const Vector2 & { _x -= rhs._x; _y -= rhs._y; return *this; } auto Vector2::operator+(const Vector2 &rhs) const noexcept -> Vector2 { auto new_vector2 = Vector2(*this); new_vector2._x += rhs._x; new_vector2._y += rhs._y; return new_vector2; } auto Vector2::operator-(const Vector2 &rhs) const noexcept -> Vector2 { auto new_vector2 = Vector2(*this); new_vector2._x -= rhs._x; new_vector2._y -= rhs._y; return new_vector2; } auto Vector2::operator*(const Vector2 &rhs) const noexcept -> Vector2 { auto new_vector2 = *this; new_vector2._x *= rhs._x; new_vector2._y *= rhs._y; return new_vector2; } auto Vector2::operator==(const Vector2 &rhs) const noexcept -> bool { return _x == rhs._x && _y == rhs._y; } auto Vector2Hasher::operator()(const Vector2 &vector2) const noexcept -> std::size_t { std::size_t result_hash = 0; hash_combine(result_hash, vector2.get_x()); hash_combine(result_hash, vector2.get_y()); return result_hash; }