/********************\
|  Copyright 2024,   |
|       Ulysse Cura  |
\********************/

//////////////////////////////////////////////////////////////////////
//                                                                  //
//   Vector2D et une classe template qui est similaire a SDL_Point. //
//                                                                  //
//////////////////////////////////////////////////////////////////////

#ifndef VECTOR2D_HPP
#define VECTOR2D_HPP

#include <iosfwd>

template<typename T>
struct Vector2D {
    T x;
    T y;

    Vector2D();
    Vector2D(T, T);
    template <typename U>
    Vector2D(const Vector2D<U>&);

    Vector2D<T> &operator+=(const Vector2D<T> &) noexcept;
    Vector2D<T> &operator-=(const Vector2D<T> &) noexcept;
    Vector2D<T> &operator*=(const Vector2D<T> &) noexcept;
    Vector2D<T> &operator/=(const Vector2D<T> &) noexcept;

    Vector2D<T> operator*(const T &) noexcept;
    Vector2D<T> operator/(const T &) noexcept;
    Vector2D<T> &zero() noexcept;
};

template<typename T>
Vector2D<T> operator+(const Vector2D<T> &, const Vector2D<T> &);

template<typename T>
Vector2D<T> operator-(const Vector2D<T> &, const Vector2D<T> &);

template<typename T>
Vector2D<T> operator*(const Vector2D<T> &, const Vector2D<T> &);

template<typename T>
Vector2D<T> operator/(const Vector2D<T> &, const Vector2D<T> &);

#include "Vector2D.tpp"

#endif