// Copyright (C) 2012 Jérôme Leclercq // This file is part of the "Nazara Engine". // 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(); NzVector2(T X, T Y); explicit NzVector2(T scale); NzVector2(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; void MakeCeil(const NzVector2& vec); void MakeFloor(const NzVector2& vec); T Length() const; float Lengthf() const; void Normalize(); 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; T x; T 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