circleToStaticLine static method
Implementation
static bool circleToStaticLine(RigidBody body, Line line) {
final circle = body.shape as Circle;
_closestPointOnLine(circle.position, line, _temp2);
// diff = circle.position - closest
_temp.set(circle.position.x - _temp2.x, circle.position.y - _temp2.y);
final distSq = _temp.magnitudeSquared;
if (distSq >= circle.radius * circle.radius) return false;
final dist = distSq == 0 ? 0.0 : _temp.magnitude;
if (dist == 0) {
_temp.set(0, 1);
} else {
_temp.scale(1 / dist);
}
final penetration = circle.radius - dist;
circle.position.x += _temp.x * penetration;
circle.position.y += _temp.y * penetration;
final sepVel = body.velocity.x * _temp.x + body.velocity.y * _temp.y;
if (sepVel > 0) return true;
final impulse = -sepVel * (1 + body.elasticity);
body.velocity.x += _temp.x * impulse;
body.velocity.y += _temp.y * impulse;
return true;
}