aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/math/vector2.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/math/vector2.hpp')
-rw-r--r--src/libjin/math/vector2.hpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/libjin/math/vector2.hpp b/src/libjin/math/vector2.hpp
new file mode 100644
index 0000000..6115a63
--- /dev/null
+++ b/src/libjin/math/vector2.hpp
@@ -0,0 +1,82 @@
+#ifndef __JE_VECTOR_H__
+#define __JE_VECTOR_H__
+
+namespace JinEngine
+{
+ namespace Math
+ {
+
+ template<typename T>
+ class Vector2
+ {
+ public:
+ Vector2()
+ {
+ data[0] = data[1] = 0;
+ }
+ Vector2(T _x, T _y)
+ {
+ data[0] = _x;
+ data[1] = _y;
+ }
+ Vector2(const Vector2<T>& v)
+ {
+ data[0] = v.data[0];
+ data[1] = v.data[1];
+ }
+
+ void operator = (const Vector2<T>& v)
+ {
+ data[0] = v.data[0];
+ data[1] = v.data[1];
+ }
+
+ Vector2<T> operator * (float n)
+ {
+ return Vector2<T>(data[0]*n, data[1]*n);
+ }
+
+ void operator +=(const Vector2<T> v)
+ {
+ data[0] += v.data[0];
+ data[1] += v.data[1];
+ }
+
+ Vector2<T> operator +(const Vector2<T>& v)
+ {
+ return Vector2<T>(data[0] + v.data[0], data[1] + v.data[1]);
+ }
+
+ void set(T _x, T _y)
+ {
+ data[0] = _x;
+ data[1] = _y;
+ }
+
+ bool isZero()
+ {
+ return data[0] == 0 && data[1] == 0;
+ }
+
+ #define _aliases(A, B) \
+ inline T& A() { return data[0]; }\
+ inline T& B() { return data[1]; }\
+ inline T A() const { return data[0]; }\
+ inline T B() const { return data[1]; }
+
+ _aliases(x, y);
+ _aliases(w, h);
+ _aliases(u, v);
+ _aliases(colum, row);
+
+ #undef _aliases
+
+ private:
+ T data[2];
+
+ };
+
+ } // namespace Math
+} // namespace JinEngine
+
+#endif \ No newline at end of file