Skip to content
yurii.levchenko edited this page Mar 17, 2026 · 1 revision

Архитектура

Mengine построен на сервис-ориентированной архитектуре с модульной системой плагинов. Движок разделён на несколько ключевых слоёв.


Слои архитектуры

┌──────────────────────────────────────────────┐
│              Applications                     │  ← Точки входа для платформ
├──────────────────────────────────────────────┤
│              Frameworks                       │  ← Высокоуровневые фреймворки
├──────────────────────────────────────────────┤
│    Engine Components  │    Plugins            │  ← Игровая логика, плагины
├──────────────────────────────────────────────┤
│              Services                         │  ← Сервисы движка
├──────────────────────────────────────────────┤
│              Systems                          │  ← Платформозависимые системы
├──────────────────────────────────────────────┤
│              Kernel                           │  ← Базовые утилиты
├──────────────────────────────────────────────┤
│           Dependencies                        │  ← Сторонние библиотеки
└──────────────────────────────────────────────┘

Ключевые концепции

Сервисы (Services)

Сервисы — основные строительные блоки движка. Каждый сервис отвечает за определённую область (рендер, звук, ввод, ресурсы и т.д.).

  • Наследуют от ServiceInterfaceFactorable + Lifecycleable
  • Управляются через ServiceProviderInterface
  • Автоматическое разрешение зависимостей через ServiceRequiredList
  • Жизненный цикл: availableinitializerunstopfinalize
// Получение сервиса
SERVICE_GET(RenderServiceInterface);

// Проверка доступности
if (SERVICE_IS_AVAILABLE(SoundServiceInterface)) { ... }

// Ожидание инициализации сервиса
SERVICE_WAIT(ScriptServiceInterface, [](){ ... });

Плагины (Plugins)

Плагины расширяют функциональность движка. Могут загружаться статически или динамически.

  • Наследуют от PluginInterfaceFactorable + ScriptEmbeddable
  • Три категории: Framework (встроенные), Dynamic (по требованию), System (системные)
  • Объявляются макросом PLUGIN_DECLARE(Name)
  • Поддерживают скриптовый биндинг через Python

Системы (Systems)

Системы реализуют низкоуровневые платформозависимые абстракции: файловая система, рендеринг, звук, потоки, 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/            ← Инструменты разработки

Жизненный цикл приложения

  1. Bootstrapper — инициализация базовых сервисов, чтение конфигурации
  2. ServiceProvider — создание и регистрация всех сервисов с разрешением зависимостей
  3. PluginService — загрузка и инициализация плагинов
  4. Application — запуск игрового цикла
  5. Engine/Motor — главный цикл обновления и рендеринга
  6. Финализация — остановка сервисов, выгрузка плагинов, освобождение ресурсов

См. также

  • Services — подробное описание всех сервисов
  • Systems — системные реализации
  • Plugins — каталог плагинов
  • Kernel — базовая библиотека

Clone this wiki locally