• Nikitos's avatar
    Суставы mouse и filter; pulley/gear невозможны — их нет в Box2D v3
    · 9c95fb9a
    Nikitos создал
    Продолжение разбора суставов. Обещание «восемь видов» оказалось устаревшим ещё
    сильнее, чем казалось: в b2JointType Box2D v3 остались только distance, filter,
    motor, mouse, prismatic, revolute, weld, wheel. Блока (pulley) и зубчатой
    передачи (gear) в движке НЕТ — это суставы Box2D v2. Обещать их нельзя ни в
    каком виде, поэтому в документации это сказано прямо.
    
    * physics: R2D_JOINT_MOUSE и R2D_JOINT_FILTER, r2d_physics_set/get_joint_target;
    * script.c: разбор 'mouse'/'filter', engine.setJointTarget(id, x, y) и
      engine.jointTarget(id);
    * $.world.jointTarget(id, x, y) — цель mouse-сустава;
    * сила mouse-сустава по умолчанию берётся из МАССЫ тела: значение Box2D по
      умолчанию (1 Н) не подняло бы и килограмма, и перетаскивание не работало бы
      даже теоретически;
    * НАЙДЕН ДЕФЕКТ: Box2D v3 не будит тела созданием сустава. Только что
      созданный сустав не действовал на уснувшее тело — теперь оба тела будятся
      при создании сустава (касается всех видов).
    
    ЧЕСТНО ПРО НЕПРОВЕРЕННОЕ: тяга mouse-сустава не работает — тело к цели не
    поехало ни в тесте, ни в отдельной пробе. Проверено, что параметры верные:
    тело A статическое, B динамическое, масса 0.56 кг, сила 500000 Н, цель задана.
    Причину найти не удалось, поэтому в тесте проверяется только создание и
    перестановка цели, а в world.md/API.md прямо написано «не полагайтесь» с
    альтернативой (castShape/bodyAt + applyImpulse).
    
    Проверка: tests/agent/highlevel_joints_test.py (13 проверок), полный набор qjs,
    агентских тестов, doc_coverage и doc_claims зелёный.
    9c95fb9a