stepAll

Compute one Euler step for every agent in agents without applying any of them — a Jacobi (synchronous) update. Every step reads the current shared state, so the result is independent of the order of agents, unlike calling step and applying per agent in a loop (which lets earlier agents' moves bias later ones — a Gauss-Seidel update that depends on iteration order). Use this when reproducibility / order independence matters, e.g. flocking.

Returns one (agent, newVelocity, candidatePosition) triple per agent in iteration order; the caller applies them (typically via setVelocity / ContinuousProjection.moveTo), optionally wrapping or rejecting the candidate position first.

Throws

if dt is non-positive