solveVelocityConstraints method
void
solveVelocityConstraints(
- 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 temp = Vector2.zero();
_rA.scaleOrthogonalInto(wA, vpA);
vpA.add(vA);
_rB.scaleOrthogonalInto(wB, vpB);
vpB.add(vB);
final c = _length - maxLength;
var cDot = _u.dot(
temp
..setFrom(vpB)
..sub(vpA),
);
// Predictive constraint.
if (c < 0.0) {
cDot += data.step.invDt * c;
}
var impulse = -_mass * cDot;
final oldImpulse = _impulse;
_impulse = min<double>(0.0, _impulse + impulse);
impulse = _impulse - oldImpulse;
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].v = vA;
data.velocities[_indexA].w = wA;
// data.velocities[_indexB].v = vB;
data.velocities[_indexB].w = wB;
}