Which bodies actually render/are selectable at the current zoom — pure so
both the render loop (OrbitalSystemScene.tsx's SceneContent) and the
bubble-cursor proximity hit-test (proximitySelection.ts) work from
exactly the same notion of "visible": a body that isn't drawn must never
be a selectable proximity target either, or the cursor could "snap" to
something invisible with no way to tell what just got selected.
This is the count-and-rank half of the visibility system; screen-space
proximity thinning (two of these still overlapping on screen right now)
is a separate, per-frame pass — see thinByScreenProximity in
labelDeclutter.ts, applied by OrbitalSystemScene's ProximitySelector on
top of whatever this function returns.
Which bodies actually render/are selectable at the current zoom — pure so both the render loop (OrbitalSystemScene.tsx's SceneContent) and the bubble-cursor proximity hit-test (proximitySelection.ts) work from exactly the same notion of "visible": a body that isn't drawn must never be a selectable proximity target either, or the cursor could "snap" to something invisible with no way to tell what just got selected.
This is the count-and-rank half of the visibility system; screen-space proximity thinning (two of these still overlapping on screen right now) is a separate, per-frame pass — see thinByScreenProximity in labelDeclutter.ts, applied by OrbitalSystemScene's ProximitySelector on top of whatever this function returns.