// Copyright (C) 2012 Jérôme Leclercq // This file is part of the "Nazara Engine - Mathematics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_VECTOR2_HPP #define NAZARA_VECTOR2_HPP #include template class NzVector2 { public: NzVector2() = default; NzVector2(T X, T Y); explicit NzVector2(T scale); NzVector2(const T vec[2]); template explicit NzVector2(const NzVector2& vec); NzVector2(const NzVector2& vec) = default; ~NzVector2() = default; T AbsDotProduct(const NzVector2& vec) const; T Distance(const NzVector2& vec) const; float Distancef(const NzVector2& vec) const; T DotProduct(const NzVector2& vec) const; NzVector2 GetNormal() const; T Length() const; float Lengthf() const; NzVector2& MakeUnitX(); NzVector2& MakeUnitY(); NzVector2& MakeZero(); NzVector2& Maximize(const NzVector2& vec); NzVector2& Minimize(const NzVector2& vec); NzVector2& Normalize(T* length = nullptr); NzVector2& Set(T X, T Y); NzVector2& Set(T scale); NzVector2& Set(const T vec[2]); NzVector2& Set(const NzVector2& vec); template NzVector2& Set(const NzVector2& vec); T SquaredDistance(const NzVector2& vec) const; T SquaredLength() const; NzString ToString() const; operator T*(); operator const T*() const; T& operator[](unsigned int i); T operator[](unsigned int i) const; const NzVector2& operator+() const; NzVector2 operator-() const; NzVector2 operator+(const NzVector2& vec) const; NzVector2 operator-(const NzVector2& vec) const; NzVector2 operator*(const NzVector2& vec) const; NzVector2 operator*(T scale) const; NzVector2 operator/(const NzVector2& vec) const; NzVector2 operator/(T scale) const; NzVector2& operator+=(const NzVector2& vec); NzVector2& operator-=(const NzVector2& vec); NzVector2& operator*=(const NzVector2& vec); NzVector2& operator*=(T scale); NzVector2& operator/=(const NzVector2& vec); NzVector2& operator/=(T scale); bool operator==(const NzVector2& vec) const; bool operator!=(const NzVector2& vec) const; bool operator<(const NzVector2& vec) const; bool operator<=(const NzVector2& vec) const; bool operator>(const NzVector2& vec) const; bool operator>=(const NzVector2& vec) const; static NzVector2 Lerp(const NzVector2& from, const NzVector2& to, T interpolation); static NzVector2 UnitX(); static NzVector2 UnitY(); static NzVector2 Zero(); T x, y; }; template std::ostream& operator<<(std::ostream& out, const NzVector2& vec); template NzVector2 operator*(T scale, const NzVector2& vec); template NzVector2 operator/(T scale, const NzVector2& vec); typedef NzVector2 NzVector2d; typedef NzVector2 NzVector2f; typedef NzVector2 NzVector2i; typedef NzVector2 NzVector2ui; #include #endif // NAZARA_VECTOR2_HPP