Parent: #1036.
Port screen (extended.ts, workover v0.3) — a quiet zone / shield (truth mode: designed). A visible body carrying screen damps the magnitude of other bodies' forces on matter inside its range, by screenFactor(d, range, strength, min).
Cross-body by definition, so the work is in the integrator's force pass (the only place per-particle, per-body forces compose): collect the screen bodies once per frame; per particle compute each screen's factor once; multiply the factor into the effective-strength mul for every other body's applies (a screen never damps its own siblings). screen.apply is a no-op modifier.
Files: math/ (add screen_factor, already in swift Math.swift), forces/extended.rs (the no-op token), engine/integrator.rs (the cross-body attenuation, alongside the modifier pass).
Acceptance: a screen body measurably reduces a neighbouring attract's pull on matter inside its radius; a field with no screens is byte-identical (the pass is skipped); parity count → 35; gate green.
Parent: #1036.
Port
screen(extended.ts, workover v0.3) — a quiet zone / shield (truth mode: designed). A visible body carryingscreendamps the magnitude of other bodies' forces on matter inside itsrange, byscreenFactor(d, range, strength, min).Cross-body by definition, so the work is in the integrator's force pass (the only place per-particle, per-body forces compose): collect the screen bodies once per frame; per particle compute each screen's factor once; multiply the factor into the effective-strength
mulfor every other body's applies (a screen never damps its own siblings).screen.applyis a no-op modifier.Files:
math/(addscreen_factor, already in swiftMath.swift),forces/extended.rs(the no-op token),engine/integrator.rs(the cross-body attenuation, alongside the modifier pass).Acceptance: a
screenbody measurably reduces a neighbouringattract's pull on matter inside its radius; a field with no screens is byte-identical (the pass is skipped); parity count → 35; gate green.