init method
Implementation
void init(ContactSolverDef def) {
_step = def.step;
_positions = def.positions;
_velocities = def.velocities;
_contacts = def.contacts;
for (final contact in _contacts) {
final fixtureA = contact.fixtureA;
final fixtureB = contact.fixtureB;
final shapeA = fixtureA.shape;
final shapeB = fixtureB.shape;
final radiusA = shapeA.radius;
final radiusB = shapeB.radius;
final bodyA = fixtureA.body;
final bodyB = fixtureB.body;
final manifold = contact.manifold;
final pointCount = manifold.pointCount;
assert(pointCount > 0);
final velocityConstraint = contact.velocityConstraint
..friction = contact.friction
..restitution = contact.restitution
..tangentSpeed = contact.tangentSpeed
..indexA = bodyA.islandIndex
..indexB = bodyB.islandIndex
..invMassA = bodyA.inverseMass
..invMassB = bodyB.inverseMass
..invIA = bodyA.inverseInertia
..invIB = bodyB.inverseInertia
..contactIndex = _contacts.indexOf(contact)
..pointCount = pointCount
..K.setZero()
..normalMass.setZero();
final positionConstraint = contact.positionConstraint
..indexA = bodyA.islandIndex
..indexB = bodyB.islandIndex
..invMassA = bodyA.inverseMass
..invMassB = bodyB.inverseMass
..localCenterA.setFrom(bodyA.sweep.localCenter)
..localCenterB.setFrom(bodyB.sweep.localCenter)
..invIA = bodyA.inverseInertia
..invIB = bodyB.inverseInertia
..localNormal.setFrom(manifold.localNormal)
..localPoint.setFrom(manifold.localPoint)
..pointCount = pointCount
..radiusA = radiusA
..radiusB = radiusB
..type = manifold.type;
for (var j = 0; j < pointCount; j++) {
final cp = manifold.points[j];
final vcp = velocityConstraint.points[j];
if (_step.warmStarting) {
vcp.normalImpulse = _step.dtRatio * cp.normalImpulse;
vcp.tangentImpulse = _step.dtRatio * cp.tangentImpulse;
} else {
vcp.normalImpulse = 0.0;
vcp.tangentImpulse = 0.0;
}
vcp.rA.setZero();
vcp.rB.setZero();
vcp.normalMass = 0.0;
vcp.tangentMass = 0.0;
vcp.velocityBias = 0.0;
positionConstraint.localPoints[j].x = cp.localPoint.x;
positionConstraint.localPoints[j].y = cp.localPoint.y;
}
}
}