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 vC = data.velocities[_indexC].v;
  var wC = data.velocities[_indexC].w;
  final vD = data.velocities[_indexD].v;
  var wD = data.velocities[_indexD].w;

  final temp1 = Vector2.zero();
  final temp2 = Vector2.zero();
  var cDot = _jvAC.dot(
        temp1
          ..setFrom(vA)
          ..sub(vC),
      ) +
      _jvBD.dot(
        temp2
          ..setFrom(vB)
          ..sub(vD),
      );
  cDot += (_jwA * wA - _jwC * wC) + (_jwB * wB - _jwD * wD);

  final impulse = -_mass * cDot;
  _impulse += impulse;

  vA.x += (_mA * impulse) * _jvAC.x;
  vA.y += (_mA * impulse) * _jvAC.y;
  wA += _iA * impulse * _jwA;

  vB.x += (_mB * impulse) * _jvBD.x;
  vB.y += (_mB * impulse) * _jvBD.y;
  wB += _iB * impulse * _jwB;

  vC.x -= (_mC * impulse) * _jvAC.x;
  vC.y -= (_mC * impulse) * _jvAC.y;
  wC -= _iC * impulse * _jwC;

  vD.x -= (_mD * impulse) * _jvBD.x;
  vD.y -= (_mD * impulse) * _jvBD.y;
  wD -= _iD * impulse * _jwD;

  // data.velocities[_indexA].v = vA;
  data.velocities[_indexA].w = wA;
  // data.velocities[_indexB].v = vB;
  data.velocities[_indexB].w = wB;
  // data.velocities[_indexC].v = vC;
  data.velocities[_indexC].w = wC;
  // data.velocities[_indexD].v = vD;
  data.velocities[_indexD].w = wD;
}