# Как вносить изменения Спасибо, что хочешь улучшить проект! Это живая база рогалика, и любая помощь пригодится. Пожалуйста, следуй правилам ниже — они сохраняют архитектуру. ## Прежде чем писать код 1. Прочитай [`CLAUDE.md`](./CLAUDE.md) — там золотые правила архитектуры. 2. Почитай [`docs/HOWTO.md`](./docs/HOWTO.md) — там рецепты для типовых задач. 3. Посмотри [`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) — пойми потоки данных. ## Процесс 1. Создай issue (баг или фича) — чтобы обсудить до начала работы. 2. Форкни репозиторий и создай ветку от `main`: ```bash git checkout -b feature/что-делаешь ``` 3. Пиши код, следуя стилю проекта: - TypeScript strict, без `any` - Комментарии по-русски, объясняют «почему», а не «что» - Маленькие чистые функции; классы — для сущностей/состояния 4. Убедись, что всё зелёное: ```bash bun run check # typecheck + tests ``` 5. Если менял логику — **добавь/обнови тест** в `tests/`. 6. Если менял геймплей/рендер — **проверь в браузере** (`bun run dev`). 7. Обнови доки, если поменялось поведение или структура. 8. Создай Pull Request с описанием изменений. ## Золотые правила (нарушать = ломать) 1. **Ядро без рендера и DOM.** В `src/core/` нельзя импортировать `three`, обращаться к `window`/`document`/`canvas`. 2. **Рендер ничего не меняет в игре.** `src/render/` только читает и рисует. 3. **Случайность только через `Rng`.** Никаких `Math.random()` в `core/`. 4. **Время — в шагах (1/60 с).** Не двигай ничего в rAF или рендере. 5. **Числа — не в коде.** Константы — в `src/config.ts`, параметры забега — в `src/core/rules.ts`. 6. **Освобождай ресурсы three.js** — `dispose()` геометрию/материалы при удалении. 7. **Перед коммитом — `bun run check`.** ## Чего не делать - Не добавлять тяжёлые зависимости (физдвижки, фреймворки). - Не переписывать архитектуру «ядро ↔ рендер». - Не коммитить `dist/` и `node_modules/`. - Не превращать игру в полноценное 3D без обсуждения.