• Nikitos's avatar
    task-68: контракт API мира — remove/clear/destroy, collision.of(selector)
    · 6643c289
    Nikitos создал
    Сначала контракт, потом код (docs/highlevel/world.md §1.2 переписан с «чего
    нет» на факт):
    
    - `$.world.remove(target)` — цель обязательна (R2D_WORLD_REMOVE_NO_TARGET),
      промах R2D_WORLD_REMOVE_MISS; возвращает число узлов вместе с детьми.
      Замер: remove('#hero') → 1, all 15→14, тел 12→11; remove($('.goblin')) → 3.
    - `$.world.clear({ui})` — игровые узлы; persistent/HUD/стены bounds() живы:
      15 узлов → 7, тел 12 → 6; {ui:true} снимает и UI; повторный clear() → 0.
    - `$.world.destroy()` — полный перезапуск: всё + границы/фон/гравитация
      0/2000/timeScale 1/pause off → {nodes:6, bodies:0, ui:0, persistent:2}.
    - `$.collision.of('#hero')` → 'player' (было null): селектор разворачивается.
    - `$.grid.get` не заводим: канонический геттер `$.grid.at(g,cx,cy,fallback)`,
      count(g,value) уже был; тест фиксирует решение (14 проверок).
    
    D8-I1 (часть): `.parallax(null)` снова держится — было фактор 0.5 и звезда
    60→160, стало null и 60→60 (10 проверок). Полный перенос смещения в
    render.js остаётся долгом.
    
    Красные до правки: world_api 45, collision_of 5, layers_parallax 2.
    6643c289