Skip to content

SquareSweet/ecs-engine-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESC-based Engine Demo

Основа графического движка: умеет крутить крысу

  1. Модель ECS
  2. Загрузка .obj моделей
  3. Сериализация
  4. Поддержка Lua-скриптов

Архитектура

  1. ECS: Компоненты хранятся в std::unordered_map<Entity, ComponentType>. Entity - просто uint32_t, генерируемый последовательно. Можно итерироваться по вектору, проверяя в мапе наличие у сущности компонента определённого типа.
  2. ResourceManager: загрузка .obj реализована однократно - ресурсы хранятся в std::unordered_map<std::string, std::shared_ptr<Model>>. Используется std::shared_ptr, т.к. могут быть несколько компонентов или систем, держащих ссылки на один и тот же ресурс. Альтернативный вариант: unique_ptr + weak_ptr, но shared_ptr оставлен для простоты.
  3. Сериализация: формат JSON (через nlohmann/json.hpp). Предоставляет человекочитаемый текст, поддерживает сложные структуры и легко расширяется.
  4. Lua: чистый Lua C API, без сторонних обёрток. ScriptingSystem создаёт один lua_State*, регистрирует функции для управления TransformComponent (get/set позицию, rotate) через глобальные функции Lua. Перед вызовом каждого скрипта выставляется глобальная переменная entity_id и dt. Lua-скрипт должен определять функцию update(), которая вызывается каждый фрейм: внутри вызывает get_position(), set_position(...), rotate(...).

Потенциальные улучшения / последующие шаги разработки

  1. Добавить менеджер сущностей, хранящий пул сущностей и распределяющий ID, а также менеджер компонентов, отвещающий за добавление и удаление компонентов сущности и хранение их в памяти последовательно.
  2. Использование битовых сигнатур для хранения компонентов, привязанных к сущности. Бит с номером i отвечает за привязку компонента с id = i к сущности. С такой структурой можно легко создавать системы, предназначенные для обработки определённых наборов компонентов.
  3. Использование бинарного формата для сериализации мира для улучшения производительности.
  4. Доработка движка: подгрузка текстур, управление светом, физика, управление камерой.

Сборка

Для сборки требуется установленный девкит 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors