diff options
Diffstat (limited to 'source2-basehook/Source2SDK/Vector.hpp')
| -rw-r--r-- | source2-basehook/Source2SDK/Vector.hpp | 252 |
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; +} + |