//================= Copyright kotofyt, All rights reserved ==================// // // Purpose: Wrap rapier bindings into C++ // //===========================================================================// #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); } 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 { } 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 CreateTriangles( TrianglesShape_t shape ) override { return CRapierPhysics_CreateCube(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)