solveDamping method

void solveDamping(
  1. TimeStep step
)

Implementation

void solveDamping(TimeStep step) {
  // reduces normal velocity of each contact
  final damping = dampingStrength;
  for (final contact in bodyContactBuffer) {
    final particle = contact.particle;
    final b = contact.body;
    final w = contact.weight;
    final m = contact.mass;
    final n = contact.normal;
    final p = particle.position;
    final tempX = p.x - b.sweep.c.x;
    final tempY = p.y - b.sweep.c.y;
    final velA = particle.velocity;
    final vx = -b.angularVelocity * tempY + b.linearVelocity.x - velA.x;
    final vy = b.angularVelocity * tempX + b.linearVelocity.y - velA.y;
    final vn = vx * n.x + vy * n.y;
    if (vn < 0) {
      final f = _tempVec;
      f.x = damping * w * m * vn * n.x;
      f.y = damping * w * m * vn * n.y;
      velA.x += particleInverseMass * f.x;
      velA.y += particleInverseMass * f.y;
      f.x = -f.x;
      f.y = -f.y;
      b.applyLinearImpulse(f, point: p);
    }
  }
  for (final contact in contactBuffer) {
    final particleA = contact.particleA;
    final particleB = contact.particleB;
    final w = contact.weight;
    final n = contact.normal;
    final velA = particleA.velocity;
    final velB = particleB.velocity;
    final vx = velB.x - velA.x;
    final vy = velB.y - velA.y;
    final vn = vx * n.x + vy * n.y;
    if (vn < 0) {
      final fx = damping * w * vn * n.x;
      final fy = damping * w * vn * n.y;
      velA.x += fx;
      velA.y += fy;
      velB.x -= fx;
      velB.y -= fy;
    }
  }
}