EnTTбыл мечтой до сих пор, на сегодняшний день мы не нашли ни одной ошибки, и с ней очень легко работать с- каждый пользователь Entt когда-либо
EnTT -это только заголовок, крошечная и простая в использовании библиотеку для игрового программирования и многое другое написано в современном C ++ .
Среди прочего, он используется в Minecraft Mojang, Arcgis Runtime Sdks от Esri и Amazing Ragdoll .
Если вы не видите свой проект в списке, откройте проблему, отправьте PR или добавьте тег #Entt в свои темы ! ?
Вы хотите идти в ногу с изменениями или у вас есть вопрос , который не требует, чтобы вы открывали проблему?
Присоединяйтесь к каналу Gitter и Discord Server, встретитесь с другими пользователями, такими как вы. Чем больше мы, тем лучше для всех.
Не забудьте проверить часто задаваемые вопросы и вики. Ваши ответы уже могут быть там.
Вы хотите поддержать EnTT ? Подумайте о том, чтобы стать спонсором или сделать пожертвование через PayPal .
Большое спасибо этим людям и особое спасибо:


Симстема сущности-компонента (также известная как ECS )-это архитектурный шаблон, используемый в основном в разработке игр. Для получения дополнительной информации:
Этот проект начинался как система чистой сущности. Со временем кодовая база выросла по мере того, как было добавлено все больше и больше классов и функциональных возможностей.
Вот краткий, но неполный список того, что он предлагает сегодня:
constexpr для имен ресурсов, читаемых на человеке. Рассмотрим этот список в процессе работы, а также проект. Весь API полностью задокументирован в коде для тех, кто достаточно смел, чтобы прочитать его.
Пожалуйста, обратите внимание, что все инструменты теперь также являются DLL, и работают плавно по границам.
Одна вещь, известная в большинстве случаев, это то, что EnTT также используется в Minecraft .
Учитывая, что игра доступна буквально повсюду, я могу с уверенностью сказать, что библиотека была достаточно проверена на каждой платформе, которая может прийти на ум.
# include < entt/entt.hpp >
struct position {
float x;
float y;
};
struct velocity {
float dx;
float dy;
};
void update (entt::registry ®istry) {
auto view = registry. view < const position, velocity>();
// use a callback
view. each ([]( const auto &pos, auto &vel) { /* ... */ });
// use an extended callback
view. each ([]( const auto entity, const auto &pos, auto &vel) { /* ... */ });
// use a range-for
for ( auto [entity, pos, vel]: view. each ()) {
// ...
}
// use forward iterators and get only the components of interest
for ( auto entity: view) {
auto &vel = view. get <velocity>(entity);
// ...
}
}
int main () {
entt::registry registry;
for ( auto i = 0u ; i < 10u ; ++i) {
const auto entity = registry. create ();
registry. emplace <position>(entity, i * 1 . f , i * 1 . f );
if (i % 2 == 0 ) { registry. emplace <velocity>(entity, i * . 1f , i * . 1f ); }
}
update (registry);
} Я начал разрабатывать EnTT по неправильной причине: моя цель состояла в том, чтобы разработать систему компонентов сущностей, чтобы победить еще одну известную библиотеку с открытым исходным кодом как с точки зрения производительности, так и, возможно, использования памяти.
В конце концов, я сделал это, но это было не очень приятно. На самом деле это совсем не удовлетворило. Самый быстрый и ничего более, действительно мало. Когда я понял это, я изо всех сил старался сохранять нетронутую работу EnTT и добавить все функции, которые я хотел увидеть в своей собственной библиотеке одновременно.
В настоящее время EnTT - это то, что я искал: все еще быстрее, чем его конкуренты , более низкое использование памяти в среднем случае, действительно хороший API и удивительный набор функций. И даже больше, конечно.
Что бы это ни стоило, вы никогда не увидите, чтобы я пытался сделать другие проекты плохо, или предлагают сомнительные сравнения, чтобы эта библиотека казалась прохладной.
Я оставляю это занятие другим, если им это нравится (и кажется, что некоторым людям это действительно нравится). Я предпочитаю лучше использовать свое время.
Если вы заинтересованы, вы можете скомпилировать тест benchmark в режиме выпуска (для включения оптимизации компилятора, в противном случае это не имеет смысла), установив опцию ENTT_BUILD_BENCHMARK ON CMake , а затем оцените себя, удовлетворены ли вы результатами или нет.
Есть также много проектов, которые используют EnTT в качестве основы для сравнения (это уже многое должно вам сказать). Многие из этих критериев совершенно неверны, многие другие просто неполны, хорошо пропускают некоторую информацию и используют неправильную функцию для сравнения данной функции. Конечно, есть также хорошие, но они стареют быстро, если никто не обновляет их, особенно когда библиотека, с которой они имеют дело, активно развивается.
Из них это кажется самым современным проектом, а также охватывает определенное количество библиотек. Я не могу точно сказать, используется ли EnTT правильно или нет. Однако, даже если он используется плохо, это все равно должно дать читателю представление о том, где он будет работать.
EnTT -это библиотека только для заголовка. Это означает, что включая заголовок entt.hpp достаточно, чтобы включить библиотеку в целом и использовать ее. Для тех, кто заинтересован только в системе компонента сущности, рассмотрите возможность включить единственную entity/registry.hpp Вместо этого заголовок.
Это вопрос добавления следующей строки в верхнюю часть файла:
# include < entt/entt.hpp >Вместо этого используйте строку ниже, чтобы включить только систему компонентов объектов:
# include < entt/entity/registry.hpp > Затем передайте правильный аргумент -I компилятору, чтобы добавить каталог src в Paths.
Чтобы иметь возможность использовать EnTT , пользователи должны предоставить полнофункциональный компилятор, который поддерживает хотя бы C ++ 17.
Приведенные ниже требования обязательны для составления тестов и извлечения документации:
CMake версия 3.7 или более поздней версии.Doxygen версия 1.8 или более поздней версии. В качестве альтернативы, Bazel также поддерживается в качестве системы сборки (кредиты Zaucy, который предложил его поддерживать).
В приведенной ниже документации я все еще буду ссылаться на CMake , это официальная система сборки библиотеки.
Чтобы использовать EnTT из проекта CMake , просто свяжите существующую цель с псевдонимом EnTT::EnTT .
Библиотека предлагает все необходимое для поиска (как в find_package ), внедрении (как в add_subdirectory ), получение (как в FetchContent ) или использование ее во многих способах, о которых вы можете думать, и это связано с CMake .
Заявление всех возможных случаев потребует трактата, а не простого файла Readme, но я уверен, что любой, кто читает этот раздел, также знает, о чем он и может без проблем использовать EnTT из проекта CMake .
При использовании CMake просто включите опцию ENTT_INCLUDE_NATVIS и наслаждайтесь им.
В противном случае большинство инструментов охватываются через NATVIS, и все файлы можно найти в каталоге natvis , разделенных на модуль.
Если вы заметите ошибки или имеете предложения, любой вклад приветствуется!
EnTT доступен для некоторых из самых известных упаковочных инструментов. В частности:
Conan , менеджер пакетов C/C ++ для разработчиков.
vcpkg , Microsoft VC ++ Инструмент упаковки.
Вы можете скачать и установить EnTT всего за несколько простых шагов:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
Или вы можете использовать experimental функцию для проверки последних изменений:
vcpkg install entt[experimental] --head
Порт EnTT в vcpkg обновляется членами команды Microsoft и участниками сообщества.
Если версия установлена на устаре, пожалуйста, создайте проблему или запрос на вытягивание в репозитории vcpkg .
Homebrew , пропавший менеджер пакетов для MacOS.
Доступно в качестве домашней формулы. Просто введите следующее, чтобы установить его:
brew install skypjack/entt/entt
build2 , Build Toolchain для разработки и упаковки C и C ++ кода.
Чтобы использовать пакет entt в проекте build2 , добавьте следующую строку или аналогично файлу manifest :
depends: entt ^3.0.0
Также убедитесь, что конфигурация относится к действительному хранилищу, так что пакет можно найти с помощью build2 :
cppget.org , Центральный репозиторий сообщества с открытым исходным кодом, доступный как https://pkg.cppget.org/1/stable .
Репозиторий источника пакета: доступен как https://github.com/build2-packaging/entt.git или ssh://[email protected]/build2-packaging/entt.git . Не стесняйтесь сообщать о проблемах с этим пакетом.
Оба могут использоваться с bpkg add-repo или добавлены в repositories.manifest проекта. Manifest. Смотрите официальную документацию для более подробной информации.
bzlmod , система управления внешними зависимостями Bazel.
Чтобы использовать модуль entt в проекте bazel , добавьте следующее в свой файл MODULE.bazel :
bazel_dep ( name = "entt" , version = "3.12.2" ) ENTT теперь будет доступен как @entt (короткий для @entt//:entt ), который будет использоваться в вашем cc_* deps .
Считайте этот список в процессе работы и помогите мне сделать его дольше, если хотите.
EnTT также поддерживает pkg-config (по крайней мере, для некоторого определения поддержки ). При запуске CMake генерируется подходящий файл entt.pc и установлен в надлежащем каталоге.
Это также должно упростить использование с такими инструментами, как Meson или аналогичный.
Документация основана на доксигене. Чтобы построить это:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
Ссылка API создается в формате HTML в каталоге build/docs/html . Чтобы перемещаться по нему с вашим любимым браузером:
$ cd build
$ your_favorite_browser docs/html/index.html
Та же версия также доступна онлайн для последнего релиза, который является последним стабильным тегом.
Более того, существует вики, посвященный проекту, где пользователи могут найти все связанные страницы документации.
Чтобы скомпилировать и запустить тесты, EnTT требует Googletest .
cmake загружает и компилирует библиотеку, прежде чем собирать что -либо еще. Чтобы построить тесты, установите опцию CMake ENTT_BUILD_TESTING на ON .
Чтобы создать самый базовый набор тестов:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testОбратите внимание, что тесты не являются частью этого набора.
EnTT широко используется в частных и коммерческих приложениях. Я даже не могу упомянуть большинство из них из -за некоторых подписей, которые я вкладывал в некоторые документы времени назад. К счастью, есть также люди, которые нашли время для реализации проектов с открытым исходным кодом на основе EnTT и не сдерживались, когда дело дошло до их документирования.
Здесь вы можете найти неполный список игр, приложений и статей, которые можно использовать в качестве ссылки.
Если вы знаете о других ресурсах, которые есть о EnTT , не стесняйтесь открывать проблему или PR, и я буду рад добавить их в список.
Запросы на функции, PRS, предложения и обратную связь высоко ценятся.
Если вы обнаружите, что можете помочь и хотите внести свой вклад в проект с вашим опытом, или вы хотите получить часть проекта по какой -то другой причине, не стесняйтесь обращаться ко мне напрямую (вы можете найти почту в профиле).
Я не могу обещать, что каждый вклад будет принят, но я могу заверить, что я сделаю все возможное, чтобы взять их все как можно скорее.
Если вы решите участвовать, пожалуйста, посмотрите руководящие принципы для внесения вклад, прежде чем создавать проблемы или привлечь запросы.
Также взгляните на список участников, чтобы узнать, кто до сих пор участвовал.
Код и документация Copyright (C) 2017-2024 Мишель Каини.
Красочный логотип Copyright (C) 2018-2021 Ричард Казерс.
Код, выпущенный по лицензии MIT.
Документация, выпущенная в соответствии с CC по 4.0.
Все логотипы, выпущенные в соответствии с CC S-SA 4.0.