-
-
Notifications
You must be signed in to change notification settings - Fork 9
Architecture
yurii.levchenko edited this page Mar 17, 2026
·
1 revision
Mengine построен на сервис-ориентированной архитектуре с модульной системой плагинов. Движок разделён на несколько ключевых слоёв.
┌──────────────────────────────────────────────┐
│ Applications │ ← Точки входа для платформ
├──────────────────────────────────────────────┤
│ Frameworks │ ← Высокоуровневые фреймворки
├──────────────────────────────────────────────┤
│ Engine Components │ Plugins │ ← Игровая логика, плагины
├──────────────────────────────────────────────┤
│ Services │ ← Сервисы движка
├──────────────────────────────────────────────┤
│ Systems │ ← Платформозависимые системы
├──────────────────────────────────────────────┤
│ Kernel │ ← Базовые утилиты
├──────────────────────────────────────────────┤
│ Dependencies │ ← Сторонние библиотеки
└──────────────────────────────────────────────┘
Сервисы — основные строительные блоки движка. Каждый сервис отвечает за определённую область (рендер, звук, ввод, ресурсы и т.д.).
- Наследуют от
ServiceInterface→Factorable+Lifecycleable - Управляются через
ServiceProviderInterface - Автоматическое разрешение зависимостей через
ServiceRequiredList - Жизненный цикл:
available→initialize→run→stop→finalize
// Получение сервиса
SERVICE_GET(RenderServiceInterface);
// Проверка доступности
if (SERVICE_IS_AVAILABLE(SoundServiceInterface)) { ... }
// Ожидание инициализации сервиса
SERVICE_WAIT(ScriptServiceInterface, [](){ ... });Плагины расширяют функциональность движка. Могут загружаться статически или динамически.
- Наследуют от
PluginInterface→Factorable+ScriptEmbeddable - Три категории: Framework (встроенные), Dynamic (по требованию), System (системные)
- Объявляются макросом
PLUGIN_DECLARE(Name) - Поддерживают скриптовый биндинг через Python
Системы реализуют низкоуровневые платформозависимые абстракции: файловая система, рендеринг, звук, потоки, HTTP, криптография.
Каждая система имеет несколько реализаций для разных платформ:
| Категория | Win32 | Android | Apple | SDL2/SDL3 |
|---|---|---|---|---|
| Файловая система | Win32FileSystem | AndroidFileSystem | AppleFileSystem | SDL2/3FileSystem |
| Потоки | Win32ThreadSystem | — | — | SDL2/3ThreadSystem |
| HTTP | Win32HttpSystem | AndroidHttpSystem | AppleHttpSystem | — |
| Криптография | Win32CryptographySystem | AndroidCryptographySystem | AppleCryptographySystem | — |
Движок использует паттерн Factory для создания объектов:
-
Factorable— базовый класс для всех управляемых объектов -
Factory— создаёт экземпляры определённого типа -
PrototypeGenerator— генерирует прототипы для Entity, Node, Scene и других
-
Eventable— базовый класс для объектов, генерирующих события -
EventReceiver— обработчик событий -
Observable/Notifier— паттерн наблюдатель -
NotificationService— глобальная система уведомлений
src/
├── Applications/ ← Точки входа для каждой платформы
├── Bootstrapper/ ← Инициализация и загрузка движка
├── Config/ ← Конфигурационные заголовки
├── Engine/ ← Основные компоненты движка (Entity, Scene, Layer...)
├── Environment/ ← Платформозависимый код окружения
├── Frameworks/ ← Фреймворки (Python, GOAP, UI, ImGUI)
├── Interface/ ← Интерфейсы всех сервисов и систем (150+)
├── Kernel/ ← Базовые утилиты (300+ файлов)
├── Mengine/ ← Главный модуль плагина
├── Metacode/ ← Система кодогенерации и метатипов
├── Platforms/ ← Реализации платформ (Win32, Android, iOS, SDL, GDK)
├── Plugins/ ← Все плагины (80+)
├── Services/ ← Реализации сервисов (50+)
├── Systems/ ← Платформозависимые системы (30+)
└── Tools/ ← Инструменты разработки
- Bootstrapper — инициализация базовых сервисов, чтение конфигурации
- ServiceProvider — создание и регистрация всех сервисов с разрешением зависимостей
- PluginService — загрузка и инициализация плагинов
- Application — запуск игрового цикла
- Engine/Motor — главный цикл обновления и рендеринга
- Финализация — остановка сервисов, выгрузка плагинов, освобождение ресурсов