hi, thanks for looking at this, i have managed to copy the code that i was using, and have extracted the chipmunk related interesting bits. It turns out, I am not adding the body to the space
SETUP
------
void cLevel::InitialiseChipmunkEnvironment()
{
FinishChipmunkEnvironment();
cpInitChipmunk();
m_Space = cpSpaceNew();
m_Space->iterations = 10;
m_Space->elasticIterations = 10;
cpSpaceResizeActiveHash(m_Space, 128.0f, 50000);
m_Space->gravity = cpv(0,-100);
}
void cLevel::FinishChipmunkEnvironment()
{
if (m_Space)
{
// cpSpaceFreeChildren(m_Space);
// cpSpaceFree(m_Space);
cpSpaceDestroy(m_Space);
m_Space = NULL;
}
}
BINDING LEVEL GEOMETRY
----------------------
void cCompiledLevelGeometryBucket::BindChipmunk(cpSpace * space)
{
ASSERT_MSG(m_FloorBody == NULL,"error: only call bindchipmunk() once");
m_FloorBody = cpBodyNew(INFINITY, INFINITY);
m_FloorBody->p = cpv(0, 0);
NILineDefVector::iterator line_iter = m_PhysLineDefs.begin();
cpVect verts[2];
cpShape *newShape;
while (line_iter != m_PhysLineDefs.end())
{
verts[0] = cpv((*line_iter).v[0].x,-(*line_iter).v[0].y);
verts[1] = cpv((*line_iter).v[1].x,-(*line_iter).v[1].y);
newShape = cpPolyShapeNew(m_FloorBody, 2, verts, cpv(0.0f, 0.0f));
newShape->e = 0.5; newShape->u = 0.5; newShape->collision_type = 0;
cpSpaceAddStaticShape(space,newShape);
line_iter++;
}
}
CREATING THE TEST BOXES
------------------------
void cLevelObject::LinkWithChipmunk(cpSpace * space)
{
//add the circle thing if there wasnt a proper shape
if ((m_FixedData.m_ShapeObj) && (m_FixedData.m_ShapeObj->GetRootLayer()->GetCPVertsCount() > 2))
{
const cpFloat size = 25.0f;
const cpFloat mass = 100.0f;
cpVect verts[] = {
cpv(-size,-size),
cpv(-size, size),
cpv( size, size),
cpv( size,-size),
};
cpFloat radius = cpvlength(cpv(size, size));
m_CpBody = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForPoly(mass, 4, verts, cpvzero)));
cpShape *shape = cpSpaceAddShape(space, cpPolyShapeNew(m_CpBody, 4, verts, cpvzero));
shape->e = 0.2f; shape->u = 0.7f;
m_CpShape= shape;
vects,cpv(0,0));
} else {
m_CpShape = cpCircleShapeNew(m_CpBody, 10.0, cpvzero);
cpSpaceAddShape(space,m_CpShape);
}
}
void cLevelObject::ReleaseFromChipmunk()
{
if (m_CpBody)
{
cpBodyDestroy(m_CpBody);
cpShapeDestroy(m_CpShape);
}
m_CpBody = NULL;
m_CpShape = NULL;
}
//RENDERING THE OUTLINE OF THE TEST BOXES
-----------------------------------------
glPushMatrix();
cpBody *body = m_CpBody;
cpPolyShape *poly = (cpPolyShape*)m_CpShape;
int count = poly->numVerts;
float VAR[50];
glVertexPointer(2, GL_FLOAT, 0, VAR);
cpVect *verts = poly->verts;
for(int i=0; i<count; i++){
cpVect v = cpvadd(body->p, cpvrotate(verts
, body->rot));
VAR[2*i ] = v.x;
VAR[2*i + 1] = -v.y;
}
glColor4f(1,1,0,1);
glDrawArrays(GL_LINE_LOOP, 0, count);