#pragma once

template<class T>
struct Vec2 {
	T x, y;

	Vec2();
	Vec2(T x, T y);

	Vec2 operator + (Vec2 vec);
	Vec2 operator - (Vec2 vec);
	Vec2 operator * (Vec2 vec);
	Vec2 operator / (Vec2 vec);
};

template<class T>
inline Vec2<T>::Vec2() : x((T)0), y((T)0) {}

template<class T>
inline Vec2<T>::Vec2(T x, T y) : x(x), y(y) {}

template<class T>
inline Vec2<T> Vec2<T>::operator+(Vec2 vec) {
	return Vec2(x + vec.x, y + vec.y);
}

template<class T>
inline Vec2<T> Vec2<T>::operator-(Vec2 vec) {
	return Vec2(x - vec.x, y - vec.y);
}

template<class T>
inline Vec2<T> Vec2<T>::operator*(Vec2 vec) {
	return Vec2(x * vec.x, y * vec.y);
}

template<class T>
inline Vec2<T> Vec2<T>::operator/(Vec2 vec) {
	return Vec2(x / vec.x, y / vec.y);
}
