/********************************************************************
*
* File: fsCCollisionWorld.h
*
* Purpose: Box2d collision world component
*
*********************************************************************/
#ifndef fsCCollisionWorldhdr
#define fsCCollisionWorldhdr
#include <fsCore/src/fsCUniqueId.h>
#include "../../fsICollisionWorld.h"
#include "Box2D/Box2D.h"
#include "DebugDraw/DebugDraw.h"
struct b2BodyDef;
namespace fsNCollision
{
class fsICollisionBody;
class fsCCollisionBody;
class fsCCollisionWorld : public fsICollisionWorld
{
friend class fsICollisionWorld;
public:
virtual void dynamicBodyDestroy(fsICollisionBody* const pBody) override;
virtual fsICollisionBody* dynamicBodyCreate(fsCEntity* const pParent, fsICollisionFixture* pFixture, fsICollisionBody::eTYPE pType, const fsPoint& pStartPos) override;
protected:
virtual fsF32 scaleFactorGetDo() const override;
virtual void renderDo() override;
virtual void updateDo() override;
fsCCollisionWorld();
virtual ~fsCCollisionWorld();<--- Destructor in derived class
private:
class fsCContactListener : public b2ContactListener
{
//virtual void BeginContact(b2Contact* contact) override;
//virtual void EndContact(b2Contact* contact) override;
virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold) override;
//virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) override;
};
void preSolve(b2Contact* contact, const b2Manifold* oldManifold);
fsCCollisionBody* const dynamicBodyCreate(const b2BodyDef& pBodyDef);
fsCContactListener* mContactListener;
fsF32 mScaleFactor;
b2World* mImpl;
DebugDraw* mDebug;
};
}
#endif