• Nikitos's avatar
    Суставы prismatic и wheel: два вида вместо молчаливой подмены на шарнир
    · a6b7715b
    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