void ClampAngle(Vector3 angle)
{
while (angle.y < -180.0f) angle.y += 360.0f;
while (angle.y > 180.0f) angle.y -= 360.0f;
if (angle.x > 89.0f) angle.x = 89.0f;
if (angle.x < -89.0f) angle.x = -89.0f;
}
void ClampMovement(float forwardMove, float sideMove)
{
if (forwardMove >= 450.f)
forwardMove = 450.f;
if (forwardMove <= -450.f)
forwardMove = -450.f;
if (sideMove >= 450.f)
sideMove = 450.f;
if (sideMove <= -450.f)
sideMove = -450.f;
}
void ClampAngle(Vector3 angle) void ClampMovement(float forwardMove, float sideMove)
class Vector3
{
public:
float x, y, z;
inline Vector3()
: x(0),
y(0),
z(0)
{
}
inline Vector3(float X, float Y, float Z)
: x(X),
y(Y),
z(Z)
{
}
inline Vector3(float XYZ)
: x(XYZ),
y(XYZ),
z(XYZ)
{
}
inline Vector3(float* v)
: x(v[0]),
y(v[1]),
z(v[2])
{
}
inline Vector3(const float* v)
: x(v[0]),
y(v[1]),
z(v[2])
{
}
inline void Init(float X = 0.0f, float Y = 0.0f, float Z = 0.0f)
{
x = X;
y = Y;
z = Z;
}
inline float operator [] (int i) const
{
return ((float*)this)[i];
}
inline float& operator [] (int i)
{
return ((float*)this)[i];
}
inline Vector3& operator += (const Vector3& v)
{
x += v.x;
y += v.y;
z += v.z;
return *this;
}
inline Vector3& operator -= (const Vector3& v)
{
x -= v.x;
y -= v.y;
z -= v.z;
return *this;
}
inline Vector3& operator *= (const Vector3& v)
{
x *= v.x;
y *= v.y;
z *= v.z;
return *this;
}
inline Vector3& operator /= (const Vector3& v)
{
x /= v.x;
y /= v.y;
z /= v.z;
return *this;
}
inline Vector3& operator += (float v)
{
x += v;
y += v;
z += v;
return *this;
}
inline Vector3& operator -= (float v)
{
x -= v;
y -= v;
z -= v;
return *this;
}
inline Vector3& operator *= (float v)
{
x *= v;
y *= v;
z *= v;
return *this;
}
inline Vector3& operator /= (float v)
{
x /= v;
y /= v;
z /= v;
return *this;
}
inline Vector3 operator - () const
{
return Vector3(-x, -y, -z);
}
inline Vector3 operator - (const Vector3& v) const
{
return Vector3(x - v.x, y - v.y, z - v.z);
}
inline Vector3 operator + (const Vector3& v) const
{
return Vector3(x + v.x, y + v.y, z + v.z);
}
inline Vector3 operator * (const Vector3& v) const
{
return Vector3(x * v.x, y * v.y, z * v.z);
}
inline Vector3 operator / (const Vector3& v) const
{
return Vector3(x / v.x, y / v.y, z / v.z);
}
inline float Length() const
{
return sqrtf(x * x + y * y + z * z);
}
inline float LengthSqr() const
{
return (x * x + y * y + z * z);
}
inline float LengthXY() const
{
return sqrtf(x * x + y * y);
}
inline float LengthXZ() const
{
return sqrtf(x * x + z * z);
}
inline bool IsZero() const
{
return (x > -0.01f && x < 0.01f
&& y > -0.01f && y < 0.01f
&& z > -0.01f && z < 0.01f);
}
inline float DistTo(const Vector3& v) const
{
return (*this - v).Length();
}
inline float DistToSqr(const Vector3& v) const
{
return (*this - v).LengthSqr();
}
inline float Dot(const Vector3& v) const
{
return (x * v.x + y * v.y + z * v.z);
}
inline Vector3 Cross(const Vector3& v) const
{
return Vector3(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x);
}
};
void ClampAngle(Vector3 angle) void ClampMovement(float forwardMove, float sideMove)
