fix(physics): resolve the earliest substep contact

Return exact path progress with each fixed-point line and circle candidate.
Evaluate the complete recovered physical object set and apply the nearest
contact, matching the selection logic in the original collision dispatcher
instead of stopping at the lowest matching object id.

This prevents dense assemblies from choosing a later wall or circle merely
because its record appears earlier in the table.

Test Plan:
- `cargo test --all-targets` -- 45 passed
- `cargo clippy --all-targets -- -D warnings` -- passed
- `cargo build --profile production` -- passed
- collision-progress ordering test -- passed
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-22 21:15:45 +02:00
parent bf5b855f44
commit 20e751de80
4 changed files with 174 additions and 89 deletions
+5
View File
@@ -150,3 +150,8 @@ the associated magnetic gate; there is no recovered 1,500-per-target plus
5,000 completion rule. Records 140-147 carry their exact 1,000 through 3,000
scores and use the same enter-once contact bit, which clears after the ball
leaves their radius.
The collision scan at `1000:c79c` does not resolve the first matching object id.
It retains the smallest path-progress value while traversing all 175 records,
then applies that response from the previous position. The Rust fixed-point
solver now follows that ordering for recovered type-1 and type-2 objects.