WebGL2 ray marching FPS game в стиле Dungeon Synth.
- Ray Marching — рендеринг через SDF (Signed Distance Fields)
- Quake-style движение — инерция, air control, прыжки
- Процедурный звук — вся музыка и эффекты генерируются через Web Audio API
- Стилистика Dungeon Synth — готический средневековый эстетик
- Node.js 18+
- npm или pnpm
# Клонировать репозиторий (если нужно)
cd 02-raytracer-ts
# Установить зависимости
npm install
# Запустить dev-сервер
npm run devОткроется браузер на http://localhost:3000
# Собрать проект
npm run build
# Превью сборки
npm run previewСобранные файлы будут в папке dist/
| Клавиша | Действие |
|---|---|
WASD |
Движение |
SHIFT |
Бег |
SPACE |
Прыжок |
LMB |
Стрельба |
R |
Перезарядка |
F |
Полноэкранный режим |
M |
Вкл/выкл звук |
src/
├── core/ # Ядро игры
│ ├── Game.ts # Главный класс
│ ├── GameLoop.ts # Игровой цикл
│ └── Input.ts # Обработка ввода
├── player/ # Игрок
│ └── Player.ts # Движение, камера
├── weapon/ # Оружие
│ ├── Weapon.ts # Логика стрельбы
│ └── WeaponRenderer.ts # Отрисовка
├── enemies/ # Враги
│ └── Target.ts # Мишени с огнём
├── audio/ # Аудио
│ └── AudioManager.ts # Процедурный звук
├── render/ # Рендеринг
│ ├── WebGLRenderer.ts # WebGL2
│ ├── Shaders.ts # GLSL шейдеры
│ └── HUD.ts # Интерфейс
├── world/ # Мир
│ └── Collision.ts # Коллизии
├── types/ # TypeScript типы
│ └── index.ts
├── utils/ # Утилиты
│ └── math.ts # Векторная математика
├── main.ts # Точка входа
└── styles.css # Стили
| Команда | Описание |
|---|---|
npm run dev |
Запуск dev-сервера с HMR |
npm run build |
Сборка для продакшена |
npm run preview |
Превью собранной версии |
npm run lint |
Проверка кода ESLint |
- TypeScript — типизированный JavaScript
- Vite — быстрая сборка и HMR
- WebGL2 — аппаратный рендеринг
- Web Audio API — процедурный звук
- Создайте конфиг в
src/weapon/Weapon.ts - Добавьте рендер в
WeaponRenderer.ts - Добавьте звук в
AudioManager.ts
Редактируйте SDF в src/render/Shaders.ts функция mapArena()
Параметры в src/player/Player.ts — DEFAULT_CONFIG
MIT