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();
  final pA = Vector2.zero();
  final pB = Vector2.zero();

  _rA.scaleOrthogonalInto(wA, vpA);
  vpA.add(vA);
  _rB.scaleOrthogonalInto(wB, vpB);
  vpB.add(vB);

  final cDot = -_uA.dot(vpA) - _ratio * _uB.dot(vpB);
  final impulse = -_mass * cDot;
  _impulse += impulse;

  pA
    ..setFrom(_uA)
    ..scale(-impulse);
  pB
    ..setFrom(_uB)
    ..scale(-_ratio * impulse);
  vA.x += _invMassA * pA.x;
  vA.y += _invMassA * pA.y;
  wA += _invIA * _rA.cross(pA);
  vB.x += _invMassB * pB.x;
  vB.y += _invMassB * pB.y;
  wB += _invIB * _rB.cross(pB);

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