Two fixed reef outcrops act as cleaning stations. Client fish arrive at each station as a Poisson-like process whose rate scales with the client arrival rate slider, and queue until a wrasse services them.
Each free wrasse picks the nearest station holding a waiting client and steers toward it with a blended heading:
heading = memory·(target − pos) + (1 − memory)·wander
High station memory means the wrasse swims a near-straight line to a known station; low memory means it wanders, covering more distance per contact. Servicing a client takes a fixed duration (shorter at higher swim speed) and then removes the client, increments the contacts counter and restores some of the wrasse's energy. Energy otherwise drains in proportion to distance swum, so idle wandering at low memory is measurably costlier than direct station visits — the same trade-off the 3D original's forage-mode metrics (contacts / energy / distance) track, expressed here as an explicit queueing-and-steering model instead of a decorative mesh.
- Contacts — cumulative completed cleanings.
- Avg. energy — mean stored energy across all wrasse (0–100%).
- Avg. client wait — rolling average of how long serviced clients queued.