EnTTha sido un sueño hasta ahora, no hemos encontrado un solo error hasta la fecha y es muy fácil trabajar con- Cada usuario de Entt
EnTT es una biblioteca solo para la programación de juegos y mucho más escrita en C ++ moderno .
Entre otros, es utilizado en Minecraft por Mojang, los SDK de tiempo de ejecución de ArcGIS de ESRI y el increíble Ragdoll .
Si no ve su proyecto en la lista, abra un problema, envíe un PR o agregue la etiqueta #Entt a sus temas . ?
¿Quiere mantenerse al día con los cambios o tiene una pregunta que no requiere que abra un problema?
Únase al canal Gitter y al servidor Discord, conozca a otros usuarios como usted. Cuanto más somos, mejor para todos.
No olvides verificar las preguntas frecuentes y el wiki también. Es posible que sus respuestas ya estén ahí.
¿Quieres apoyar EnTT ? Considere convertirse en patrocinador o hacer una donación a través de PayPal .
Muchas gracias a estas personas y un agradecimiento especial a:


El sistema de la entidad-componente (también conocido como ECS ) es un patrón arquitectónico utilizado principalmente en el desarrollo de juegos. Para más detalles:
Este proyecto comenzó como un sistema de componente de entidad pura. Con el tiempo, la base de código ha crecido a medida que se agregaron más y más clases y funcionalidades.
Aquí hay una lista breve pero incompleta de lo que ofrece hoy:
constexpr para nombres de recursos legibles por humanos. Considere esta lista como un trabajo en progreso y el proyecto. Toda la API está completamente documentada en el código para aquellos que son lo suficientemente valientes como para leerla.
Por favor, tenga en cuenta que todas las herramientas también son amigables con DLL ahora y funcionan sin problemas a través de los límites.
Una cosa que más se sabe que EnTT también se usa en Minecraft .
Dado que el juego está disponible literalmente en todas partes, puedo decir con confianza que la biblioteca ha sido probada suficientemente en todas las plataformas que pueden venir a la mente.
# 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);
} Comencé a desarrollar EnTT por la razón equivocada : mi objetivo era diseñar un sistema de componentes de entidad para vencer a otra biblioteca de código abierto bien conocida tanto en términos de rendimiento como posiblemente de uso de la memoria.
Al final, lo hice, pero no fue muy satisfactorio. En realidad no fue satisfactorio en absoluto. Lo más rápido y nada más, bastante pequeño. Cuando me di cuenta, intenté mantener intacto el gran rendimiento de EnTT y agregar todas las características que quería ver en mi propia biblioteca al mismo tiempo.
Hoy en día, EnTT es finalmente lo que estaba buscando: aún más rápido que sus competidores , el uso de memoria inferior en el caso promedio, una API realmente buena y un increíble conjunto de características. Y aún más, por supuesto.
Por lo que vale, nunca me verás tratando de hacer que otros proyectos se vean mal u ofrecer comparaciones dudosas solo para que esta biblioteca parezca más genial.
Dejo esta actividad a los demás, si la disfrutan (y parece que a algunas personas realmente les gusta). Prefiero hacer un mejor uso de mi tiempo.
Si está interesado, puede compilar la prueba benchmark en el modo de lanzamiento (para habilitar las optimizaciones del compilador, de lo contrario tendría poco sentido) estableciendo la opción ENTT_BUILD_BENCHMARK de CMake , luego ON si está satisfecho con los resultados o no.
También hay muchos proyectos que usan EnTT como base para la comparación (esto ya debería decirle mucho). Muchos de estos puntos de referencia están completamente incorrectos, muchos otros son simplemente incompletos, buenos para omitir alguna información y usar la función incorrecta para comparar una característica dada. Ciertamente también hay buenos, pero envejecen rápidamente si nadie los actualiza, especialmente cuando la biblioteca con la que están tratando se desarrolla activamente.
De todos ellos, este parece ser el proyecto más actualizado y también cubre un cierto número de bibliotecas. No puedo decir exactamente si EnTT se usa correctamente o no. Sin embargo, incluso si se usa mal, aún debería darle al lector una idea de dónde va a operar.
EnTT es una biblioteca solo de encabezado. Esto significa que incluir el encabezado entt.hpp es suficiente para incluir la biblioteca en su conjunto y usarla. Para aquellos que están interesados solo en el sistema de componentes de entidad, considere incluir el encabezado único entity/registry.hpp .
Se trata de agregar la siguiente línea a la parte superior de un archivo:
# include < entt/entt.hpp >Use la línea a continuación para incluir solo el sistema de componentes Entity: en su lugar:
# include < entt/entity/registry.hpp > Luego, pase el argumento -I adecuado al compilador para agregar el directorio src a las rutas de inclusión.
Para poder usar EnTT , los usuarios deben proporcionar un compilador con todas las funciones que admita al menos C ++ 17.
Los requisitos a continuación son obligatorios para compilar las pruebas y extraer la documentación:
CMake versión 3.7 o posterior.Doxygen versión 1.8 o posterior. Alternativamente, Bazel también es compatible como un sistema de compilación (créditos para Zaucy que se ofreció a mantenerlo).
En la documentación a continuación, todavía me referiré a CMake , siendo este el sistema de compilación oficial de la biblioteca.
Para usar EnTT de un proyecto CMake , simplemente vincule un objetivo existente con el alias EnTT::EnTT .
La biblioteca ofrece todo lo que necesita para ubicar (como en find_package ), incrustar (como en add_subdirectory ), obtener (como en FetchContent ) o usarlo en muchas de las formas en que se puede pensar y que involucra CMake .
Cubrir todos los casos posibles requeriría un tratado y no un archivo de lectura simple, pero estoy seguro de que cualquiera que lea esta sección también sabe de qué se trata y puede usar EnTT de un proyecto CMake sin problemas.
Al usar CMake , simplemente habilite la opción ENTT_INCLUDE_NATVIS y disfrútelo.
De lo contrario, la mayoría de las herramientas se cubren a través de NATVIS y todos los archivos se pueden encontrar en el directorio natvis , dividido por el módulo.
Si ve errores o tiene sugerencias, ¡cualquier contribución es bienvenida!
EnTT está disponible para algunas de las herramientas de embalaje más conocidas. En particular:
Conan , el administrador de paquetes C/C ++ para desarrolladores.
vcpkg , Herramienta de embalaje de Microsoft VC ++.
Puede descargar e instalar EnTT en solo unos pocos pasos simples:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
O puede usar la función experimental para probar los últimos cambios:
vcpkg install entt[experimental] --head
El puerto EnTT en vcpkg se mantiene actualizado por los miembros del equipo de Microsoft y los contribuyentes comunitarios.
Si la versión está desactualizada, cree un problema o extraiga la solicitud en el repositorio vcpkg .
Homebrew , el administrador de paquetes que falta para MacOS.
Disponible como una fórmula casera. Simplemente escriba lo siguiente para instalarlo:
brew install skypjack/entt/entt
build2 , Build Toolchain para desarrollar y empacar el código C y C ++.
Para usar el paquete entt en un proyecto build2 , agregue la siguiente línea o una similar al archivo manifest :
depends: entt ^3.0.0
También verifique que la configuración se refiera a un repositorio válido, para que el paquete se pueda encontrar mediante build2 :
cppget.org , el repositorio central de la comunidad de código abierto, accesible como https://pkg.cppget.org/1/stable .
Repositorio de fuente del paquete: accesible como https://github.com/build2-packaging/entt.git o ssh://[email protected]/build2-packaging/entt.git . No dude en informar problemas con este paquete.
Ambos se pueden usar con bpkg add-repo o agregar en un proyecto repositories.manifest . Vea la documentación oficial para obtener más detalles.
bzlmod , sistema de gestión de dependencia externa de Bazel.
Para usar el módulo entt en un proyecto bazel , agregue lo siguiente a su MODULE.bazel Archivo Bazel:
bazel_dep ( name = "entt" , version = "3.12.2" ) Entt ahora estará disponible como @entt (abreviatura de @entt//:entt ) para ser utilizado en sus deps de reglas cc_* .
Considere esta lista como un trabajo en progreso y ayúdame a hacerlo más tiempo si lo desea.
EnTT también admite pkg-config (para alguna definición de soportes al menos). Un archivo adecuado llamado entt.pc se genera e instala en un directorio adecuado al ejecutar CMake .
Esto también debería facilitar el uso de herramientas como Meson o similar.
La documentación se basa en Doxygen. Para construirlo:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
La referencia de API se crea en formato HTML en el directorio build/docs/html . Para navegarlo con tu navegador favorito:
$ cd build
$ your_favorite_browser docs/html/index.html
La misma versión también está disponible en línea para el último lanzamiento, que es la última etiqueta estable.
Además, existe una wiki dedicada al proyecto donde los usuarios pueden encontrar todas las páginas de documentación relacionadas.
Para compilar y ejecutar las pruebas, EnTT requiere Googletest .
cmake descarga y compila la biblioteca antes de compilar cualquier otra cosa. Para construir las pruebas, establezca la opción CMake ENTT_BUILD_TESTING ON .
Para construir el conjunto más básico de pruebas:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testTenga en cuenta que los puntos de referencia no son parte de este conjunto.
EnTT se usa ampliamente en aplicaciones privadas y comerciales. Ni siquiera puedo mencionar la mayoría de ellas debido a algunas firmas que puse en algunos documentos hace tiempo. Afortunadamente, también hay personas que se tomaron el tiempo de implementar proyectos de código abierto basados en EnTT y no se detuvieron cuando se trataba de documentarlos.
Aquí puede encontrar una lista incompleta de juegos, aplicaciones y artículos que puedan usarse como referencia.
Si conoce otros recursos que se tratan de EnTT , no dude en abrir un problema o un PR y me alegrará agregarlos a la lista.
Las solicitudes de características, PRS, sugerencias y comentarios son muy apreciadas.
Si encuentra que puede ayudar y desea contribuir al proyecto con su experiencia o desea obtener parte del proyecto por alguna otra razón, no dude en contactarme directamente (puede encontrar el correo en el perfil).
No puedo prometer que se acepten todas y cada una de las contribuciones, pero puedo asegurar que haré todo lo posible para llevarlos todos lo antes posible.
Si decide participar, consulte las pautas para contribuir antes para crear problemas o extraer solicitudes.
También eche un vistazo a la lista de contribuyentes para saber quién ha participado hasta ahora.
Código y documentación Copyright (c) 2017-2024 Michele Caini.
Copyright de logotipo colorido (c) 2018-2021 Richard Caseres.
Código publicado bajo la licencia MIT.
Documentación publicada bajo CC por 4.0.
Todos los logotipos lanzados en CC BY-SA 4.0.