solveVelocityConstraints method
void
solveVelocityConstraints(
- SolverData data
)
override
Implementation
@override
void solveVelocityConstraints(SolverData data) {
final vB = data.velocities[_indexB].v;
var wB = data.velocities[_indexB].w;
// Cdot = v + cross(w, r)
final cDot = Vector2.zero();
_rB.scaleOrthogonalInto(wB, cDot);
cDot.add(vB);
final impulse = Vector2.zero();
final temp = Vector2.zero();
temp
..setFrom(_impulse)
..scale(_gamma)
..add(_c)
..add(cDot)
..negate();
_mass.transformed(temp, impulse);
final oldImpulse = temp;
oldImpulse.setFrom(_impulse);
_impulse.add(impulse);
final maxImpulse = data.step.dt * _maxForce;
if (_impulse.length2 > maxImpulse * maxImpulse) {
_impulse.scale(maxImpulse / _impulse.length);
}
impulse
..setFrom(_impulse)
..sub(oldImpulse);
vB.x += _invMassB * impulse.x;
vB.y += _invMassB * impulse.y;
wB += _invIB * _rB.cross(impulse);
data.velocities[_indexB].w = wB;
}