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