pub fn render_swim_frame(
koi_development: &KoiDevelopment,
koi_body: KoiBody,
behavior: Behavior,
frame_index: u32,
) -> KoiFrameExpand description
Render one frame of a behavior’s seamless loop, colored like render_koi, in the
pose motion::calculate_swim_pose gives; frame numbers wrap around the loop of
motion::frame_count(behavior) frames. Laps circle the frame center, and longer
koi swim a tighter lap so every size fits. A hovering loop is framed once, centered
on the koi’s sweep, and its drift shrinks only as far as the largest koi need to
stay inside. The view never follows the fins, so it never shakes. Under water the koi
turns toward water blue and partly drops out, more with depth. Identical inputs
produce identical pixels without I/O, clock reads, or input mutation.