mirror of
https://github.com/ChronosX88/mta-mono.git
synced 2024-11-22 18:22:20 +00:00
Классы векторов
This commit is contained in:
parent
6e4b03ff86
commit
13b55ee064
@ -29,6 +29,8 @@
|
|||||||
<ClInclude Include="src\CMonoObject.h" />
|
<ClInclude Include="src\CMonoObject.h" />
|
||||||
<ClInclude Include="src\CResource.h" />
|
<ClInclude Include="src\CResource.h" />
|
||||||
<ClInclude Include="src\CResourceManager.h" />
|
<ClInclude Include="src\CResourceManager.h" />
|
||||||
|
<ClInclude Include="src\extra\Vector2.h" />
|
||||||
|
<ClInclude Include="src\extra\Vector3.h" />
|
||||||
<ClInclude Include="src\mta-mono.h" />
|
<ClInclude Include="src\mta-mono.h" />
|
||||||
<ClInclude Include="src\CFunctions.h" />
|
<ClInclude Include="src\CFunctions.h" />
|
||||||
<ClInclude Include="src\Common.h" />
|
<ClInclude Include="src\Common.h" />
|
||||||
|
157
mta-mono/src/extra/Vector2.h
Normal file
157
mta-mono/src/extra/Vector2.h
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* PROJECT: Multi Theft Auto v1.0
|
||||||
|
* LICENSE: See LICENSE in the top level directory
|
||||||
|
* FILE: sdk/CVector2D.h
|
||||||
|
* PURPOSE: 2D vector class
|
||||||
|
*
|
||||||
|
* Multi Theft Auto is available from http://www.multitheftauto.com/
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __CVector2D_H
|
||||||
|
#define __CVector2D_H
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include "Vector3.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CVector2D Structure used to store a 2D vertex.
|
||||||
|
*/
|
||||||
|
class Vector2
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Vector2 ( void )
|
||||||
|
{
|
||||||
|
fX = 0;
|
||||||
|
fY = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 ( float _fX, float _fY )
|
||||||
|
{
|
||||||
|
fX = _fX;
|
||||||
|
fY = _fY;
|
||||||
|
}
|
||||||
|
|
||||||
|
float DotProduct ( Vector2& other ) const
|
||||||
|
{
|
||||||
|
return fX*other.fX + fY*other.fY;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Length () const
|
||||||
|
{
|
||||||
|
return sqrt ( fX * fX + fY * fY );
|
||||||
|
}
|
||||||
|
|
||||||
|
float LengthSquared ( void ) const
|
||||||
|
{
|
||||||
|
return (fX*fX) + (fY*fY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Normalize ( void )
|
||||||
|
{
|
||||||
|
float fLength = Length ();
|
||||||
|
if ( fLength > 0.0f )
|
||||||
|
{
|
||||||
|
fX /= fLength;
|
||||||
|
fY /= fLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 operator * ( float fRight ) const
|
||||||
|
{
|
||||||
|
return Vector2 ( fX * fRight, fY * fRight );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 operator / ( float fRight ) const
|
||||||
|
{
|
||||||
|
float fRcpValue = 1 / fRight;
|
||||||
|
return Vector2 ( fX * fRcpValue, fY * fRcpValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 operator + ( const Vector2& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector2 ( fX + vecRight.fX, fY + vecRight.fY );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 operator - ( const Vector2& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector2 ( fX - vecRight.fX, fY - vecRight.fY );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 operator * ( const Vector2& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector2 ( fX * vecRight.fX, fY * vecRight.fY );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 operator / ( const Vector2& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector2 ( fX / vecRight.fX, fY / vecRight.fY );
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator += ( float fRight )
|
||||||
|
{
|
||||||
|
fX += fRight;
|
||||||
|
fY += fRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator += ( const Vector2& vecRight )
|
||||||
|
{
|
||||||
|
fX += vecRight.fX;
|
||||||
|
fY += vecRight.fY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator -= ( float fRight )
|
||||||
|
{
|
||||||
|
fX -= fRight;
|
||||||
|
fY -= fRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator -= ( const Vector2& vecRight )
|
||||||
|
{
|
||||||
|
fX -= vecRight.fX;
|
||||||
|
fY -= vecRight.fY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator *= ( float fRight )
|
||||||
|
{
|
||||||
|
fX *= fRight;
|
||||||
|
fY *= fRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator *= ( const Vector2& vecRight )
|
||||||
|
{
|
||||||
|
fX *= vecRight.fX;
|
||||||
|
fY *= vecRight.fY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator /= ( float fRight )
|
||||||
|
{
|
||||||
|
fX /= fRight;
|
||||||
|
fY /= fRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator /= ( const Vector2& vecRight )
|
||||||
|
{
|
||||||
|
fX /= vecRight.fX;
|
||||||
|
fY /= vecRight.fY;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator== ( const Vector2& param ) const
|
||||||
|
{
|
||||||
|
return ( ( fabs ( fX - param.fX ) < FLOAT_EPSILON ) &&
|
||||||
|
( fabs ( fY - param.fY ) < FLOAT_EPSILON ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!= ( const Vector2& param ) const
|
||||||
|
{
|
||||||
|
return ( ( fabs ( fX - param.fX ) >= FLOAT_EPSILON ) ||
|
||||||
|
( fabs ( fY - param.fY ) >= FLOAT_EPSILON ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
float fX;
|
||||||
|
float fY;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
214
mta-mono/src/extra/Vector3.h
Normal file
214
mta-mono/src/extra/Vector3.h
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* PROJECT: Multi Theft Auto v1.0
|
||||||
|
* LICENSE: See LICENSE in the top level directory
|
||||||
|
* FILE: sdk/CVector.h
|
||||||
|
* PURPOSE: 3D vector math implementation
|
||||||
|
*
|
||||||
|
* Multi Theft Auto is available from http://www.multitheftauto.com/
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __CVector_H
|
||||||
|
#define __CVector_H
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#define FLOAT_EPSILON 0.0001f
|
||||||
|
#define PI (3.14159265358979323846f)
|
||||||
|
/**
|
||||||
|
* CVector Structure used to store a 3D vertex.
|
||||||
|
*/
|
||||||
|
class Vector3
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float fX, fY, fZ;
|
||||||
|
|
||||||
|
Vector3 ()
|
||||||
|
{
|
||||||
|
this->fX = 0;
|
||||||
|
this->fY = 0;
|
||||||
|
this->fZ = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Vector3 ( float fX, float fY, float fZ)
|
||||||
|
{
|
||||||
|
this->fX = fX;
|
||||||
|
this->fY = fY;
|
||||||
|
this->fZ = fZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Normalize ( void )
|
||||||
|
{
|
||||||
|
float t = sqrt(fX*fX + fY*fY + fZ*fZ);
|
||||||
|
if ( t > FLOAT_EPSILON )
|
||||||
|
{
|
||||||
|
float fRcpt = 1 / t;
|
||||||
|
fX *= fRcpt;
|
||||||
|
fY *= fRcpt;
|
||||||
|
fZ *= fRcpt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
t = 0;
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Length ( void ) const
|
||||||
|
{
|
||||||
|
return sqrt ( (fX*fX) + (fY*fY) + (fZ*fZ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
float LengthSquared ( void ) const
|
||||||
|
{
|
||||||
|
return (fX*fX) + (fY*fY) + (fZ*fZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
float DotProduct ( const Vector3 * param ) const
|
||||||
|
{
|
||||||
|
return fX*param->fX + fY*param->fY + fZ*param->fZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CrossProduct ( const Vector3 * param )
|
||||||
|
{
|
||||||
|
float _fX = fX, _fY = fY, _fZ = fZ;
|
||||||
|
fX = _fY * param->fZ - param->fY * _fZ;
|
||||||
|
fY = _fZ * param->fX - param->fZ * _fX;
|
||||||
|
fZ = _fX * param->fY - param->fX * _fY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert (direction) to rotation
|
||||||
|
Vector3 ToRotation ( void ) const
|
||||||
|
{
|
||||||
|
Vector3 vecRotation;
|
||||||
|
vecRotation.fZ = atan2 ( fY, fX );
|
||||||
|
Vector3 vecTemp ( sqrt ( fX * fX + fY * fY ), fZ, 0 );
|
||||||
|
vecTemp.Normalize ();
|
||||||
|
vecRotation.fY = atan2 ( vecTemp.fX, vecTemp.fY ) - PI / 2;
|
||||||
|
return vecRotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a perpendicular direction
|
||||||
|
Vector3 GetOtherAxis ( void ) const
|
||||||
|
{
|
||||||
|
Vector3 vecResult;
|
||||||
|
if ( abs( fX ) > abs( fY ) )
|
||||||
|
vecResult = Vector3( fZ, 0, -fX );
|
||||||
|
else
|
||||||
|
vecResult = Vector3( 0, -fZ, fY );
|
||||||
|
vecResult.Normalize();
|
||||||
|
return vecResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 operator + ( const Vector3& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector3 ( fX + vecRight.fX, fY + vecRight.fY, fZ + vecRight.fZ );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 operator - ( const Vector3& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector3 ( fX - vecRight.fX, fY - vecRight.fY, fZ - vecRight.fZ );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 operator * ( const Vector3& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector3 ( fX * vecRight.fX, fY * vecRight.fY, fZ * vecRight.fZ );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 operator * ( float fRight ) const
|
||||||
|
{
|
||||||
|
return Vector3 ( fX * fRight, fY * fRight, fZ * fRight );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 operator / ( const Vector3& vecRight ) const
|
||||||
|
{
|
||||||
|
return Vector3 ( fX / vecRight.fX, fY / vecRight.fY, fZ / vecRight.fZ );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 operator / ( float fRight ) const
|
||||||
|
{
|
||||||
|
float fRcpValue = 1 / fRight;
|
||||||
|
return Vector3 ( fX * fRcpValue, fY * fRcpValue, fZ * fRcpValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 operator - () const
|
||||||
|
{
|
||||||
|
return Vector3 ( -fX, -fY, -fZ );
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator += ( float fRight )
|
||||||
|
{
|
||||||
|
fX += fRight;
|
||||||
|
fY += fRight;
|
||||||
|
fZ += fRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator += ( const Vector3& vecRight )
|
||||||
|
{
|
||||||
|
fX += vecRight.fX;
|
||||||
|
fY += vecRight.fY;
|
||||||
|
fZ += vecRight.fZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator -= ( float fRight )
|
||||||
|
{
|
||||||
|
fX -= fRight;
|
||||||
|
fY -= fRight;
|
||||||
|
fZ -= fRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator -= ( const Vector3& vecRight )
|
||||||
|
{
|
||||||
|
fX -= vecRight.fX;
|
||||||
|
fY -= vecRight.fY;
|
||||||
|
fZ -= vecRight.fZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator *= ( float fRight )
|
||||||
|
{
|
||||||
|
fX *= fRight;
|
||||||
|
fY *= fRight;
|
||||||
|
fZ *= fRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator *= ( const Vector3& vecRight )
|
||||||
|
{
|
||||||
|
fX *= vecRight.fX;
|
||||||
|
fY *= vecRight.fY;
|
||||||
|
fZ *= vecRight.fZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator /= ( float fRight )
|
||||||
|
{
|
||||||
|
float fRcpValue = 1 / fRight;
|
||||||
|
fX *= fRcpValue;
|
||||||
|
fY *= fRcpValue;
|
||||||
|
fZ *= fRcpValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator /= ( const Vector3& vecRight )
|
||||||
|
{
|
||||||
|
fX /= vecRight.fX;
|
||||||
|
fY /= vecRight.fY;
|
||||||
|
fZ /= vecRight.fZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator== ( const Vector3& param ) const
|
||||||
|
{
|
||||||
|
return ( ( fabs ( fX - param.fX ) < FLOAT_EPSILON ) &&
|
||||||
|
( fabs ( fY - param.fY ) < FLOAT_EPSILON ) &&
|
||||||
|
( fabs ( fZ - param.fZ ) < FLOAT_EPSILON ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!= ( const Vector3& param ) const
|
||||||
|
{
|
||||||
|
return ( ( fabs ( fX - param.fX ) >= FLOAT_EPSILON ) ||
|
||||||
|
( fabs ( fY - param.fY ) >= FLOAT_EPSILON ) ||
|
||||||
|
( fabs ( fZ - param.fZ ) >= FLOAT_EPSILON ) );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user