CollisionSdkC_Api.h 4.3 KB

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