static void EstimateCrushing(cpBody *body, cpArbiter *arb, struct CrushingContext *context) { cpVect j = cpArbiterTotalImpulseWithFriction(arb); context->magnitudeSum += cpvlength(j); context->vectorSum = cpvadd(context->vectorSum, j); }
static void update(cpSpace *space) { int steps = 1; cpFloat dt = 1.0f/60.0f/(cpFloat)steps; for(int i=0; i<steps; i++){ cpSpaceStep(space, dt); } ChipmunkDemoPrintString("Place objects on the scale to weigh them. The ball marks the shapes it's sitting on.\n"); // Sum the total impulse applied to the scale from all collision pairs in the contact graph. // If your compiler supports blocks, your life is a little easier. // You can use the "Block" versions of the functions without needing the callbacks above. #if USE_BLOCKS __block cpVect impulseSum = cpvzero; cpBodyEachArbiter_b(scaleStaticBody, ^(cpArbiter *arb){ impulseSum = cpvadd(impulseSum, cpArbiterTotalImpulseWithFriction(arb)); });
cVect cArbiter::TotalImpulseWithFriction() { return tovect( cpArbiterTotalImpulseWithFriction( mArbiter ) ); }
JNIEXPORT jfloat JNICALL Java_com_wiyun_engine_chipmunk_Arbiter_getTotalImpulseWithFrictionY (JNIEnv * env, jobject thiz) { cpArbiter* arb = (cpArbiter*)env->GetIntField(thiz, g_fid_Arbiter_mPointer); cpVect v = cpArbiterTotalImpulseWithFriction(arb); return v.y; }
static void ScaleIterator(cpBody *body, cpArbiter *arb, cpVect *sum) { (*sum) = cpvadd(*sum, cpArbiterTotalImpulseWithFriction(arb)); }
void wrArbiterTotalImpulseWithFriction(cpArbiter *arb, cpVect *ret) { *ret = cpArbiterTotalImpulseWithFriction(arb); }
static int cpArbiter_totalImpulseWithFriction(lua_State *L) { cpArbiter *arb = toarbiter(L); push_cpVect(L, cpArbiterTotalImpulseWithFriction(arb)); return 2; }
int modArbiterTotalImpulseWithFriction(INSTANCE * my, int * params){ cpVect v=cpArbiterTotalImpulseWithFriction((cpArbiter *)params[0]); *(float*)params[1]=v.x; *(float*)params[2]=v.y; return 1; }