summaryrefslogtreecommitdiff
path: root/src/vector.h
diff options
context:
space:
mode:
authorIra Rice <irarice@gmail.com>2008-12-03 12:30:11 -0700
committerIra Rice <irarice@gmail.com>2008-12-03 12:30:11 -0700
commit68926c15e6d31c4af90bce9ec57aa39f839d7d6b (patch)
tree18fc1553fabfe16022950facf16422afd191fa01 /src/vector.h
parent414afae670d09e34a4b5c0528c9ca6c3abb03124 (diff)
downloadmana-68926c15e6d31c4af90bce9ec57aa39f839d7d6b.tar.gz
mana-68926c15e6d31c4af90bce9ec57aa39f839d7d6b.tar.bz2
mana-68926c15e6d31c4af90bce9ec57aa39f839d7d6b.tar.xz
mana-68926c15e6d31c4af90bce9ec57aa39f839d7d6b.zip
Add an effects manager (patch by Kage Jittai)
NOTE: This patch demonstrates the need to fix pixel coordinates in the eAthena client. Bjorn did the movement patch in the TMWClient, however, I still haven't got that fully working with the merges. It's likely that a clone will be developed to tackle this problem. Signed-off-by: Ira Rice <irarice@gmail.com>
Diffstat (limited to 'src/vector.h')
-rw-r--r--src/vector.h68
1 files changed, 63 insertions, 5 deletions
diff --git a/src/vector.h b/src/vector.h
index b19f6c64..f32b201a 100644
--- a/src/vector.h
+++ b/src/vector.h
@@ -22,6 +22,10 @@
#ifndef _TMW_VECTOR_H_
#define _TMW_VECTOR_H_
+#include <math.h>
+
+#include <iostream>
+
/**
* Vector class. Represents either a 3D point in space, a velocity or a force.
* Provides several convenient operator overloads.
@@ -41,7 +45,7 @@ class Vector
/**
* Constructor.
*/
- Vector(float x, float y, float z):
+ Vector(float x, float y, float z = 0.0f):
x(x),
y(y),
z(z)
@@ -69,11 +73,12 @@ class Vector
/**
* In-place scale vector operator.
*/
- void operator*=(float c)
+ Vector &operator*=(float c)
{
x *= c;
y *= c;
z *= c;
+ return *this;
}
/**
@@ -87,6 +92,17 @@ class Vector
}
/**
+ * In-place scale vector operator.
+ */
+ Vector &operator/=(float c)
+ {
+ x /= c;
+ y /= c;
+ z /= c;
+ return *this;
+ }
+
+ /**
* Add vector operator.
*/
Vector operator+(const Vector &v) const
@@ -99,11 +115,12 @@ class Vector
/**
* In-place add vector operator.
*/
- void operator+=(const Vector &v)
+ Vector &operator+=(const Vector &v)
{
x += v.x;
y += v.y;
z += v.z;
+ return *this;
}
/**
@@ -119,14 +136,55 @@ class Vector
/**
* In-place substract vector operator.
*/
- void operator-=(const Vector &v)
+ Vector &operator-=(const Vector &v)
{
x -= v.x;
y -= v.y;
z -= v.z;
+ return *this;
+ }
+
+ /**
+ * Returns the length of this vector. This method does a relatively
+ * slow square root.
+ */
+ float length() const
+ {
+ return sqrtf(x * x + y * y + z * z);
+ }
+
+ /**
+ * Returns the squared length of this vector. Avoids the square root.
+ */
+ float squaredLength() const
+ {
+ return x * x + y * y + z * z;
+ }
+
+ /**
+ * Returns the manhattan length of this vector.
+ */
+ float manhattanLength() const
+ {
+ return fabsf(x) + fabsf(y) + fabsf(z);
+ }
+
+ /**
+ * Returns a normalized version of this vector. This is a unit vector
+ * running parallel to it.
+ */
+ Vector normalized() const
+ {
+ const float l = length();
+ return Vector(x / l, y / l, z / l);
}
float x, y, z;
};
-#endif
+/**
+ * Appends a string representation of a vector to the output stream.
+ */
+std::ostream& operator <<(std::ostream &os, const Vector &v);
+
+#endif // _TMW_VECTOR_H_