Expand description
2D-примитивы столкновений для клиентского предсказания — порт
src/lib/collision.js (срез tank-battle 2026-08): «угол объекта» → центр,
OBB против OBB (SAT), сбор контактов OBB с тайловой сеткой стен.
Геометрия берётся тем же Box2 и той же тайловой сеткой, что и
client::raycast, — предсказание движения и предсказание выстрела обязаны
видеть карту одинаково. Разрешение собранных контактов — в
client::rigid_body.
Structs§
- Contact
- Контакт двух OBB: минимальный вектор выталкивания (нормаль направлена от
центра
aк центруb), глубина проникновения и мировая точка контакта. - Tile
Contact - Контакт со сплошной клеткой сетки: нормаль направлена от OBB к клетке,
tile_x/tile_y— центр задетой клетки (плечо статики).
Functions§
- box_
center_ from_ origin - Переводит «угол объекта» (позиция тела Rapier для динамики карты —
см.
map::GameMap::create_dynamic) в центр бокса: коллайдер хоста смещён от тела на (half_w, half_h) в локальном (повёрнутом) фрейме объекта. - collect_
tile_ contacts - Список контактов OBB со сплошными клетками тайловой сетки.
Один проход без внутренних итераций: многократное разрешение — задача
импульсного решателя (
client::rigid_body), он же естественно отрабатывает внутренний угол из нескольких тайлов. Сетка описывается той же тройкой, что и вraycast::ray_vs_grid. - obb_
vs_ obb - SAT-тест двух повёрнутых прямоугольников (OBB).
None— пересечения нет (касание вплотную тоже промах).