https://github.com/ivanoskov/shooter
Web-Based First Person Shooter Engine
https://github.com/ivanoskov/shooter
3d 3d-graphics engine game gameengine shooter shooter-game web
Last synced: 3 days ago
JSON representation
Web-Based First Person Shooter Engine
- Host: GitHub
- URL: https://github.com/ivanoskov/shooter
- Owner: ivanoskov
- License: mit
- Created: 2023-09-19T19:14:26.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-11-07T10:46:26.000Z (6 months ago)
- Last Synced: 2025-03-29T10:24:12.379Z (24 days ago)
- Topics: 3d, 3d-graphics, engine, game, gameengine, shooter, shooter-game, web
- Language: TypeScript
- Homepage: https://ivanoskov.github.io/shooter/
- Size: 32.5 MB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# 🎮 Web-Based First Person Shooter Engine
[](https://www.typescriptlang.org/)
[](https://threejs.org/)
[](LICENSE)## 📝 Описание
Экспериментальный движок для создания шутеров от первого лица, работающий в браузере. Построен на базе Three.js с использованием современных веб-технологий. Движок предоставляет базовую физику, систему коллизий на основе Octree и редактор уровней через JSON-конфигурацию.
### 🔑 Ключевые особенности
- **Производительная физика** благодаря оптимизированной системе коллизий Octree
- **Динамическое освещение** с поддержкой теней
- **Редактор карт** через JSON-конфигурацию
- **Настраиваемые параметры игрока** через удобный GUI-интерфейс
- **Поддержка моделей** в формате GLTF/GLB
- **Строгая типизация** благодаря TypeScript## 🛠 Технологический стек
- TypeScript
- Three.js
- Vite
- WebGL## 📁 Структура проекта
```
├── docs/
│ └── img/ # Скриншоты и изображения для документации
├── public/
│ └── models/ # 3D модели в формате GLTF/GLB
├── src/
│ ├── config/ # Конфигурационные файлы
│ │ ├── map.ts # Конфигурация игровых карт
│ │ └── settings.ts # Основные настройки игры
│ ├── core/ # Ядро движка
│ │ ├── browser/ # Логика браузера
│ │ │ └── BrowserController.ts # Управление поведением браузера
│ │ ├── events/ # Система событий
│ │ │ └── EventEmitter.ts # Базовый класс для работы с событиями
│ │ ├── input/ # Система ввода
│ │ │ └── InputSystem.ts # Логика обработки ввода
│ │ ├── Game.ts # Основной класс игры
│ │ ├── Player.ts # Логика игрока
│ │ └── Camera.ts # Логика камеры и отображения
│ ├── types/ # TypeScript интерфейсы и типы
│ │ ├── stats.d.ts # Определение типа для Stats
│ │ └── index.ts # Основные типы
│ ├── types/ # TypeScript интерфейсы и типы
│ │ ├── graphics.ts # Настройки графики
│ │ └── index.ts # Основные типы
│ └── main.ts # Точка входа приложения
├── index.html # HTML шаблон
├── tsconfig.json # Конфигурация TypeScript
├── package.json # Зависимости и скрипты
├── vite.config.ts # Конфигурация Vite
├── LICENSE # Лицензия MIT
└── README.md # Документация проекта
```### 📂 Описание ключевых директорий
- **src/core/**: Содержит основную логику движка
- **src/config/**: Конфигурационные файлы для настройки игры и карт
- **src/types/**: TypeScript интерфейсы и типы
- **public/models/**: 3D модели и ресурсы
- **docs/**: Документация и медиа файлы## 📋 Журнал изменений
### v0.11.0 (Текущая версия)
- 🗺️ Добавлена система карт:
- 🏗️ Реализовано переключение между картами через меню
- 🎯 Представлена базовая тестовая карта для отладки физики и коллизий
- 🦍 Добавлена масштабная карта "Горилла" с продвинутой геометрией
- 🔄 Автоматическая перезагрузка физики при смене карты
- 📍 Корректное позиционирование игрока при смене локации
- 🎮 Улучшена система физики и коллизий:
- 🌲 Добавлено отдельное октодерево для динамических объектов
- 🎯 Реализована визуализация обоих октодеревьев с цветовой дифференциацией
- ⚙️ Добавлена возможность включения/отключения динамических объектов
- 🔄 Настраиваемое количество итераций обработки коллизий
- 🎨 Расширен пользовательский интерфейс настроек:
- 📷 Добавлены расширенные настройки камеры (FOV, near/far planes)
- 🌓 Улучшены настройки теней и дистанции отрисовки
- 🎨 Внедрены настройки постобработки (тональная компрессия, сглаживание)
- ⚖️ Добавлены физические параметры (гравитация, шаги физики)
- 🔧 Реализованы отладочные инструменты (статистика, каркасный режим)
- 🌍 Улучшена локализация:
- 🇷🇺 Все параметры имеют русские названия
- 📊 Настроены логичные диапазоны значений
- 📁 Меню организовано в логические группы### v0.10.0
- 🎨 Улучшена система рендеринга:
- ✨ Добавлено физически корректное освещение
- 🌗 Улучшены тени с настраиваемым качеством
- 🎨 Внедрена корректная цветопередача через sRGB
- 🎬 Добавлено тональное отображение ACES Filmic
- 📷 Реализована настраиваемая экспозиция
- ⚡ Оптимизации производительности:
- 🎮 Добавлены пресеты качества графики
- 🔧 Умное управление картами теней
- 📊 Оптимизация количества источников света
- 🖼️ Контроль анизотропной фильтрации
- 🛡️ Улучшена обработка пользовательского ввода:
- 🔒 Централизованное управление поведением браузера
- ⌨️ Оптимизированная обработка комбинаций клавиш
- 🧹 Корректная очистка ресурсов### v0.9.0
- ⚡ Значительные оптимизации производительности:
- 🔄 Внедрен пул векторов для уменьшения создания объектов
- 👁️ Улучшен алгоритм Frustum Culling
- 🎨 Оптимизированы материалы и геометрии
- 💾 Добавлено кэширование объектов THREE.js
- 🧮 Оптимизированы физические вычисления
- 🗑️ Внедрена система очистки ресурсов
- 🎯 Улучшен алгоритм проверки видимости объектов:
- ✅ Добавлена проверка существования геометрии
- 🔄 Используется клонированная boundingSphere
- 🎭 Добавлен запас к радиусу сферы для плавности
- 📊 Улучшена работа с матрицами:
- 🔄 Оптимизировано обновление матриц камеры
- 👁️ Добавлено умное обновление матриц видимых объектов
- 📝 Усилена типизация компонентов### v0.8.0
- 🎮 Добавлена система событий (EventEmitter) для улучшения архитектуры
- ⌨️ Реализована абстракция системы ввода (InputSystem)
- 🔄 Улучшена обработка пользовательского ввода
- 🔒 Улучшена работа с Pointer Lock API
- 📦 Уменьшена связанность компонентов### v0.7.0
- 🎥 Выделен отдельный класс `PlayerCamera` для улучшения организации кода
- ⚡ Добавлена оптимизация рендеринга через Frustum Culling
- 🔧 Улучшено управление памятью через переиспользование векторов и матриц
- 🛡️ Усилена инкапсуляция компонентов камеры
- 📦 Реорганизована структура классов согласно SOLID принципам### v0.6.0
- 🔄 Полная миграция кодовой базы на TypeScript
- ✨ Добавлены строгие типы для всех компонентов
- 📦 Реорганизована структура проекта
- 🔧 Внедрены интерфейсы для конфигураций
- 🛠 Улучшена система сборки с использованием Vite
- 📚 Добавлена базовая документация типов### v0.5.0
- ✨ Реализована базовая система редактирования карт через JSON-конфигурацию
```typescript
interface MapConfig {
STATIC_OBJECTS: {
LOAD_OBJECTS: Array<{position: Vector3, file: string}>;
THREE_OBJECTS: Array<{
type: string,
position: Vector3,
geometry: Vector3,
color: string
}>;
}
}
```
### v0.4.0
- ✨ Разработан класс `Player` с полной игровой логикой
- 🔧 Реализована система движения и прыжков
- 🎮 Добавлено управление с клавиатуры и мыши
- 📊 Внедрена система обработки коллизий### v0.3.0
- 🌞 Добавлена система динамического освещения
- 🎨 Реализованы динамические тени
- ✨ Внедрен направленный свет для имитации солнечного освещения### v0.2.0
- 🔧 Добавлена панель отладки
- 📊 Реализована визуализация Octree
- ⚙️ Добавлены настройки производительности### v0.1.0
- 🎮 Создан базовый игровой движок
- 📦 Настроена базовая Three.js сцена
- 🎥 Реализована базовая камера от первого лица## 🖼 Скриншоты
Развернуть галерею
#### Базовая сцена
#### Панель отладки
#### Визуализация Octree
#### Система освещения
#### Редактор карт
## 📚 Документация
Подробная документация по API и примеры использования находятся в разработке. Типы и интерфейсы документированы в исходном коде.
## 🤝 Участие в разработке
Проект находится в активной разработке. Если вы хотите внести свой вклад, пожалуйста, ознакомьтесь с нашим руководством по участию в разработке.
## 📄 Лицензия
Проект распространяется под лицензией MIT. Подробности в файле [LICENSE](LICENSE).