Files
funnygame/rapier/physics.cpp
2026-03-04 00:18:56 +02:00

116 lines
2.3 KiB
C++

//================= Copyright kotofyt, All rights reserved ==================//
//
// Purpose: Wrap rapier bindings into C++
//
//===========================================================================//
#include "physics.h"
#define PHYSICS_OBJECT_DEFINED
#include "iphysics.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
{
}
virtual void SetGravityScale( float fScale ) override
{
}
RapierPhysicsBody_t *m_pBody;
};
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
{
}
RapierWorld_t *m_pWorld;
};
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 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;
};
EXPOSE_INTERFACE(CRapierPhysics, IPhysics, PHYSICS_INTERFACE_VERSION)