Skip to main content

Module collision

Module collision 

Source
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), глубина проникновения и мировая точка контакта.
TileContact
Контакт со сплошной клеткой сетки: нормаль направлена от 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 — пересечения нет (касание вплотную тоже промах).