Exemplo n.º 1
0
void
classdef_circularBody_finalize(JSContext* cx, JSObject* sp) {
  cpBody* body = (cpBody*)JS_GetPrivate(cx, sp);
  printf("About to try and delete a cpBody and, its cpConstraints and its cpShapes...\n");
  cpBodyEachShape(body, &removeShapeFromBodyIterator, 0);
  cpBodyEachConstraint(body, &removeConstraintFromBodyIterator, 0);
  cpBodyFree(body);
}
Exemplo n.º 2
0
Body::~Body(){
	if(body){
		//clean up all constraints
		constraintsToRemove.clear();
		cpBodyEachConstraint(body, &constraintRemoveQuery, (void*)this);
		for(auto c: constraintsToRemove){
			((Constraint*)cpConstraintGetUserData(c))->constraint = nullptr;
			cpSpaceRemoveConstraint(cpConstraintGetSpace(c), c);
			cpConstraintDestroy(c);
		}

		//remove body
		cpSpaceRemoveBody(cpBodyGetSpace(body), body);
		cpBodyFree(body);
		body = nullptr;
	}
}
Exemplo n.º 3
0
void cBody::EachConstraint( ConstraintIteratorFunc Func, void * data ) {
	cConstraintIterator it( this, data, Func );
	cpBodyEachConstraint( mBody, &BodyConstraintIteratorFunc, (void*)&it );
}
Exemplo n.º 4
0
__declspec( dllexport ) void deletevar( const void * _in, int in_size, void * _out, int out_sz )
{
	cpBody *body;
	int i;
	int index;
	Variable *var;
	Variable *mainVar = vhRemoveVariable(&mVariableHandler,PEEKINT(INPUT_MEMBLOCK,0));
	
	if (mainVar->mType == VarTypeBody)
	{
		body = (cpBody*)mainVar->mPtr;
		resetVariableList();
		cpBodyEachShape(body,listShape,0);
		index = 0;
		for (i = 0;i != mVariableListIterator;i++)
		{
			var = mVariableList[i];
			
			POKEINT(OUTPUT_MEMBLOCK,index,var->mCBPtr);index += 4;
			
			cpSpaceRemoveShape(&mSpace,(cpShape*)var->mPtr);
			cpShapeFree((cpShape*)var->mPtr);
			//MessageBoxA(NULL,"ShapeRemoved2","Error",MB_OK);

			vhRemoveVariable(&mVariableHandler,var->mLocalHandle);
			varFree(var);
		}

		resetVariableList();
		cpBodyEachConstraint(body,listConstraint,0);
		for (i = 0;i != mVariableListIterator;i++)
		{
			var = mVariableList[i];
			POKEINT(OUTPUT_MEMBLOCK,index,var->mCBPtr);index+=4;
			//MessageBoxA(NULL,"Constraint removed2","Error",MB_OK);
			cpSpaceRemoveConstraint(&mSpace,(cpConstraint*)var->mPtr);
			cpConstraintFree((cpConstraint*)var->mPtr);
			vhRemoveVariable(&mVariableHandler,var->mLocalHandle);
			varFree(var);
		}
		POKEINT(OUTPUT_MEMBLOCK,index,0);//End point
		//MessageBoxA(NULL,"BodyRemoved","Error",MB_OK);
		cpSpaceRemoveBody(&mSpace,body);
		cpBodyFree(body);
		varFree(mainVar);
	}
	else if (mainVar->mType == VarTypeShape)
	{
		cpSpaceRemoveShape(&mSpace,(cpShape*)mainVar->mPtr);
		cpShapeFree((cpShape*)mainVar->mPtr);
		//MessageBoxA(NULL,"ShapeRemoved","Error",MB_OK);
		varFree(mainVar);
		POKEINT(OUTPUT_MEMBLOCK,0,0);
	}
	else if (mainVar->mType == VarTypeConstraint)
	{
		cpSpaceRemoveConstraint(&mSpace,(cpConstraint*)mainVar->mPtr);
		cpConstraintFree((cpConstraint*)mainVar->mPtr);
		varFree(mainVar);

		POKEINT(OUTPUT_MEMBLOCK,0,0);
	}
	else if (mainVar->mType == VarTypeDataArray)
	{
		daFree((DataArray*)mainVar->mPtr);
		varFree(mainVar);
		POKEINT(OUTPUT_MEMBLOCK,0,0);
	}
	else
	{
		//Failure...
		MessageBoxA(NULL,"Unknown cpChipmunk error 11","Error",MB_OK);
		varFree(mainVar);
		POKEINT(OUTPUT_MEMBLOCK,0,0);
		
	}
	
}
Exemplo n.º 5
0
void Body::eachConstraint(BodyConstraintIteratorFunc func)
{
		cpBodyEachConstraint(body,*BodyEachConstraint,&func);
}
Exemplo n.º 6
0
void Body::eachConstraint(cpBodyConstraintIteratorFunc func,void *data)
{
		cpBodyEachConstraint(body,func,data);
}