Skip to main content

Module rigid_body

Module rigid_body 

Source
Expand description

Минимальный двухтельный решатель контактов (sequential impulse) для клиентского предсказания — порт src/lib/rigidBody.js (срез tank-battle 2026-08): предсказанный актор, динамика карты и стены живут в одной симуляции, поэтому нарисованные тела не выдавливают друг друга. Это приближение Rapier, а не его копия: остаток расхождения прячет реконсиляция игрового предиктора.

Здесь же — материальные свойства контакта (MAP_SURFACE, combine_surfaces) и масс-инерционные свойства прямоугольного тела (box_mass_properties): их обязаны видеть одинаково обе стороны, иначе реплика тихо разъедется с хостом.

Body::x/y — ЦЕНТР бокса, не «угол объекта» снапшота (см. client::collision::box_center_from_origin). Статика (стена) — inv_mass: 0.0, inv_inertia: 0.0.

Structs§

Body
Тело клиентской реплики.
MassProperties
Обратные масса и момент инерции прямоугольного тела.
Surface
Материальные свойства поверхности.

Constants§

MAP_SURFACE
Поверхность геометрии карты (стены и динамика) — те же дефолты коллайдеров, с которыми хост строит карту (map.rs).

Functions§

apply_contact_impulse
Нормальный импульс с отскоком плюс кулоновское трение по касательной. Итерируется решателем (sequential impulse) по всем контактам шага. Мутирует скорости обоих тел, позиций не трогает. Нормаль контакта направлена ОТ тела a.
box_mass_properties
Обратные масса и момент инерции прямоугольника. Нулевая плотность или габарит дают статику (нулевые обратные величины), а не деление на ноль.
combine_surfaces
Комбинирует материальные свойства двух тел в параметры контакта. Rapier сводит коэффициенты правилом среднего (CoefficientCombineRule::Average) — реплика делает так же.
integrate
Один шаг интеграции тела. Порядок обязан совпадать с шагом игрового предиктора: позиция интегрируется скоростью ДО демпфирования, хранится задемпфированная скорость. Порядок эмпирический, повторяет Rapier.
separate_bodies
Разводит тела на глубину проникновения пропорционально обратным массам. Вызывается ОДИН раз на контакт за шаг: повторное применение той же глубины на каждой итерации решателя расталкивало бы тела кратно числу итераций. Нормаль контакта направлена ОТ тела a.