6.2 KiB
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_name—PascalCase. - Сцена и её скрипт лежат рядом и называются одинаково.
- Типизировать всё: параметры, возвраты (
-> voidтоже), поля. - Приватное — с
_. Константы —SCREAMING_SNAKE_CASE. - Сигналы именовать прошедшим временем факта:
weather_changed,day_started. @onready varвместо поиска нод по строкам в_process.- Комментарии — по-русски, объясняют «почему», а не пересказывают код. Комментировать только неочевидное.
Архитектурные правила, которые легко нарушить
- Симуляция отделена от рендера. Классы из
systems/обязаны работать без дерева сцены. Ноды в них не хранить. - UI не меняет мир напрямую — шлёт намерение, изменение делает система.
- Контент — данными. Новая комната/предмет — это
.tres, а неifв коде. 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остаётся не потому, что она нужна игре, а потому что редактор — .NET-сборка: безdotnet/project/assembly_nameGodotTools пишетProperty not found, а сам ключ всё равно возвращается. Не трогать её и не заводить.cs. - Не класть тяжёлое сырьё в
assets/— для него есть игнорируемыеkits/иai-input/. - Не удалять
.gitkeepиз ещё пустых папок — они держат структуру в git. - Не менять
.gitattributes/.gitignoreмимоходом.