solveVelocityConstraints method

  1. @override
void solveVelocityConstraints(
  1. SolverData data
)
override

Implementation

@override
void solveVelocityConstraints(SolverData data) {
  final vA = data.velocities[_indexA].v;
  var wA = data.velocities[_indexA].w;
  final vB = data.velocities[_indexB].v;
  var wB = data.velocities[_indexB].w;

  final vpA = Vector2.zero();
  final vpB = Vector2.zero();

  // Cdot = dot(u, v + cross(w, r))
  _rA.scaleOrthogonalInto(wA, vpA);
  vpA.add(vA);
  _rB.scaleOrthogonalInto(wB, vpB);
  vpB.add(vB);
  final cDot = _u.dot(vpB..sub(vpA));

  final impulse = -_mass * (cDot + _bias + _gamma * _impulse);
  _impulse += impulse;

  final pX = impulse * _u.x;
  final pY = impulse * _u.y;

  vA.x -= _invMassA * pX;
  vA.y -= _invMassA * pY;
  wA -= _invIA * (_rA.x * pY - _rA.y * pX);
  vB.x += _invMassB * pX;
  vB.y += _invMassB * pY;
  wB += _invIB * (_rB.x * pY - _rB.y * pX);

  data.velocities[_indexA].w = wA;
  data.velocities[_indexB].w = wB;
}