-
Nikitos создал
В docs/highlevel/world.md было написано, что поддержаны восемь видов суставов (revolute, distance, weld, prismatic, wheel, pulley, gear, mouse), а в коде было ТРИ. Хуже того, запрос 'prismatic' или 'wheel' не отказывал: движок молча брал revolute, и игра получала шарнир там, где просила направляющую. Это дефект не документации, а поведения — «неизвестное» не должно выполняться как «другое». * physics: R2D_JOINT_PRISMATIC и R2D_JOINT_WHEEL, ось сустава в мировых координатах (r2d_physics_set_joint_axis, по умолчанию (1,0), нулевая ось заменяется на X — Box2D требует единичный вектор); * script.c: разбор 'prismatic'/'wheel'/'revolute', ось из opts.axis; НЕИЗВЕСТНЫЙ тип теперь пишет предупреждение в журнал, а не подменяется молча; * $.world.joint(a, b, { type, axis, a: [...], b: [...], limit, motor }) — пределы для prismatic в метрах (переводит низкий уровень), мотор как сила. ЧЕСТНО ПРО ДОКУМЕНТАЦИЮ: обещание восьми видов было ложным. Приведено к факту — теперь в world.md, API.md и TASKS.md перечислены пять сделанных видов и прямо сказано, что pulley, gear и mouse не сделаны. Проверка (tests/agent/highlevel_joints_test.py, 12 проверок): все пять видов создаются и получают разные id, счётчик и уничтожение работают, а поведенчески проверено главное отличие направляющей — тело, которому задали скорость вбок, по оси Y смещается на 0.0 px (ось держит). Полный набор qjs, агентских тестов, doc_coverage и doc_claims зелёный.a6b7715b