solveDamping method
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;
}
}
}