Files
funnygame/rapier/physics.h
2026-03-29 19:38:17 +03:00

119 lines
3.7 KiB
C

#ifndef RAPIER_H
#define RAPIER_H
typedef enum EPhysicsBodyType {
k_EPhysics_Static,
k_EPhysics_Dynamic,
k_EPhysics_KinematicPositionBased,
k_EPhysics_KinematicVelocityBased,
} EPhysicsBodyType;
typedef struct RapierCollider_t RapierCollider_t;
typedef struct RapierPhysicsBody_t RapierPhysicsBody_t;
typedef struct RapierPhysics_t RapierPhysics_t;
typedef struct RapierShape_t RapierShape_t;
typedef struct RapierWorld_t RapierWorld_t;
typedef struct Vector {
float x;
float y;
float z;
} Vector;
typedef struct Quat {
float x;
float y;
float z;
float w;
} Quat;
typedef struct CastResult_t {
bool m_bIsHit;
const struct RapierCollider_t *m_hCollider;
struct Vector m_vCollisionPoint;
float m_fTime;
float m_fDistance;
} CastResult_t;
typedef struct BallShape_t {
float m_fRadius;
} BallShape_t;
typedef struct CuboidShape_t {
float m_fExtentX;
float m_fExtentY;
float m_fExtentZ;
} CuboidShape_t;
typedef struct TriangleMeshShape_t {
const float *m_pfPositions;
uint32_t m_nPositionCount;
const float *m_puIndicies;
uint32_t m_nIndiciesCount;
} TriangleMeshShape_t;
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
struct Vector CRapierPhysicsBody_GetPosition(struct RapierPhysicsBody_t *this_);
struct Quat CRapierPhysicsBody_GetRotation(struct RapierPhysicsBody_t *this_);
void CRapierPhysicsBody_SetPosition(struct RapierPhysicsBody_t *this_,
float fX,
float fY,
float fZ);
void CRapierPhysicsBody_SetRotation(struct RapierPhysicsBody_t *this_,
float fX,
float fY,
float fZ,
float fW);
void CRapierPhysicsBody_SetType(struct RapierPhysicsBody_t *this_, enum EPhysicsBodyType eType);
struct RapierPhysicsBody_t *CRapierPhysicsWorld_CreateRigidBody(struct RapierWorld_t *this_,
struct RapierCollider_t *pCollider,
enum EPhysicsBodyType eType);
void CRapierPhysicsWorld_Frame(struct RapierWorld_t *this_, float fDelta);
struct CastResult_t CRapierPhysicsWorld_RayCast(struct RapierWorld_t *this_,
struct Vector vBegin,
struct Vector vEnd);
struct CastResult_t CRapierPhysicsWorld_ShapeCast(struct RapierWorld_t *this_,
struct RapierShape_t *pShape,
struct Quat vOrientation,
struct Vector vBegin,
struct Vector vEnd);
struct RapierShape_t *CRapierPhysics_CreateBall(struct RapierPhysics_t *this_,
struct BallShape_t ball);
struct RapierCollider_t *CRapierPhysics_CreateCollider(struct RapierPhysics_t *this_,
struct RapierShape_t *pShape);
struct RapierShape_t *CRapierPhysics_CreateCube(struct RapierPhysics_t *this_,
struct CuboidShape_t cuboid);
struct RapierShape_t *CRapierPhysics_CreateTriangleMesh(struct RapierPhysics_t *this_,
struct TriangleMeshShape_t triangle);
struct RapierWorld_t *CRapierPhysics_CreateWorld(struct RapierPhysics_t *this_);
struct RapierPhysics_t *CRapierPhysics_New(void);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif /* RAPIER_H */