123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #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
|