An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

        

# 🎮 Web-Based First Person Shooter Engine

[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/)
[![Three.js](https://img.shields.io/badge/Three.js-158-green.svg)](https://threejs.org/)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](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 сцена
- 🎥 Реализована базовая камера от первого лица

## 🖼 Скриншоты

Развернуть галерею

#### Базовая сцена
![Базовая сцена](docs/img/screenshot_1.png)

#### Панель отладки
![Панель отладки](docs/img/screenshot_2.png)

#### Визуализация Octree
![Octree помощник](docs/img/screenshot_3.png)

#### Система освещения
![Динамические тени](docs/img/screenshot_4.png)

#### Редактор карт
![Редактор карт](docs/img/screenshot_5.png)

## 📚 Документация

Подробная документация по API и примеры использования находятся в разработке. Типы и интерфейсы документированы в исходном коде.

## 🤝 Участие в разработке

Проект находится в активной разработке. Если вы хотите внести свой вклад, пожалуйста, ознакомьтесь с нашим руководством по участию в разработке.

## 📄 Лицензия

Проект распространяется под лицензией MIT. Подробности в файле [LICENSE](LICENSE).