update
Advances the world by one step.
The game loop drives this — once per whole base step and once for each frame's remainder — with the current Step as context: the step's duration and sampled input read as step.dt and step.input. The duration varies per call and a duration of zero must be harmless. Game logic must be a function of step.dt — rates per second, never counts of calls. The world mutates its own state in place; nothing is returned. A step may end in restart instead: the world is then discarded and a new one built in its place, so no state written before that call survives.