#include "CollisionSdkC_Api.h" #include "Internal/CollisionSdkInterface.h" #include "Internal/Bullet2CollisionSdk.h" #include "Internal/RealTimeBullet3CollisionSdk.h" /* Collision World */ plCollisionWorldHandle plCreateCollisionWorld(plCollisionSdkHandle collisionSdkHandle, int maxNumObjsCapacity, int maxNumShapesCapacity, int maxNumPairsCapacity) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; return sdk->createCollisionWorld( maxNumObjsCapacity, maxNumShapesCapacity, maxNumPairsCapacity); } void plDeleteCollisionWorld(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; if (sdk && worldHandle) { sdk->deleteCollisionWorld(worldHandle); } } plCollisionSdkHandle plCreateBullet2CollisionSdk() { #ifndef DISABLE_BULLET2_COLLISION_SDK return Bullet2CollisionSdk::createBullet2SdkHandle(); #else return 0; #endif //DISABLE_BULLET2_COLLISION_SDK } plCollisionSdkHandle plCreateRealTimeBullet3CollisionSdk() { #ifndef DISABLE_REAL_TIME_BULLET3_COLLISION_SDK return RealTimeBullet3CollisionSdk::createRealTimeBullet3CollisionSdkHandle(); #else return 0; #endif } void plDeleteCollisionSdk(plCollisionSdkHandle collisionSdkHandle) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; delete sdk; } plCollisionShapeHandle plCreateSphereShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plReal radius) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; return sdk->createSphereShape(worldHandle,radius); } plCollisionShapeHandle plCreatePlaneShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plReal planeNormalX, plReal planeNormalY, plReal planeNormalZ, plReal planeConstant) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; return sdk->createPlaneShape(worldHandle,planeNormalX,planeNormalY,planeNormalZ,planeConstant); } plCollisionShapeHandle plCreateCapsuleShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plReal radius, plReal height, int capsuleAxis) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; return sdk->createCapsuleShape(worldHandle,radius,height,capsuleAxis); } plCollisionShapeHandle plCreateCompoundShape(plCollisionSdkHandle collisionSdkHandle,plCollisionWorldHandle worldHandle) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; return sdk->createCompoundShape(worldHandle); } void plAddChildShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionShapeHandle compoundShape,plCollisionShapeHandle childShape, plVector3 childPos,plQuaternion childOrn) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; sdk->addChildShape(worldHandle,compoundShape,childShape,childPos,childOrn); } void plDeleteShape(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionShapeHandle shapeHandle) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; sdk->deleteShape(worldHandle,shapeHandle); } plCollisionObjectHandle plCreateCollisionObject( plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, void* userData, int userIndex, plCollisionShapeHandle cshape ,plVector3 childPos,plQuaternion childOrn) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; return sdk->createCollisionObject(worldHandle, userData, userIndex, cshape, childPos, childOrn); } void plDeleteCollisionObject(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle body) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; sdk->deleteCollisionObject(body); } void plSetCollisionObjectTransform( plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle objHandle, plVector3 position,plQuaternion orientation) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; sdk->setCollisionObjectTransform(worldHandle,objHandle,position,orientation); } void plAddCollisionObject(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle world, plCollisionObjectHandle object) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; sdk->addCollisionObject(world,object); } void plRemoveCollisionObject(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle world, plCollisionObjectHandle object) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; sdk->removeCollisionObject(world,object); } /* Collision Queries */ int plCollide(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle worldHandle, plCollisionObjectHandle colA, plCollisionObjectHandle colB, lwContactPoint* pointsOut, int pointCapacity) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; return sdk->collide(worldHandle, colA,colB,pointsOut,pointCapacity); } void plWorldCollide(plCollisionSdkHandle collisionSdkHandle, plCollisionWorldHandle world, plNearCallback filter, void* userData) { CollisionSdkInterface* sdk = (CollisionSdkInterface*) collisionSdkHandle; sdk->collideWorld(world,filter,userData); }