static void EstimateCrushing(cpBody *body, cpArbiter *arb, struct CrushingContext *context) { cpVect j = cpArbiterTotalImpulse(arb); context->magnitudeSum += cpvlength(j); context->vectorSum = cpvadd(context->vectorSum, j); }
static mrb_value arbiter_total_impulse(mrb_state* mrb, mrb_value self) { cpArbiter* arbiter; cpVect vect; arbiter = mrb_cp_get_arbiter_ptr(mrb, self); vect = cpArbiterTotalImpulse(arbiter); return mrb_cp_vect_value(mrb, vect); }
static void update(cpSpace *space, double dt) { 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, cpArbiterTotalImpulse(arb)); });
cVect cArbiter::TotalImpulse() { return tovect( cpArbiterTotalImpulse( mArbiter ) ); }
static void ScaleIterator(cpBody *body, cpArbiter *arb, cpVect *sum) { (*sum) = cpvadd(*sum, cpArbiterTotalImpulse(arb)); }
JNIEXPORT jfloat JNICALL Java_com_wiyun_engine_chipmunk_Arbiter_getTotalImpulseY (JNIEnv * env, jobject thiz) { cpArbiter* arb = (cpArbiter*)env->GetIntField(thiz, g_fid_Arbiter_mPointer); cpVect v = cpArbiterTotalImpulse(arb); return v.y; }
// From cpArbiter.h void wrArbiterTotalImpulse(cpArbiter *arb, cpVect *ret) { *ret = cpArbiterTotalImpulse(arb); }
static int cpArbiter_totalImpulse(lua_State *L) { cpArbiter *arb = toarbiter(L); push_cpVect(L, cpArbiterTotalImpulse(arb)); return 2; }
int modArbiterTotalImpulse(INSTANCE * my, int * params){ cpVect v=cpArbiterTotalImpulse((cpArbiter *)params[0]); *(float*)params[1]=v.x; *(float*)params[2]=v.y; return 1; }