resolveSingleBilateral method

double resolveSingleBilateral(
  1. Body body1,
  2. Vec3 pos1,
  3. Body body2,
  4. Vec3 pos2,
  5. Vec3 normal,
)

Implementation

double resolveSingleBilateral(Body body1,Vec3 pos1,Body body2,Vec3 pos2,Vec3 normal){
  final normalLenSqr = normal.lengthSquared();
  if (normalLenSqr > 1.1) {
    return 0 ; // no impulse
  }
  // final rel_pos1 = Vec3();
  // final rel_pos2 = Vec3();
  // pos1.vsub(body1.position, rel_pos1);
  // pos2.vsub(body2.position, rel_pos2);

  final vel1 = _resolveSingleBilateralVel1;
  final vel2 = _resolveSingleBilateralVel2;
  final vel = _resolveSingleBilateralVel;
  body1.getVelocityAtWorldPoint(pos1, vel1);
  body2.getVelocityAtWorldPoint(pos2, vel2);

  vel1.vsub(vel2, vel);

  final relVel = normal.dot(vel);

  const contactDamping = 0.2;
  final massTerm = 1 / (body1.invMass + body2.invMass);
  final impulse = -contactDamping * relVel * massTerm;

  return impulse;
}