Главная жалоба: игрок проваливался при хождении и стоянии.
Измерение сузило область: 180 кадров стояния на спавне стабильны
(z = -143.9, on_ground = true, провала нет). Значит дефект локальный.
Причина найдена архитектурно: коллизия игрока содержала ТОЛЬКО браши
карты и треугольники displacement. Пропы живут в мире Rapier, а игрок ходит
своей кодовой базой — то есть встать на ящик означало шагнуть в пустоту.
Это два непересекающихся мира коллизий.
- Collision::boxes + сетка по X/Y: габариты подвижных тел;
- set_boxes() перестраивает сетку целиком каждый кадр — тел десятки, а
пересборка убирает риск «забыть обновить» (источник тихих провалов);
- aabb_penetration() выталкивает по оси наименьшего проникновения, чтобы тело
не застревало в углу;
- клиент каждый кадр берёт габариты из живого мира, вместе с падающими
пропами.
Три теста: игрок стоит на теле, стена из тел не пропускает, и отдельный тест
фиксирует исходное поведение «без габаритов — проваливается», чтобы
регрессия была видна явно.
Тестов 69 в engine, 23 набора по воркспейсу, clippy чист.