read method
Fills out with what the pad is doing now.
Synchronous, because it is read inside the frame that uses it. An asynchronous read would be a value that is stale by an unknown amount, which is the one thing a fixed-step simulation cannot work with.
Implementation
@override
void read(PadSnapshot out) => readPad(PadReadContext(index: 0, out: out));