1 #ifndef LW_COLLISION_C_API_H 2 #define LW_COLLISION_C_API_H 3 4 #define PL_DECLARE_HANDLE(name) \ 5 typedef struct name##__ \ 6 { \ 7 int unused; \ 8 } * name 9 10 #ifdef BT_USE_DOUBLE_PRECISION 11 typedef double plReal; 12 #else 13 typedef float plReal; 14 #endif 15 16 typedef plReal plVector3[3]; 17 typedef plReal plQuaternion[4]; 18 19 #ifdef __cplusplus 20 extern "C" 21 { 22 #endif 23 24 /** Particular collision SDK (C-API) */ 25 PL_DECLARE_HANDLE(plCollisionSdkHandle); 26 27 /** Collision world, belonging to some collision SDK (C-API)*/ 28 PL_DECLARE_HANDLE(plCollisionWorldHandle); 29 30 /** Collision object that can be part of a collision World (C-API)*/ 31 PL_DECLARE_HANDLE(plCollisionObjectHandle); 32 33 /** Collision Shape/Geometry, property of a collision object (C-API)*/ 34 PL_DECLARE_HANDLE(plCollisionShapeHandle); 35 36 /* Collision SDK */ 37 38 extern plCollisionSdkHandle plCreateBullet2CollisionSdk(); 39 40 #ifndef DISABLE_REAL_TIME_BULLET3_COLLISION_SDK 41 extern plCollisionSdkHandle plCreateRealTimeBullet3CollisionSdk(); 42 #endif //DISABLE_REAL_TIME_BULLET3_COLLISION_SDK 43 44 // extern plCollisionSdkHandle plCreateCustomCollisionSdk(); 45 46 extern void plDeleteCollisionSdk(plCollisionSdkHandle collisionSdkHandle); 47 48 //extern int plGetSdkWorldCreationIntParameter(); 49 //extern int plSetSdkWorldCreationIntParameter(int newValue); 50 51 /* Collision World */ 52 53 extern plCollisionWorldHandle plCreateCollisionWorld(plCollisionSdkHandle collisionSdkHandle, int maxNumObjsCapacity, int maxNumShapesCapacity, int maxNumPairsCapacity); 54 extern void plDeleteCollisionWorld(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world); 55 56 extern void plAddCollisionObject(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world, plCollisionObjectHandle object); 57 extern void plRemoveCollisionObject(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world, plCollisionObjectHandle object); 58 59 /* Collision Object */ 60 61 extern plCollisionObjectHandle plCreateCollisionObject(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, void* userPointer, int userIndex, plCollisionShapeHandle cshape, plVector3 startPosition, plQuaternion startOrientation); 62 extern void plDeleteCollisionObject(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle body); 63 extern void plSetCollisionObjectTransform(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle objHandle, plVector3 startPosition, plQuaternion startOrientation); 64 65 /* Collision Shape definition */ 66 67 extern plCollisionShapeHandle plCreateSphereShape(plCollisionSdkHandle sdk, plCollisionWorldHandle worldHandle, plReal radius); 68 extern plCollisionShapeHandle plCreateCapsuleShape(plCollisionSdkHandle sdk, plCollisionWorldHandle worldHandle, plReal radius, plReal height, int capsuleAxis); 69 extern plCollisionShapeHandle plCreatePlaneShape(plCollisionSdkHandle sdk, plCollisionWorldHandle worldHandle, 70 plReal planeNormalX, 71 plReal planeNormalY, 72 plReal planeNormalZ, 73 plReal planeConstant); 74 extern plCollisionShapeHandle plCreateCompoundShape(plCollisionSdkHandle sdk, plCollisionWorldHandle worldHandle); 75 extern void plAddChildShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionShapeHandle compoundShape, plCollisionShapeHandle childShape, plVector3 childPos, plQuaternion childOrn); 76 77 extern void plDeleteShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionShapeHandle shape); 78 79 /* Contact Results */ 80 81 struct lwContactPoint 82 { 83 plVector3 m_ptOnAWorld; 84 plVector3 m_ptOnBWorld; 85 plVector3 m_normalOnB; 86 plReal m_distance; 87 }; 88 89 /* Collision Filtering */ 90 typedef void (*plNearCallback)(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, void* userData, 91 plCollisionObjectHandle objA, plCollisionObjectHandle objB); 92 93 /* Collision Queries */ 94 extern int plCollide(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle colA, plCollisionObjectHandle colB, 95 lwContactPoint* pointsOut, int pointCapacity); 96 97 extern void plWorldCollide(plCollisionSdkHandle sdkHandle, plCollisionWorldHandle world, 98 plNearCallback filter, void* userData); 99 100 #ifdef __cplusplus 101 } 102 #endif 103 104 #endif //LW_COLLISION_C_API_H 105