warmStart method
void
warmStart()
Implementation
void warmStart() {
// Warm start.
for (final contact in _contacts) {
final velocityConstraint = contact.velocityConstraint;
final indexA = velocityConstraint.indexA;
final indexB = velocityConstraint.indexB;
final mA = velocityConstraint.invMassA;
final iA = velocityConstraint.invIA;
final mB = velocityConstraint.invMassB;
final iB = velocityConstraint.invIB;
final pointCount = velocityConstraint.pointCount;
final vA = _velocities[indexA].v;
var wA = _velocities[indexA].w;
final vB = _velocities[indexB].v;
var wB = _velocities[indexB].w;
final normal = velocityConstraint.normal;
final tangentX = 1.0 * normal.y;
final tangentY = -1.0 * normal.x;
for (var j = 0; j < pointCount; ++j) {
final vcp = velocityConstraint.points[j];
final pX = tangentX * vcp.tangentImpulse + normal.x * vcp.normalImpulse;
final pY = tangentY * vcp.tangentImpulse + normal.y * vcp.normalImpulse;
wA -= iA * (vcp.rA.x * pY - vcp.rA.y * pX);
vA.x -= pX * mA;
vA.y -= pY * mA;
wB += iB * (vcp.rB.x * pY - vcp.rB.y * pX);
vB.x += pX * mB;
vB.y += pY * mB;
}
_velocities[indexA].w = wA;
_velocities[indexB].w = wB;
}
}