feat(render): псевдо-3D, всегда видимые двери, ассеты+эффекты, русификация
- Рендер переведён в псевдо-3D: наклонная PerspectiveCamera, пол лежит плашмя, персонажи/враги — вертикальные спрайты-биллборды, стены с высотой. Починен баг: пол создавался без поворота и стоял вертикально → «вывернутая» перспектива. - Двери видны всегда: закрыты (засов) во время боя, открытый проём после зачистки. - render/assets.ts: процедурные текстуры (спрайты персонажей/врагов, пол, стены, двери, снаряд, тень) + эффекты оружия (вспышка из дула, искры, облачко гибели). - Светлее палитра — исправлено «тёмное на тёмном». - Игра переименована в «Биндим Фигняшку»; полная русификация UI (ДАЛЬНИЙ/БЛИЖНИЙ, ИГРА ОКОНЧЕНА, ПОБЕДА); клавиши-подсказки оставлены латиницей. - Ввод по event.code → WASD/Q/R работают в любой раскладке (вкл. русскую). - theme.ts урезан до реально используемых тинтов (bg/swing/flash). - docs/ASSET_BRIEF.md — бриф и промпт на полную художку; доки синхронизированы. - Ядро (src/core) не тронуто — раунд чисто render/UI. 27 тестов + типы зелёные. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
# Dungeon Crawl — рогалик в духе The Binding of Isaac
|
||||
# Биндим Фигняшку — рогалик в духе The Binding of Isaac
|
||||
|
||||
Top-down рогалик: процедурный данжен из комнат, два режима боя (дальний/ближний),
|
||||
враги, босс. Логика на чистом TypeScript, рендер — на **three.js** (ортографическая
|
||||
камера, картинка плоская 2D-сверху). Сборка — **Bun**.
|
||||
враги, босс. Логика на чистом TypeScript, рендер — на **three.js** в **псевдо-3D**:
|
||||
наклонная камера, пол лежит плашмя, персонажи — вертикальные спрайты-биллборды
|
||||
(как в Isaac). Сборка — **Bun**.
|
||||
|
||||
Есть **стартовое меню** с выбором уровня: данжен генерируется процедурно каждый
|
||||
забег, но параметризуется набором правил (размер, плотность/сила врагов, HP, seed).
|
||||
Внешний вид мира вынесен в «тему» — задел под кастомные ассеты (спрайты/текстуры).
|
||||
Двери видны всегда (закрыты в бою, открыты после зачистки). Графика — процедурные
|
||||
ассеты в `render/assets.ts`; бриф на полную художку — в `docs/ASSET_BRIEF.md`.
|
||||
|
||||
> Это рабочая **база для развития**, а не готовая игра. Архитектура специально
|
||||
> сделана так, чтобы её было легко расширять — и человеку, и ИИ-агентам.
|
||||
@@ -44,6 +46,9 @@ bun run check # и то, и другое разом
|
||||
| R | заново (на экране Game Over / Victory) |
|
||||
| Esc | вернуться в меню выбора уровня |
|
||||
|
||||
Клавиши привязаны к **физическим** кнопкам (`event.code`), поэтому WASD/Q/R работают
|
||||
в любой раскладке (в т.ч. русской), независимо от языка ввода.
|
||||
|
||||
Чтобы перейти в соседнюю комнату — зачисти текущую (двери откроются) и встань на
|
||||
дверь, нажимая в её сторону.
|
||||
|
||||
@@ -66,7 +71,7 @@ bun run check # и то, и другое разом
|
||||
## Стек и устройство
|
||||
|
||||
- **Bun** — рантайм, бандлер и тест-раннер.
|
||||
- **three.js** — WebGL-рендер мира через ортокамеру.
|
||||
- **three.js** — WebGL-рендер мира в псевдо-3D (наклонная `PerspectiveCamera`, биллборд-спрайты).
|
||||
- **TypeScript (strict)** — весь код.
|
||||
- Архитектура: **логика игры полностью отделена от рендера**. Ядро (`src/core/`)
|
||||
не знает ни про DOM, ни про three.js, поэтому его легко тестировать и при
|
||||
@@ -94,8 +99,9 @@ src/
|
||||
│ └── KeyboardController.ts клавиатура → InputState
|
||||
├── render/ ── РЕНДЕР (читает состояние, рисует) ──
|
||||
│ ├── Renderer.ts интерфейс рендера
|
||||
│ ├── ThreeRenderer.ts мир на three.js (ортокамера)
|
||||
│ ├── theme.ts ⭐ ВНЕШНИЙ ВИД (цвета; задел под спрайты/текстуры)
|
||||
│ ├── ThreeRenderer.ts мир на three.js (псевдо-3D: наклон + биллборды)
|
||||
│ ├── assets.ts ⭐ АССЕТЫ (процедурные спрайты/текстуры → текстуры three.js)
|
||||
│ ├── theme.ts цвета/тинты мира (фон, эффекты)
|
||||
│ └── HudOverlay.ts HUD и миникарта на 2D-канвасе поверх
|
||||
├── ui/
|
||||
│ └── StartMenu.ts стартовое меню (DOM) с выбором уровня
|
||||
|
||||
Reference in New Issue
Block a user