mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-15 14:10:11 +00:00
112 lines
4.3 KiB
C
112 lines
4.3 KiB
C
#ifndef LW_COLLISION_C_API_H
|
|
#define LW_COLLISION_C_API_H
|
|
|
|
|
|
#define PL_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name
|
|
|
|
|
|
#ifdef BT_USE_DOUBLE_PRECISION
|
|
typedef double plReal;
|
|
#else
|
|
typedef float plReal;
|
|
#endif
|
|
|
|
typedef plReal plVector3[3];
|
|
typedef plReal plQuaternion[4];
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
|
|
/** Particular collision SDK (C-API) */
|
|
PL_DECLARE_HANDLE(plCollisionSdkHandle);
|
|
|
|
/** Collision world, belonging to some collision SDK (C-API)*/
|
|
PL_DECLARE_HANDLE(plCollisionWorldHandle);
|
|
|
|
/** Collision object that can be part of a collision World (C-API)*/
|
|
PL_DECLARE_HANDLE(plCollisionObjectHandle);
|
|
|
|
/** Collision Shape/Geometry, property of a collision object (C-API)*/
|
|
PL_DECLARE_HANDLE(plCollisionShapeHandle);
|
|
|
|
/* Collision SDK */
|
|
|
|
extern plCollisionSdkHandle plCreateBullet2CollisionSdk();
|
|
|
|
#ifndef DISABLE_REAL_TIME_BULLET3_COLLISION_SDK
|
|
extern plCollisionSdkHandle plCreateRealTimeBullet3CollisionSdk();
|
|
#endif //DISABLE_REAL_TIME_BULLET3_COLLISION_SDK
|
|
|
|
// extern plCollisionSdkHandle plCreateCustomCollisionSdk();
|
|
|
|
extern void plDeleteCollisionSdk(plCollisionSdkHandle collisionSdkHandle);
|
|
|
|
//extern int plGetSdkWorldCreationIntParameter();
|
|
//extern int plSetSdkWorldCreationIntParameter(int newValue);
|
|
|
|
/* Collision World */
|
|
|
|
extern plCollisionWorldHandle plCreateCollisionWorld(plCollisionSdkHandle collisionSdkHandle, int maxNumObjsCapacity, int maxNumShapesCapacity, int maxNumPairsCapacity);
|
|
extern void plDeleteCollisionWorld(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world);
|
|
|
|
|
|
extern void plAddCollisionObject(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world, plCollisionObjectHandle object);
|
|
extern void plRemoveCollisionObject(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world, plCollisionObjectHandle object);
|
|
|
|
|
|
/* Collision Object */
|
|
|
|
extern plCollisionObjectHandle plCreateCollisionObject( plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, void* userPointer, int userIndex, plCollisionShapeHandle cshape , plVector3 startPosition,plQuaternion startOrientation);
|
|
extern void plDeleteCollisionObject(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle body);
|
|
extern void plSetCollisionObjectTransform( plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle objHandle, plVector3 startPosition,plQuaternion startOrientation);
|
|
|
|
/* Collision Shape definition */
|
|
|
|
extern plCollisionShapeHandle plCreateSphereShape(plCollisionSdkHandle sdk, plCollisionWorldHandle worldHandle, plReal radius);
|
|
extern plCollisionShapeHandle plCreateCapsuleShape(plCollisionSdkHandle sdk, plCollisionWorldHandle worldHandle, plReal radius, plReal height, int capsuleAxis);
|
|
extern plCollisionShapeHandle plCreatePlaneShape(plCollisionSdkHandle sdk, plCollisionWorldHandle worldHandle,
|
|
plReal planeNormalX,
|
|
plReal planeNormalY,
|
|
plReal planeNormalZ,
|
|
plReal planeConstant);
|
|
extern plCollisionShapeHandle plCreateCompoundShape(plCollisionSdkHandle sdk,plCollisionWorldHandle worldHandle);
|
|
extern void plAddChildShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionShapeHandle compoundShape,plCollisionShapeHandle childShape, plVector3 childPos,plQuaternion childOrn);
|
|
|
|
extern void plDeleteShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionShapeHandle shape);
|
|
|
|
|
|
|
|
/* Contact Results */
|
|
|
|
struct lwContactPoint
|
|
{
|
|
plVector3 m_ptOnAWorld;
|
|
plVector3 m_ptOnBWorld;
|
|
plVector3 m_normalOnB;
|
|
plReal m_distance;
|
|
};
|
|
|
|
/* Collision Filtering */
|
|
typedef void(*plNearCallback)(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, void* userData,
|
|
plCollisionObjectHandle objA, plCollisionObjectHandle objB);
|
|
|
|
|
|
/* Collision Queries */
|
|
extern int plCollide(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle colA, plCollisionObjectHandle colB,
|
|
lwContactPoint* pointsOut, int pointCapacity);
|
|
|
|
extern void plWorldCollide(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world,
|
|
plNearCallback filter, void* userData);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif //LW_COLLISION_C_API_H
|
|
|