#ifndef BULLET2_COLLISION_SDK_H
#define BULLET2_COLLISION_SDK_H

#include "CollisionSdkInterface.h"

class Bullet2CollisionSdk : public CollisionSdkInterface
{
	struct Bullet2CollisionSdkInternalData* m_internalData;
	
public:
	
	Bullet2CollisionSdk();
	
	virtual ~Bullet2CollisionSdk();
	
	virtual plCollisionWorldHandle createCollisionWorld(int maxNumObjsCapacity, int maxNumShapesCapacity, int maxNumPairsCapacity);
	
	virtual void deleteCollisionWorld(plCollisionWorldHandle worldHandle);

	virtual plCollisionShapeHandle createSphereShape(plCollisionWorldHandle worldHandle, plReal radius);
	
	virtual plCollisionShapeHandle createPlaneShape(plCollisionWorldHandle worldHandle, 
													plReal planeNormalX, 
													plReal planeNormalY, 
													plReal planeNormalZ, 
													plReal planeConstant);

	virtual plCollisionShapeHandle createCapsuleShape(plCollisionWorldHandle worldHandle, 
													plReal radius,
													plReal height,
													int capsuleAxis);

	virtual plCollisionShapeHandle createCompoundShape(plCollisionWorldHandle worldHandle);
	virtual void addChildShape(plCollisionWorldHandle worldHandle,plCollisionShapeHandle compoundShape, plCollisionShapeHandle childShape,plVector3 childPos,plQuaternion childOrn);

	virtual void deleteShape(plCollisionWorldHandle worldHandle, plCollisionShapeHandle shape);
	
	virtual void addCollisionObject(plCollisionWorldHandle world, plCollisionObjectHandle object);
	virtual  void removeCollisionObject(plCollisionWorldHandle world, plCollisionObjectHandle object);
	
    virtual  plCollisionObjectHandle createCollisionObject( plCollisionWorldHandle worldHandle,  void* userPointer, int userIndex,  plCollisionShapeHandle cshape ,
                                                           plVector3 startPosition,plQuaternion startOrientation );
    virtual  void deleteCollisionObject(plCollisionObjectHandle body);
	virtual void setCollisionObjectTransform(plCollisionWorldHandle world, plCollisionObjectHandle body,
												plVector3 position,plQuaternion orientation );
	
    virtual int collide(plCollisionWorldHandle world,plCollisionObjectHandle colA, plCollisionObjectHandle colB,
                        lwContactPoint* pointsOut, int pointCapacity);
	
    virtual void collideWorld( plCollisionWorldHandle world,
                              plNearCallback filter, void* userData);

	static plCollisionSdkHandle createBullet2SdkHandle();
};

#endif //BULLET2_COLLISION_SDK_H
