• Nikitos's avatar
    Наследование от родителя: visible, alpha и depthRelative
    · c5b87e1a
    Nikitos создал
    Закрывает пункт §11 «z_as_relative и наследование visible/modulate родителем».
    
    ЧТО БЫЛО НЕ ТАК: дети в `$` — отдельные узлы ПЛОСКОГО реестра, поэтому скрытый
    контейнер НЕ скрывал содержимое, а прозрачность родителя на детей не влияла:
    гасишь панель — надписи остаются. Это самая частая причина «почему надпись не
    исчезла».
    
    ЧТО СДЕЛАНО (чистые функции в render.js, экспортированы для тестов):
    * inheritedVisible(node) — скрыт ЛЮБОЙ предок → не виден никто из его детей;
    * inheritedAlpha(node) — произведение alpha по цепочке (modulate): 0.5 × 0.5
      = 0.25, ноль обнуляет всё;
    * effectiveDepth(node) — складывается с родителем, если узел помечен
      depth_relative; по умолчанию глубина АБСОЛЮТНАЯ, как была.
    
    Применение — в ОДНОЙ точке: drawWorldNode считает эффективные видимость и
    прозрачность, а на время отрисовки узла подменяет node.alpha эффективным
    значением. Так все внутренние ветки (свет, частицы, текст, контуры) видят
    правильное значение, и не пришлось править каждую из них.
    
    API: `.depthRelative(true)`, `.isDepthRelative()`, `.effectiveAlpha()`,
    `.effectivelyVisible()`, `.effectiveDepth()`, `$.gfx.effectiveAlpha/
    effectiveVisible/effectiveDepth`.
    
    ПРОВЕРКА: tests/js/light_test.mjs — 6 новых чистых тестов (50 всего): скрытый
    родитель, скрытый дед, произведение прозрачностей, цепочка относительных
    глубин, абсолютный родитель как база.
    tests/agent/highlevel_inherit_test.py — 15 проверок ПО ПИКСЕЛЯМ: ребёнок виден
    сам; hide(родителя) убирает его полностью (было: не убирал); alpha 0.5 делает
    ТУСКЛЕЕ; alpha 0 — убирает; 0.5 × 0.5 = 0.25; depthRelative даёт 15 при
    родительских 10 и своих 5, а без флага — 5.
    
    МОЯ ЖЕ ОШИБКА В ТЕСТЕ: сначала мерил «тусклее» количеством зелёных точек — их
    столько же (порог по цвету проходят и тусклые пиксели). Теперь мерю ЯРКОСТЬ:
    2668800 против 5316750. Отмечено комментарием в тесте.
    
    ДОКИ: render.md §5.2 (таблица, примеры, отладка, почему без кэша),
    HIGH_LEVEL_API.md (строки в списках), TASKS §11.
    
    Полный qjs, агентские тесты, doc_coverage, doc_claims, duplicate_keys, быстрый
    набор — зелёные.
    c5b87e1a