SashkoSoft

district-layout

Планировка городского квартала для игры — улицы, дома, дворы, проезды, деревья, мусор, кусты — данными и правилами, а не руками в редакторе. Логика советского микрорайона (подъезды во двор, магазины на улицу, садик за забором, гаражи, ЦТП), блок-аут габаритными коробками, раскладка правилами с воспроизводимым зерном, сеть пешеходных дорожек, разрушенный город (обломки у фасадов), проверка проходимости агентами. Используй, когда нужно спроектировать уровень-квартал или район, расставить по нему объекты «чтобы была логика», сделать карту уровня, или когда расстановка выглядит случайной и мёртвой.

SashkoSoft 0 Updated 3w ago

Resources

2
GitHub

Install

npx skillscat add sashkosoft/godot-skilled/district-layout

Install via the SkillsCat registry.

SKILL.md

Планировка квартала

Собрано на первом уровне веб-игры: панельный квартал 70-х, 255 × 185 м внутри
улиц, 10 зданий, 176 деревьев, 257 куч мусора, 1061 куст, 50 роботов-пешеходов.

Главное правило

Один файл данных — источник правды, всё остальное из него выводится.
Квартал — это JSON в метрах (улицы, дома с этажностью и входами, площадки,
правила раскладки). Карта уровня, блок-аут в 3D, граф пешеходов, карта травы —
всё строится одним и тем же кодом из этого файла. Как только карту рисуют
отдельно от игры, они расходятся, и игрок видит на карте дерево, которого нет.

Оси договориться сразу и записать в файл: X — восток, Z — юг, Y — вверх,
прямоугольник [x0, z0, x1, z1]. На карте север сверху — Z вниз по экрану.

Порядок работы

  1. Логика района словами — кто где живёт и почему. Шпаргалка по советскому
    микрорайону и игровым ролям мест — references/microrayon.md.
  2. Данные: улицы (ось, полуширина проезда, тротуар), дома (прямоугольник
    или части, этажи, входы со стороной и координатой вдоль стены), площадки,
    проезды и тропы ломаными с шириной, мелкие объекты.
  3. Карта (SVG из тех же данных) — показать пользователю логику до 3D.
  4. Блок-аут габаритными коробками: высота дома = этажи × 3 м + парапет.
    Масштаб и видимость проверяются на коробках, до заказа хоть одной модели.
  5. Раскладка правилами — деревья, мусор, кусты: references/placement.md.
  6. Проверка агентами — пустить пешеходов по графу и посмотреть, куда они
    не доходят: references/walk-network.md.

Правила раскладки — коротко

  • Зерно у каждого правила, раскладка детерминирована: одинакова на карте
    и в игре, между запусками и у всех, кто открыл.
  • Параметры экземпляра (порода, состояние, материал) — отдельным генератором
    от координат
    , а не из общего потока случайных чисел. Иначе добавил параметр —
    и все деревья квартала сдвинулись.
  • Запреты одни на всех: в дом, на ось проезда/тропы/тротуара (проход
    остаётся), перед дверью (круг 2.5 м — в дом можно войти), на площадки,
    на ствол, на другой объект. Никаких «исключений под это место».
  • Зазор по размеру объекта, не фиксированный: коробка кроны повёрнута,
    угол торчит на √2·r — соседи не пересекаются при dist > 1.45·(r1 + r2).
  • Скоплениями, не россыпью. Равномерная случайная россыпь читается мёртвой.
    Мусор — у фасадов (сколько: периметр × плотность × высота дома), бурьян —
    у стен, заборов, вокруг куч, подрост — у стволов.

Ловушки, на которых уже теряли время

Симптом Причина Что делать
Асфальта нет, вместо него земля плита земли выше проезжей части (−0.03 против −0.14) земля за улицами ниже асфальта, газон двора — отдельной плитой
Дальние улицы рябят полосами плиты в 1 см друг от друга на 250 м — буфер глубины различает ~7 см зазор между плоскостями ≥ 25 см, ближняя плоскость камеры 0.3 м
Пешеходы не доходят до половины двора дворовая сеть проездов распалась (универсам разрезал) в граф — тротуары улиц со стороны квартала
Трава «на асфальте» газон в тени высокой башни темнеет до цвета асфальта снять тот же ракурс без теней, прежде чем чинить
Двор бурый, «как песок» полупрозрачная плашка игровой зоны поверх травы зоны — лентой по границе, без заливки
Трава заезжает на полметра в проезд размытие карты густоты и линейная выборка маска дорожек после размытия, с запасом в ячейку

Проверка

  • Карту масок выводить картинкой (густота травы, запреты) и сравнивать со
    схемой — одна картинка отвечает на «где сдвинуто» быстрее десятка кадров.
  • Скриптом по данным: ни один объект не задевает дом, ось дорожки, дверь.
  • Агентами: путь каждого за N секунд, максимум отклонения от оси дорожки,
    доля времени по состояниям.
  • Кадром — только после чисел; см. скилы godot-selfcheck-3d
    (харнесс) и measurement-sanity (метрика проверяется возмущением).

Пропы правилами

Заборы по контуру, опоры с проводами, бордюр экземплярами, плиты дорожек с судьбой каждой плиты, камешки вблизи, оборудование площадок — от данных квартала; ловушка glTF от gltfpack (масштаб в узле) — references/props-placement.md.

Categories