145 lines
2.0 KiB
C++
145 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <d3d11.h>
|
|
|
|
namespace egm
|
|
{
|
|
|
|
template <typename T>
|
|
struct tvec2
|
|
{
|
|
T x;
|
|
T y;
|
|
|
|
tvec2() : x(0), y(0) {}
|
|
tvec2(const tvec2<T>& v) : x(v.x), y(v.y) {}
|
|
template <typename U>
|
|
tvec2(const tvec2<U>& v) : x((T)v.x), y((T)v.y) {}
|
|
tvec2(const T& scalar) : x(scalar), y(scalar) {}
|
|
tvec2(const T& scalar1, const T& scalar2) : x(scalar1), y(scalar2) {}
|
|
|
|
T& operator[](const unsigned int& index)
|
|
{
|
|
switch (index)
|
|
{
|
|
case 0:
|
|
return x;
|
|
case 1:
|
|
return y;
|
|
default:
|
|
throw "Index Out Of Bounds";
|
|
}
|
|
}
|
|
|
|
bool operator==(const tvec2<T>& o)
|
|
{
|
|
return (o.x == x && o.y == y);
|
|
}
|
|
|
|
tvec2<T>& operator=(const tvec2<T>& o)
|
|
{
|
|
x = o.x;
|
|
y = o.y;
|
|
return *this;
|
|
}
|
|
|
|
tvec2<T> operator+(const tvec2<T>& o) const
|
|
{
|
|
return {
|
|
x + o.x,
|
|
y + o.y
|
|
};
|
|
}
|
|
|
|
tvec2<T>& operator+=(const tvec2<T>& o)
|
|
{
|
|
x += o.x;
|
|
y += o.y;
|
|
return *this;
|
|
}
|
|
|
|
tvec2<T> operator-(const tvec2<T>& o) const
|
|
{
|
|
return {
|
|
x - o.x,
|
|
y - o.y
|
|
};
|
|
}
|
|
|
|
tvec2<T>& operator-=(const tvec2<T>& o)
|
|
{
|
|
x -= o.x;
|
|
y -= o.y;
|
|
return *this;
|
|
}
|
|
|
|
tvec2<T> operator*(const tvec2<T>& o) const
|
|
{
|
|
return {
|
|
x * o.x,
|
|
y * o.y
|
|
};
|
|
}
|
|
|
|
tvec2<T>& operator*=(const tvec2<T>& o)
|
|
{
|
|
x *= o.x;
|
|
y *= o.y;
|
|
return *this;
|
|
}
|
|
|
|
tvec2<T> operator*(const T& scalar) const
|
|
{
|
|
return {
|
|
x * scalar,
|
|
y * scalar
|
|
};
|
|
}
|
|
|
|
tvec2<T>& operator*=(const T& scalar)
|
|
{
|
|
x *= scalar;
|
|
y *= scalar;
|
|
return *this;
|
|
}
|
|
|
|
tvec2<T> operator/(const tvec2<T>& o) const
|
|
{
|
|
return {
|
|
x / o.x,
|
|
y / o.y
|
|
};
|
|
}
|
|
|
|
tvec2<T>& operator/=(const tvec2<T>& o)
|
|
{
|
|
x /= o.x;
|
|
y /= o.y;
|
|
return *this;
|
|
}
|
|
|
|
tvec2<T> operator/(const T& scalar) const
|
|
{
|
|
return {
|
|
x / scalar,
|
|
y / scalar
|
|
};
|
|
}
|
|
|
|
tvec2<T>& operator/=(const T& scalar)
|
|
{
|
|
x /= scalar;
|
|
y /= scalar;
|
|
return *this;
|
|
}
|
|
|
|
float* data()
|
|
{
|
|
return &x;
|
|
}
|
|
};
|
|
|
|
typedef tvec2<float> vec2;
|
|
typedef tvec2<double> dvec2;
|
|
typedef tvec2<int> ivec2;
|
|
} |