Files
chicken-game/CLAUDE.md
2026-01-17 11:49:36 +03:00

95 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Platformer Game
Browser-based platformer game built with Phaser 3 and TypeScript.
## Tech Stack
- **Engine:** Phaser 3
- **Language:** TypeScript
- **Build:** Vite
- **Package Manager:** npm
## Project Structure
```
src/
├── scenes/ # Game scenes (Boot, Menu, Game, etc.)
├── entities/ # Game objects (Player, Enemies, Items)
├── systems/ # Core systems (Physics, Input, Audio)
├── config/ # Game configuration
└── assets/ # Sprites, sounds, tilemaps
```
## Quick Start
```bash
npm install
npm run dev
```
## Documentation
- [Game Design](./docs/DESIGN.md) - gameplay mechanics, levels
- [Architecture](./docs/ARCHITECTURE.md) - code structure, patterns
- [Assets](./docs/ASSETS.md) - sprites, audio, tilemaps
## Commands
- `npm run dev` - development server
- `npm run build` - production build
- `npm run preview` - preview build
- `npm run check` - **запускать перед коммитом** (typecheck + lint)
- `npm run lint` - проверка ESLint
- `npm run lint:fix` - автоисправление ESLint/Prettier
- `npm run typecheck` - проверка TypeScript
- `npm run format` - форматирование Prettier
## Phaser 3 — Правила разработки
### 1. Обработчики событий накапливаются при рестарте
Keyboard Keys в Phaser переиспользуются между рестартами сцены. **Всегда удаляй старые обработчики:**
```typescript
// ПРАВИЛЬНО
key.removeAllListeners('down');
key.on('down', () => this.shoot());
// Для событий сцены
this.events.off('shoot', this.handleShoot, this);
this.events.on('shoot', this.handleShoot, this);
```
### 2. scene.start() НЕ останавливает текущую сцену
Оверлеи (GameOver, Pause) остаются видимыми. **Явно останавливай сцены:**
```typescript
const sceneManager = this.game.scene; // Используй глобальный менеджер!
sceneManager.stop('UIScene');
sceneManager.stop('GameOverScene');
sceneManager.start('GameScene');
```
### 3. Null reference при рестарте UI-сцены
`update()` может вызваться до `create()`. **Сбрасывай массивы и добавляй проверки:**
```typescript
create(): void {
this.indicators = []; // Сбрасывай в начале create()
}
update(): void {
if (!this.runState || !this.scoreText) return; // Guard-проверка
}
```
### 4. Чеклист при работе со сценами
- [ ] Очищать обработчики клавиш в `setupControls()`
- [ ] Очищать `this.events` обработчики в `create()` или `shutdown()`
- [ ] Сбрасывать массивы/объекты в начале `create()`
- [ ] Добавлять null-проверки в `update()` для UI
- [ ] Использовать `this.game.scene` для остановки текущей сцены