solveVelocityConstraints method
void
solveVelocityConstraints(
- SolverData step
)
override
Implementation
@override
void solveVelocityConstraints(SolverData step) {
var crossMassSum = 0.0;
var dotMassSum = 0.0;
final velocities = step.velocities;
final positions = step.positions;
final d = List<Vector2>.generate(
_bodies.length,
(i) {
final prev = (i == 0) ? _bodies.length - 1 : i - 1;
final next = (i == _bodies.length - 1) ? 0 : i + 1;
final v = positions[_bodies[next].islandIndex].c -
positions[_bodies[prev].islandIndex].c;
dotMassSum += (v.length2) / _bodies[i].mass;
crossMassSum += velocities[_bodies[i].islandIndex].v.cross(v);
return v;
},
);
final lambda = -2.0 * crossMassSum / dotMassSum;
_impulse += lambda;
for (var i = 0; i < _bodies.length; ++i) {
velocities[_bodies[i].islandIndex].v.x +=
_bodies[i].inverseMass * d[i].y * .5 * lambda;
velocities[_bodies[i].islandIndex].v.y +=
_bodies[i].inverseMass * -d[i].x * .5 * lambda;
}
}