EnTTa été un rêve jusqu'à présent, nous n'avons pas trouvé un seul bug à ce jour et c'est super facile de travailler avec- chaque utilisateur Entt jamais
EnTT est une bibliothèque en tête uniquement, minuscule et facile à utiliser pour la programmation de jeux et beaucoup plus écrite en C ++ moderne .
Entre autres, il est utilisé dans Minecraft par Mojang, les SDK d'exécution ArcGIS par Esri et The Amazing Ragdoll .
Si vous ne voyez pas votre projet dans la liste, veuillez ouvrir un problème, soumettre un PR ou ajouter la balise #entt à vos sujets ! ?
Voulez-vous suivre les modifications ou avez-vous une question qui ne vous oblige pas à ouvrir un problème?
Rejoignez le canal Gitter et le serveur Discord, rencontrez d'autres utilisateurs comme vous. Plus nous en sommes, mieux pour tout le monde.
N'oubliez pas de vérifier les FAQ et le wiki aussi. Vos réponses sont peut-être déjà là.
Voulez-vous prendre en charge EnTT ? Pensez à devenir un sponsor ou à faire un don via PayPal .
Un grand merci à ces gens et un merci spécial à:


Le système d'entité-composant (également connu sous le nom d' ECS ) est un modèle architectural utilisé principalement dans le développement de jeux. Pour plus de détails:
Ce projet a commencé comme un système d'entité pur. Au fil du temps, la base de code s'est développée à mesure que de plus en plus de classes et de fonctionnalités ont été ajoutées.
Voici une liste brève mais incomplète de ce qu'elle offre aujourd'hui:
constexpr pour les noms de ressources lisibles par l'homme. Considérez cette liste comme un travail en cours ainsi que le projet. L'API entière est entièrement documentée en code pour ceux qui sont assez courageux pour le lire.
Veuillez noter que tous les outils sont également adaptés à la DLL et fonctionnent en douceur sur les limites.
Une chose connue de la plupart est que EnTT est également utilisé dans Minecraft .
Étant donné que le jeu est disponible littéralement partout, je peux dire avec confiance que la bibliothèque a été suffisamment testée sur chaque plate-forme qui peut me venir à l'esprit.
# 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);
} J'ai commencé à développer EnTT pour la mauvaise raison: mon objectif était de concevoir un système entité-composants pour battre une autre bibliothèque open source bien connue à la fois en termes de performances et éventuellement d'utilisation de la mémoire.
En fin de compte, je l'ai fait, mais ce n'était pas très satisfaisant. En fait, ce n'était pas du tout satisfaisant. Le plus rapide et rien de plus, assez peu en effet. Quand je l'ai réalisé, j'ai essayé de garder intact les grandes performances d' EnTT et d'ajouter toutes les fonctionnalités que je voulais voir dans ma propre bibliothèque en même temps.
De nos jours, EnTT est enfin ce que je cherchais: encore plus rapide que ses concurrents , une utilisation de la mémoire inférieure dans le cas moyen, une très bonne API et un ensemble incroyable de fonctionnalités. Et encore plus, bien sûr.
Pour ce que ça vaut, vous ne me verrez jamais essayer de rendre d'autres projets mauvais ou d'offrir des comparaisons douteuses juste pour rendre cette bibliothèque plus cool.
Je laisse cette activité à d'autres, s'ils l'apprécient (et il semble que certaines personnes l'aiment réellement). Je préfère mieux utiliser mon temps.
Si vous êtes intéressé, vous pouvez compiler le test benchmark en mode de libération (pour activer les optimisations du compilateur, sinon cela n'aurait guère de sens) en définissant l'option ENTT_BUILD_BENCHMARK de CMake ON , puis évaluez-vous si vous êtes satisfait des résultats ou non.
Il existe également de nombreux projets qui utilisent EnTT comme base de comparaison (cela devrait déjà vous en dire beaucoup). Beaucoup de ces repères sont complètement faux, beaucoup d'autres sont tout simplement incomplets, bons pour omettre certaines informations et utiliser la mauvaise fonction pour comparer une fonctionnalité donnée. Certes, il y en a aussi de bons, mais ils vieillissent rapidement si personne ne les met à jour, surtout lorsque la bibliothèque avec laquelle ils traitent est activement développée.
Parmi tous, cela semble être le projet le plus à jour et couvre également un certain nombre de bibliothèques. Je ne peux pas dire exactement si EnTT est utilisé correctement ou non. Cependant, même s'il est mal utilisé, cela devrait toujours donner au lecteur une idée de l'endroit où il va fonctionner.
EnTT est une bibliothèque d'en-tête uniquement. Cela signifie que l'inclusion de l'en-tête entt.hpp suffit à inclure la bibliothèque dans son ensemble et à l'utiliser. Pour ceux qui ne sont intéressés que par le système d'entité-composants, envisagez d'inclure à la place l' entity/registry.hpp unique.HPP.
Il s'agit d'ajouter la ligne suivante en haut d'un fichier:
# include < entt/entt.hpp >Utilisez la ligne ci-dessous pour inclure uniquement le système d'entité-composants:
# include < entt/entity/registry.hpp > Ensuite, transmettez l'argument -I approprié au compilateur pour ajouter le répertoire src aux chemins d'inclusion.
Pour pouvoir utiliser EnTT , les utilisateurs doivent fournir un compilateur complet qui prend en charge au moins C ++ 17.
Les exigences ci-dessous sont obligatoires pour compiler les tests et pour extraire la documentation:
CMake Version 3.7 ou version ultérieure.Doxygen Version 1.8 ou version ultérieure. Alternativement, Bazel est également pris en charge comme un système de construction (crédits à Zaucy qui a proposé de le maintenir).
Dans la documentation ci-dessous, je ferai toujours référence à CMake , ce qui est le système de construction officiel de la bibliothèque.
Pour utiliser EnTT à partir d'un projet CMake , liez simplement une cible existante à l'alias EnTT::EnTT .
La bibliothèque offre tout ce dont vous avez besoin pour localiser (comme dans find_package ), intégrer (comme dans add_subdirectory ), récupérer (comme dans FetchContent ) ou l'utiliser de nombreuses façons dont vous pouvez penser et qui impliquent CMake .
Couvrir tous les cas possibles nécessiterait un traité et non un simple fichier ReadMe, mais je suis convaincu que quiconque lisant cette section sait également de quoi il s'agit et peut utiliser EnTT à partir d'un projet CMake sans problème.
Lorsque vous utilisez CMake , activez simplement l'option ENTT_INCLUDE_NATVIS et profitez-en.
Sinon, la plupart des outils sont couverts via NATVIS et tous les fichiers peuvent être trouvés dans le répertoire natvis , divisé par module.
Si vous repérez des erreurs ou avez des suggestions, toute contribution est la bienvenue!
EnTT est disponible pour certains des outils d'emballage les plus connus. En particulier:
Conan , le gestionnaire de packages C / C ++ pour les développeurs.
vcpkg , outil d'emballage Microsoft VC ++.
Vous pouvez télécharger et installer EnTT en quelques étapes simples:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
Ou vous pouvez utiliser la fonctionnalité experimental pour tester les derniers modifications:
vcpkg install entt[experimental] --head
Le port EnTT de vcpkg est tenu à jour par les membres de l'équipe Microsoft et les contributeurs communautaires.
Si la version est obsolète, veuillez créer une demande de problème ou d'extraction sur le référentiel vcpkg .
Homebrew , le gestionnaire de package manquant pour macOS.
Disponible en tant que formule homebrew. Tapez simplement ce qui suit pour l'installer:
brew install skypjack/entt/entt
build2 , Build Toolchain pour développer et emballer le code C et C ++.
Afin d'utiliser le package entt dans un projet build2 , ajoutez la ligne suivante ou similaire au fichier manifest :
depends: entt ^3.0.0
Vérifiez également que la configuration fait référence à un référentiel valide, afin que le package puisse être trouvé par build2 :
cppget.org , le référentiel central de la communauté open-source, accessible en tant que https://pkg.cppget.org/1/stable .
Package Source Repository: accessible comme https://github.com/build2-packaging/entt.git ou ssh://[email protected]/build2-packaging/entt.git . N'hésitez pas à signaler les problèmes avec ce package.
Les deux peuvent être utilisés avec bpkg add-repo ou ajoutés dans un projet repositories.manifest . Voir la documentation officielle pour plus de détails.
bzlmod , Système de gestion externe de la dépendance de Bazel.
Pour utiliser le module entt dans un projet bazel , ajoutez ce qui suit à votre MODULE.bazel Fichier:
bazel_dep ( name = "entt" , version = "3.12.2" ) ENTT sera désormais disponible en tant que @entt (abréviation pour @entt//:entt ) à utiliser dans votre règle cc_* deps .
Considérez cette liste comme un travail en cours et aidez-moi à plus longtemps si vous le souhaitez.
EnTT prend également en charge pkg-config (pour une certaine définition des supports au moins). Un fichier approprié appelé entt.pc est généré et installé dans un répertoire approprié lors de l'exécution CMake .
Cela devrait également faciliter l'utilisation avec des outils tels que Meson ou similaires.
La documentation est basée sur le doxygen. Pour le construire:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
La référence de l'API est créée au format HTML dans le répertoire build/docs/html . Pour naviguer avec votre navigateur préféré:
$ cd build
$ your_favorite_browser docs/html/index.html
La même version est également disponible en ligne pour la dernière version, c'est-à-dire la dernière étiquette stable.
De plus, il existe un wiki dédié au projet où les utilisateurs peuvent trouver toutes les pages de documentation connexes.
Pour compiler et exécuter les tests, EnTT nécessite GoogleTest .
cmake télécharge et compile la bibliothèque avant de compiler autre chose. Afin de créer les tests, définissez l'option CMake ENTT_BUILD_TESTING sur ON .
Pour construire l'ensemble de tests le plus élémentaire:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testNotez que les repères ne font pas partie de cet ensemble.
EnTT est largement utilisé dans les applications privées et commerciales. Je ne peux même pas mentionner la plupart d'entre eux à cause de certaines signatures que je mets sur des documents il y a du temps. Heureusement, il y a aussi des gens qui ont pris le temps de mettre en œuvre des projets open source basés sur EnTT et ne se sont pas retenus en ce qui concerne les documenter.
Ici, vous pouvez trouver une liste incomplète de jeux, applications et articles qui peuvent être utilisés comme référence.
Si vous connaissez d'autres ressources qui concernent EnTT , n'hésitez pas à ouvrir un problème ou un RP et je serai heureux de les ajouter à la liste.
Les demandes de fonctionnalités, de PRS, de suggestions et de commentaires sont très appréciées.
Si vous trouvez que vous pouvez vous aider et vous souhaitez contribuer au projet avec votre expérience ou si vous souhaitez faire partie du projet pour une autre raison, n'hésitez pas à me contacter directement (vous pouvez trouver le courrier dans le profil).
Je ne peux pas promettre que chaque contribution sera acceptée, mais je peux m'assurer que je ferai de mon mieux pour les prendre tous dès que possible.
Si vous décidez de participer, veuillez consulter les directives pour contribuer avant de créer des problèmes ou de tirer les demandes.
Jetez également un œil à la liste des contributeurs pour savoir qui a participé jusqu'à présent.
Code et documentation Copyright (C) 2017-2024 Michele Caini.
Copyright du logo coloré (C) 2018-2021 Richard Caseres.
Code publié sous la licence MIT.
Documentation publiée sous CC par 4.0.
Tous les logos publiés sous CC BY-SA 4.0.