solveRigid method

void solveRigid(
  1. TimeStep step
)

Implementation

void solveRigid(TimeStep step) {
  for (final group in groupBuffer) {
    if ((group.groupFlags & ParticleGroupType.rigidParticleGroup) != 0) {
      group.updateStatistics();
      final temp = _tempVec;
      final rotation = _tempRot;
      rotation.setAngle(step.dt * group.angularVelocity);
      final cross = Rot.mulVec2(rotation, group.center);
      temp
        ..setFrom(group.linearVelocity)
        ..scale(step.dt)
        ..add(group.center)
        ..sub(cross);
      _tempXf.p.setFrom(temp);
      _tempXf.q.setFrom(rotation);
      group.transform.setFrom(Transform.mul(_tempXf, group.transform));
      final velocityTransform = _tempXf2
        ..p.x = step.invDt * _tempXf.p.x
        ..p.y = step.invDt * _tempXf.p.y
        ..q.sin = step.invDt * _tempXf.q.sin
        ..q.cos = step.invDt * (_tempXf.q.cos - 1);
      for (final particle in group.particles) {
        particle.velocity.setFrom(
          Transform.mulVec2(velocityTransform, particle.position),
        );
      }
    }
  }
}