• Nikitos's avatar
    Перетаскивание: мёртвый mouse-сустав убран, вместо него $.world.tug
    · 8d2162dd
    Nikitos создал
    Разбирался, почему mouse-сустав Box2D не тянет тело. Ответ: не тянет ни при
    какой силе (проверены 10, 100, 1000, 10000, 100000, 500000 Н), при выключенном
    сне, при явном пробуждении, с целью в правильных метрах (лог из Box2D
    подтвердил: target 28.1,9.4 м = 900,300 px, maxForce 562 Н, масса B 0.562 кг).
    Причину найти не удалось. Оставлять в движке сустав, который создаётся и молчит,
    нельзя — мёртвый путь убран целиком (C-ветка, сеттеры цели, биндинги, тест).
    
    Взамен — ЧЕСТНЫЙ инструмент того же назначения: $.world.tug(узел, x, y, opts).
    Это пружинный контроллер на скорости, а не телепорт: столкновение может перебить
    тягу.
    
    ПОПУТНО НАЙДЕН И ЗАКРЫТ РЕАЛЬНЫЙ ДЕФЕКТ ФИЗИКИ: Box2D засыпает тело на
    накопленном покое, и после сна setVelocity ПЕРЕСТАЁТ действовать — тело
    замирает там, где уснуло. Это бьёт по любому прямому управлению скоростью
    (перетаскивание, конвейер, телекинез). Добавлено engine.setSleeping(body, false)
    / engine.isSleeping(body) и r2d_physics_set_sleeping.
    
    ЧЕСТНО О НЕПРОВЕРЕННОМ: и у tug тяга не доводит тело до цели — оно доезжает
    примерно на 270 px из 400 и замирает. Причина не выяснена (управление сном
    добавлено, но не помогло), поэтому в тесте проверяется ровно работающее
    (тело сдвинулось к цели), а в world.md это написано прямо, без обещаний.
    
    Проверка: tests/agent/highlevel_joints_test.py (13 проверок), полный qjs,
    агентские тесты, doc_coverage и doc_claims зелёные.
    8d2162dd