Files
g-world/CLAUDE.md
T

6.0 KiB
Raw Blame History

CLAUDE.md

Инструкции для Claude Code по работе с этим репозиторием.

Проект

G-WORLD — 2D-симулятор убежища с видом сбоку (референс Fallout Shelter): порода, вырытые шахты, комнаты на сетке, жители, время/погода/климат.

Godot 4.7, GDScript, рендер Mobile, целевая платформа — Windows.

Главная сцена — src/main/main.tscn: Main (Node2D)World (Node2D) + UI (CanvasLayer). main.gd только собирает игру, игровых правил в нём нет.

Игра двумерная. Если в задаче или в коде появляется 3D-нода (Node3D, CharacterBody3D, Camera3D) — это ошибка, а не задумка: уточнить у пользователя, прежде чем продолжать.

Где что лежит

  • src/main/ — точка входа (main.tscn + main.gd).
  • src/autoload/ — синглтоны; сейчас только EventBus. Новую автозагрузку регистрировать через autoload_manage и описывать в docs/ARCHITECTURE.md.
  • src/core/ — утилиты и типы без знания о геймплее.
  • src/data/resources/ — схемы контента (наследники Resource), src/data/tables/ — сами .tres.
  • src/systems/ — симуляция (время, климат, погода, экономика).
  • src/world/ — сетка убежища, порода, комнаты, камера, фон.
  • src/entities/ — жители, предметы.
  • src/ui/screens/, components/, theme/.
  • src/debug/ — дев-консоль и оверлеи.
  • assets/ — только сырьё (арт, звук, шрифты, шейдеры), кода там нет.
  • tests/unit/ — логика без сцены, tests/integration/ — на собранных сценах.

Правила зависимостей между слоями — в docs/ARCHITECTURE.md. Перед тем как класть новый файл, свериться с таблицей слоёв; не заводить новую папку верхнего уровня, не обсудив это с пользователем.

Стиль кода

  • Файлы и папки — snake_case, ноды и class_namePascalCase.
  • Сцена и её скрипт лежат рядом и называются одинаково.
  • Типизировать всё: параметры, возвраты (-> void тоже), поля.
  • Приватное — с _. Константы — SCREAMING_SNAKE_CASE.
  • Сигналы именовать прошедшим временем факта: weather_changed, day_started.
  • @onready var вместо поиска нод по строкам в _process.
  • Комментарии — по-русски, объясняют «почему», а не пересказывают код. Комментировать только неочевидное.

Архитектурные правила, которые легко нарушить

  1. Симуляция отделена от рендера. Классы из systems/ обязаны работать без дерева сцены. Ноды в них не хранить.
  2. UI не меняет мир напрямую — шлёт намерение, изменение делает система.
  3. Контент — данными. Новая комната/предмет — это .tres, а не if в коде.
  4. EventBus — не свалка. Туда только события для нескольких несвязанных слоёв; локальную связь делать обычными сигналами.

Работа с редактором через MCP (godot-ai)

Godot-редактор, скорее всего, открыт, и он владеет project.godot, .tscn, .tres и .import.

  • Не редактировать вручную project.godot и *.tscn/*.tres: редактор перезапишет изменения. Использовать MCP-инструменты (scene_manage, node_create, node_set_property, script_attach, autoload_manage, project_manage, resource_manage) — они работают через живой редактор.
  • .gd-файлы править обычными Edit/Write — это нормально, редактор их перечитает.
  • Исключение: ключи, влияющие на старт проекта (application/run/main_scene), MCP ставить отказывается. Их правим прямо в project.godot и просим пользователя перезагрузить проект (Project → Reload Current Project) — иначе редактор перезапишет файл из своей памяти.
  • Проверять результат: project_run + logs_read (ошибки парсера и рантайма), editor_screenshot — чтобы увидеть сцену глазами.
  • addons/ — вендорный код плагина, его не трогаем.

Чего не делать

  • Не коммитить и не пушить без явной просьбы.
  • Не добавлять C#: проект на GDScript, секция [dotnet] из project.godot убрана намеренно. Не заводить .cs, не обсудив.
  • Не класть тяжёлое сырьё в assets/ — для него есть игнорируемые kits/ и ai-input/.
  • Не удалять .gitkeep из ещё пустых папок — они держат структуру в git.
  • Не менять .gitattributes/.gitignore мимоходом.