155 lines
3.3 KiB
C++
155 lines
3.3 KiB
C++
//================= Copyright kotofyt, All rights reserved ==================//
|
|
//
|
|
// Purpose: Wrap rapier bindings into C++
|
|
//
|
|
//===========================================================================//
|
|
|
|
#include "tier0/lib.h"
|
|
#include "physics.h"
|
|
#define PHYSICS_OBJECT_DEFINED
|
|
#define TRIG_H
|
|
#include "iphysics.h"
|
|
#include "tier0/lib.h"
|
|
#include "tier1/interface.h"
|
|
|
|
class CRapierPhysicsBody: public IPhysicsBody
|
|
{
|
|
public:
|
|
virtual void SetPosition( Vector vPosition ) override
|
|
{
|
|
|
|
CRapierPhysicsBody_SetPosition(m_pBody, vPosition.x, vPosition.y, vPosition.z);
|
|
}
|
|
|
|
virtual void SetRotation( Quat vRotation ) override
|
|
{
|
|
CRapierPhysicsBody_SetRotation(m_pBody, vRotation.x, vRotation.y, vRotation.z, vRotation.w);
|
|
}
|
|
|
|
virtual void SetGravityScale( float fScale ) override
|
|
{
|
|
|
|
}
|
|
|
|
|
|
virtual Vector GetPosition() override
|
|
{
|
|
return CRapierPhysicsBody_GetPosition(m_pBody);
|
|
}
|
|
|
|
virtual Quat GetRotation() override
|
|
{
|
|
return CRapierPhysicsBody_GetRotation(m_pBody);
|
|
}
|
|
|
|
virtual void SetType( EPhysicsBodyType eType ) override
|
|
{
|
|
CRapierPhysicsBody_SetType(m_pBody, eType);
|
|
}
|
|
|
|
|
|
|
|
RapierPhysicsBody_t *m_pBody = NULL;
|
|
|
|
};
|
|
class CRapierPhysicsWorld: public IPhysicsWorld
|
|
{
|
|
public:
|
|
virtual void Frame( float fDelta ) override
|
|
{
|
|
CRapierPhysicsWorld_Frame(m_pWorld, fDelta);
|
|
}
|
|
virtual IPhysicsBody *CreateRigidBody( HCollider hCollider, EPhysicsBodyType eType) override
|
|
{
|
|
RapierPhysicsBody_t *pBody = CRapierPhysicsWorld_CreateRigidBody(m_pWorld, (RapierCollider_t*)hCollider, eType);
|
|
if (!pBody)
|
|
return NULL;
|
|
CRapierPhysicsBody *pPhysicsBody = new CRapierPhysicsBody;
|
|
pPhysicsBody->m_pBody = pBody;
|
|
return pPhysicsBody;
|
|
}
|
|
|
|
virtual void DestroyPhysicsBody( IPhysicsBody *pBody ) override
|
|
{
|
|
|
|
}
|
|
|
|
|
|
virtual void SetGravity( float fGravity ) override
|
|
{
|
|
|
|
}
|
|
|
|
virtual CastResult_t RayCast( Vector vBegin, Vector vEnd ) override
|
|
{
|
|
return CRapierPhysicsWorld_RayCast(m_pWorld, vBegin, vEnd);
|
|
}
|
|
|
|
virtual CastResult_t ShapeCast( HShape hShape, Quat vOrientation, Vector vBegin, Vector vEnd ) override
|
|
{
|
|
return CRapierPhysicsWorld_ShapeCast(m_pWorld, (RapierShape_t*)hShape, vOrientation, vBegin, vEnd );
|
|
|
|
}
|
|
|
|
|
|
RapierWorld_t *m_pWorld = NULL;
|
|
};
|
|
|
|
class CRapierPhysics: public IPhysics
|
|
{
|
|
public:
|
|
CRapierPhysics()
|
|
{
|
|
m_pRustHandle = CRapierPhysics_New();
|
|
}
|
|
|
|
virtual HShape CreateBall( BallShape_t ball ) override
|
|
{
|
|
return CRapierPhysics_CreateBall(m_pRustHandle, ball);
|
|
}
|
|
|
|
virtual HShape CreateCube( CuboidShape_t ball ) override
|
|
{
|
|
return CRapierPhysics_CreateCube(m_pRustHandle, ball);
|
|
}
|
|
|
|
virtual HShape CreateTriangleMesh( TriangleMeshShape_t shape ) override
|
|
{
|
|
return CRapierPhysics_CreateTriangleMesh(m_pRustHandle, shape);
|
|
}
|
|
|
|
virtual void DestroyShape( HShape hShape ) override
|
|
{
|
|
|
|
}
|
|
|
|
|
|
virtual HCollider CreateCollider( HShape hShape ) override
|
|
{
|
|
return CRapierPhysics_CreateCollider(m_pRustHandle, (RapierShape_t*)hShape);
|
|
}
|
|
|
|
|
|
virtual IPhysicsWorld *CreateWorld() override
|
|
{
|
|
RapierWorld_t *pWorld = CRapierPhysics_CreateWorld(m_pRustHandle);
|
|
if (!pWorld)
|
|
return NULL;
|
|
|
|
CRapierPhysicsWorld *pPhysicsWorld = new CRapierPhysicsWorld;
|
|
pPhysicsWorld->m_pWorld = pWorld;
|
|
return pPhysicsWorld;
|
|
}
|
|
|
|
virtual void DestroyWorld( IPhysicsWorld *pWorld ) override
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
RapierPhysics_t *m_pRustHandle = NULL;
|
|
};
|
|
|
|
EXPOSE_INTERFACE(CRapierPhysics, IPhysics, PHYSICS_INTERFACE_VERSION)
|