64 lines
1.0 KiB
C++
64 lines
1.0 KiB
C++
#pragma once
|
|
|
|
namespace td {
|
|
|
|
template<typename T>
|
|
struct Vec2 {
|
|
union {
|
|
T x;
|
|
T r;
|
|
};
|
|
|
|
union {
|
|
T y;
|
|
T g;
|
|
};
|
|
|
|
constexpr Vec2(T X = 0, T Y = 0) : x(X), y(Y) {}
|
|
|
|
};
|
|
|
|
template<typename T>
|
|
inline bool operator==(const Vec2<T>& vec2, const Vec2<T>& other) {
|
|
return vec2.x == other.x && vec2.y == other.y;
|
|
}
|
|
|
|
template<typename T>
|
|
struct Vec3 {
|
|
union {
|
|
T x;
|
|
T r;
|
|
};
|
|
|
|
union {
|
|
T y;
|
|
T g;
|
|
};
|
|
|
|
union {
|
|
T z;
|
|
T b;
|
|
};
|
|
|
|
constexpr Vec3(T X = 0, T Y = 0, T Z = 0) : x(X), y(Y), z(Z) {}
|
|
};
|
|
|
|
template<typename T>
|
|
inline bool operator==(const Vec3<T>& vec3, const Vec3<T>& other) {
|
|
return vec3.x == other.x && vec3.y == other.y && vec3.z == other.z;
|
|
}
|
|
|
|
using Vec2i = Vec2<int>;
|
|
using Vec2u = Vec2<unsigned int>;
|
|
using Vec2f = Vec2<float>;
|
|
using Vec2d = Vec2<double>;
|
|
|
|
using Vec3i = Vec3<int>;
|
|
using Vec3u = Vec3<unsigned int>;
|
|
using Vec3f = Vec3<float>;
|
|
using Vec3d = Vec3<double>;
|
|
|
|
using Color = Vec3<unsigned char>;
|
|
|
|
} // namespace td
|