resolveSingleBilateral method

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

Implementation

double resolveSingleBilateral(Body body1,Vector3 pos1,Body body2,Vector3 pos2,Vector3 normal){
  final normalLenSqr = normal.length2;
  if (normalLenSqr > 1.1) {
    return 0 ; // no impulse
  }
  // final rel_pos1 = Vector3.zero();
  // final rel_pos2 = Vector3.zero();
  // 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.sub2(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;
}