Основа графического движка: умеет крутить крысу
- Модель ECS
- Загрузка .obj моделей
- Сериализация
- Поддержка Lua-скриптов
- ECS: Компоненты хранятся в
std::unordered_map<Entity, ComponentType>. Entity - просто uint32_t, генерируемый последовательно. Можно итерироваться по вектору, проверяя в мапе наличие у сущности компонента определённого типа. - ResourceManager: загрузка .obj реализована однократно - ресурсы хранятся в
std::unordered_map<std::string, std::shared_ptr<Model>>. Используется std::shared_ptr, т.к. могут быть несколько компонентов или систем, держащих ссылки на один и тот же ресурс. Альтернативный вариант: unique_ptr + weak_ptr, но shared_ptr оставлен для простоты. - Сериализация: формат JSON (через nlohmann/json.hpp). Предоставляет человекочитаемый текст, поддерживает сложные структуры и легко расширяется.
- Lua: чистый Lua C API, без сторонних обёрток. ScriptingSystem создаёт один lua_State*, регистрирует функции для управления TransformComponent (get/set позицию, rotate) через глобальные функции Lua. Перед вызовом каждого скрипта выставляется глобальная переменная entity_id и dt. Lua-скрипт должен определять функцию update(), которая вызывается каждый фрейм: внутри вызывает get_position(), set_position(...), rotate(...).
- Добавить менеджер сущностей, хранящий пул сущностей и распределяющий ID, а также менеджер компонентов, отвещающий за добавление и удаление компонентов сущности и хранение их в памяти последовательно.
- Использование битовых сигнатур для хранения компонентов, привязанных к сущности. Бит с номером i отвечает за привязку компонента с id = i к сущности. С такой структурой можно легко создавать системы, предназначенные для обработки определённых наборов компонентов.
- Использование бинарного формата для сериализации мира для улучшения производительности.
- Доработка движка: подгрузка текстур, управление светом, физика, управление камерой.
Для сборки требуется установленный девкит Lua и OpenGL.
sudo apt install liblua5.3-dev
Зависисоти GLFW:
sudo apt install libwayland-dev libxkbcommon-dev xorg-dev
Конфигурация:
cmake -B build
В процессе скачиваются необходимые библтотеки, может быть долго.
Сборка: cmake --build build
Запуск: ./build/ecs_demo
Форматтер: cmake --build build -t clang-format