aboutsummaryrefslogtreecommitdiff
path: root/source2-basehook/Source2SDK/Vector.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source2-basehook/Source2SDK/Vector.hpp')
-rw-r--r--source2-basehook/Source2SDK/Vector.hpp252
1 files changed, 252 insertions, 0 deletions
diff --git a/source2-basehook/Source2SDK/Vector.hpp b/source2-basehook/Source2SDK/Vector.hpp
new file mode 100644
index 0000000..791e082
--- /dev/null
+++ b/source2-basehook/Source2SDK/Vector.hpp
@@ -0,0 +1,252 @@
+#pragma once
+#define CHECK_VALID( _v ) 0
+#define Assert( _exp ) ((void)0)
+#define M_PI 3.14159265358979323846f
+#define M_RADPI 57.295779513082f
+#define M_PI_F ((float)(M_PI))
+#define RAD2DEG( x ) ( (float)(x) * (float)(180.f / M_PI_F) )
+#define DEG2RAD( x ) ( (float)(x) * (float)(M_PI_F / 180.f) )
+
+class Vector
+{
+public:
+
+ float x, y, z;
+
+ Vector(void);
+ Vector(float x, float y, float z);
+
+ float& operator[](int) const;
+ Vector& operator=(const Vector&);
+
+ Vector& operator+=(const Vector&);
+ Vector& operator-=(const Vector&);
+ Vector& operator*=(const Vector&);
+ Vector& operator*=(const float&);
+ Vector& operator/=(const Vector&);
+ Vector& operator/=(const float&);
+
+ Vector operator+(const Vector&) const;
+ Vector operator-(const Vector&) const;
+ Vector operator*(const Vector&) const;
+ Vector operator*(const float&) const;
+ Vector operator/(const Vector&) const;
+ Vector operator/(const float&) const;
+
+ bool operator==(const Vector&) const;
+ bool operator!=(const Vector&) const;
+
+ float DistTo(const Vector&) const;
+
+ float Length() const;
+ float LengthSqr() const;
+ float Length2D() const;
+ float Length2DSqr() const;
+
+ Vector Cross(const Vector&) const;
+ float Dot(const Vector&) const;
+
+ float Normalize();
+ void Init(float, float, float);
+ void Zero();
+ bool IsZero(float);
+
+ //new
+ void VectorClear(Vector&);
+ void VectorCopy(const Vector&, Vector&);
+};
+
+inline Vector::Vector()
+{
+ x = y = z = 0.f;
+}
+
+inline void Vector::Zero()
+{
+ x = y = z = 0.0f;
+}
+
+inline Vector::Vector(float _x, float _y, float _z)
+{
+ x = _x;
+ y = _y;
+ z = _z;
+}
+
+inline float& Vector::operator[](int i) const
+{
+ return ((float*)this)[i];
+}
+
+inline Vector& Vector::operator=(const Vector& v)
+{
+ x = v.x;
+ y = v.y;
+ z = v.z;
+
+ return *this;
+}
+
+inline Vector& Vector::operator+=(const Vector& v)
+{
+ x += v.x;
+ y += v.y;
+ z += v.z;
+
+ return *this;
+}
+
+inline Vector& Vector::operator-=(const Vector& v)
+{
+ x -= v.x;
+ y -= v.y;
+ z -= v.z;
+
+ return *this;
+}
+
+inline Vector& Vector::operator*=(const Vector& v)
+{
+ x *= v.x;
+ y *= v.y;
+ z *= v.z;
+
+ return *this;
+}
+
+inline Vector& Vector::operator*=(const float& f)
+{
+ x *= f;
+ y *= f;
+ z *= f;
+
+ return *this;
+}
+
+inline Vector& Vector::operator/=(const Vector& v)
+{
+ x /= v.x;
+ y /= v.y;
+ z /= v.z;
+
+ return *this;
+}
+
+inline Vector& Vector::operator/=(const float& f)
+{
+ x /= f;
+ y /= f;
+ z /= f;
+
+ return *this;
+}
+
+inline Vector Vector::operator+(const Vector& v) const
+{
+ return Vector(x + v.x, y + v.y, z + v.z);
+}
+
+inline Vector Vector::operator-(const Vector& v) const
+{
+ return Vector(x - v.x, y - v.y, z - v.z);
+}
+
+inline Vector Vector::operator*(const Vector& v) const
+{
+ return Vector(x * v.x, y * v.y, z * v.z);
+}
+
+inline Vector Vector::operator*(const float& f) const
+{
+ return Vector(x * f, y * f, z * f);
+}
+
+inline Vector Vector::operator/(const Vector& v) const
+{
+ return Vector(x / (v.x), y / (v.y), z / (v.z));
+}
+
+inline Vector Vector::operator/(const float& f) const
+{
+ return Vector(x / (f), y / (f), z / (f));
+}
+
+inline bool Vector::operator==(const Vector& v) const
+{
+ return v.x == x && v.y == y && v.z == z;
+}
+
+inline bool Vector::operator!=(const Vector& e) const
+{
+ return e.x != x || e.y != y || e.z != z;
+}
+
+inline float Vector::DistTo(const Vector& v) const
+{
+ return (*this - v).Length();
+}
+
+inline float Vector::Length() const
+{
+ return sqrtf((x * x) + (y * y) + (z * z));
+}
+
+inline float Vector::LengthSqr() const
+{
+ return (x * x) + (y * y) + (z * z);
+}
+
+inline float Vector::Length2D() const
+{
+ return sqrtf((x * x) + (y * y));
+}
+
+inline float Vector::Length2DSqr() const
+{
+ return (x * x) + (y * y);
+}
+
+inline Vector Vector::Cross(const Vector& e) const
+{
+ return Vector((y * e.z) - (z * e.y), (z * e.x) - (x * e.z), (x * e.y) - (y * e.x));
+}
+
+inline float Vector::Dot(const Vector& e) const
+{
+ return (x * e.x) + (y * e.y) + (z * e.z);
+}
+
+inline float Vector::Normalize()
+{
+ float l = Length();
+ float m = 1.f / (l);
+
+ *this *= m;
+
+ return l;
+}
+
+inline void Vector::Init(float ix = 0.0f, float iy = 0.0f, float iz = 0.0f)
+{
+ x = ix; y = iy; z = iz;
+}
+
+inline void Vector::VectorClear(Vector& a)
+{
+ a.x = a.y = a.z = 0.0f;
+}
+
+inline bool Vector::IsZero(float tolerance = 0.01f)
+{
+ return (x > -tolerance && x < tolerance &&
+ y > -tolerance && y < tolerance &&
+ z > -tolerance && z < tolerance);
+}
+
+__forceinline void Vector::VectorCopy(const Vector& src, Vector& dst)
+{
+ dst.x = src.x;
+ dst.y = src.y;
+ dst.z = src.z;
+}
+