EnTTwar bisher ein Traum, wir haben bisher keinen einzigen Fehler gefunden und es ist super einfach zu arbeiten- Jeder Entt-Benutzer jemals
EnTT ist nur Header, winzig und einfach zu verwendender Bibliothek für Spielprogramme und viel mehr in modernen C ++ .
Unter anderem wird es in Minecraft von Mojang, den Arcgis Runtime SDKs von Esri und dem erstaunlichen Ragdoll verwendet.
Wenn Sie Ihr Projekt nicht in der Liste sehen, öffnen Sie bitte ein Problem, senden Sie eine PR oder fügen Sie das #entt -Tag zu Ihren Themen hinzu! ?
Möchten Sie mit Änderungen Schritt halten oder haben Sie eine Frage , bei der Sie kein Problem eröffnen müssen?
Treten Sie dem Gitter -Kanal und dem Discord -Server bei, treffen Sie andere Benutzer wie Sie. Je mehr wir sind, desto besser für alle.
Vergessen Sie nicht, auch die FAQs und das Wiki zu überprüfen. Ihre Antworten sind möglicherweise bereits da.
Möchten Sie EnTT unterstützen? Erwägen Sie, Sponsor zu werden oder eine Spende über PayPal zu machen.
Vielen Dank an diese Leute und besonderer Dank an:


Das Entitätskomponentensystem (auch als ECS bekannt) ist ein architektonisches Muster, das hauptsächlich in der Spielentwicklung verwendet wird. Für weitere Details:
Dieses Projekt begann als reines Unternehmenskomponentensystem. Im Laufe der Zeit ist die Codebasis gewachsen, da immer mehr Klassen und Funktionen hinzugefügt wurden.
Hier ist eine kurze, aber unvollständige Liste dessen, was es heute anbietet:
constexpr Dienstprogramm für menschlich-lesbare Ressourcennamen . Betrachten Sie diese Liste sowohl in Arbeit als auch das Projekt. Die gesamte API ist in Code vollständig dokumentiert für diejenigen, die mutig genug sind, sie zu lesen.
Bitte beachten Sie, dass alle Tools jetzt auch dll-freundlich sind und reibungslos über Grenzen hinweg laufen.
Eine Sache, die am meisten bekannt ist, ist, dass EnTT auch in Minecraft verwendet wird.
Angesichts der Tatsache, dass das Spiel buchstäblich überall verfügbar ist, kann ich zuversichtlich sagen, dass die Bibliothek auf jeder Plattform ausreichend getestet wurde, die mir in den Sinn kommt.
# 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);
} Ich habe aus dem falschen Grund angefangen, EnTT zu entwickeln: Mein Ziel war es, ein Unternehmenskomponentensystem zu entwerfen, um eine weitere bekannte Open-Source-Bibliothek sowohl in Bezug auf Leistung als auch möglicherweise in Bezug auf Speicherverbrauch zu schlagen.
Am Ende habe ich es getan, aber es war nicht sehr befriedigend. Eigentlich war es überhaupt nicht befriedigend. Am schnellsten und nichts mehr, ziemlich wenig. Als ich es merkte, bemühte ich mich, die großartige Leistung von EnTT intakt zu halten und alle Funktionen hinzuzufügen, die ich gleichzeitig in meiner eigenen Bibliothek sehen wollte.
Heutzutage ist EnTT endlich das, wonach ich gesucht habe: immer noch schneller als seine Konkurrenten , niedrigere Speicherverbrauch in dem durchschnittlichen Fall, eine wirklich gute API und eine erstaunliche Reihe von Funktionen. Und natürlich noch mehr.
Für das, was es wert ist, werden Sie nie sehen, dass ich versuche, andere Projekte schlecht aussehen zu lassen oder zweifelhafte Vergleiche anzubieten, nur um diese Bibliothek cooler erscheinen zu lassen.
Ich überlasse diese Aktivität anderen, wenn sie sie genießen (und es scheint, dass manche Leute es tatsächlich mögen). Ich nutze lieber meine Zeit besser.
Wenn Sie interessiert sind, können Sie den benchmark -Test im Freigabemodus (um Compiler -Optimierungen zu aktivieren, ansonsten wäre dies nur dann sinnvoll), indem ON die Option ENTT_BUILD_BENCHMARK für CMake einstellen, und bewerten Sie sich dann, ob Sie mit den Ergebnissen zufrieden sind oder nicht.
Es gibt auch viele Projekte, die EnTT als Vergleichsgrundlage verwendet werden (dies sollte Ihnen bereits viel sagen). Viele dieser Benchmarks sind völlig falsch, viele andere sind einfach unvollständig, gut darin, einige Informationen wegzulassen und die falsche Funktion zu verwenden, um eine bestimmte Funktion zu vergleichen. Sicher gibt es auch gute, aber sie altern schnell, wenn niemand sie aktualisiert, insbesondere wenn die Bibliothek, mit der sie zu tun haben, aktiv entwickelt wird.
Von allen scheint dies das aktuellste Projekt zu sein und deckt auch eine bestimmte Anzahl von Bibliotheken ab. Ich kann nicht genau sagen, ob EnTT richtig verwendet wird oder nicht. Selbst wenn es schlecht verwendet wird, sollte es dem Leser eine Vorstellung davon geben, wo es funktionieren wird.
EnTT ist eine Nur-Header-Bibliothek. Dies bedeutet, dass die Einbeziehung des entt.hpp -Headers ausreicht, um die gesamte Bibliothek einzubeziehen und zu verwenden. Für diejenigen, die nur am Entitätskomponentensystem interessiert sind, sollten Sie stattdessen die einzige entity/registry.hpp -Header einbeziehen.
Es geht darum, die folgende Zeile an die Spitze einer Datei hinzuzufügen:
# include < entt/entt.hpp >Verwenden Sie die folgende Zeile, um stattdessen nur das Entitätskomponentensystem einzuschließen:
# include < entt/entity/registry.hpp > Geben Sie dann das -I Argument an den Compiler weiter, um das src -Verzeichnis zu den Include -Pfaden hinzuzufügen.
Um EnTT zu verwenden, müssen Benutzer einen Compiler mit vollem Funktionsumfang bereitstellen, der mindestens C ++ 17 unterstützt.
Die folgenden Anforderungen sind obligatorisch, um die Tests zu erstellen und die Dokumentation zu extrahieren:
CMake Version 3.7 oder höher.Doxygen Version 1.8 oder höher. Alternativ wird Bazel auch als Build -System unterstützt (Credits an Zaucy, der angeboten hat, es zu warten).
In der folgenden Dokumentation werde ich immer noch auf CMake verweisen, dies ist das offizielle Build -System der Bibliothek.
Um EnTT aus einem CMake -Projekt zu verwenden, verknüpfen Sie einfach ein vorhandenes Ziel mit dem EnTT::EnTT alias.
Die Bibliothek bietet alles, was Sie für das Lokalisieren benötigen (wie in find_package ), einbetten (wie in add_subdirectory ), abrufen (wie in FetchContent ) oder in vielen Möglichkeiten, wie Sie sich vorstellen können und CMake beinhalten.
Wenn Sie alle möglichen Fälle abdecken, würde eine Abhandlung und keine einfache Readme -Datei erforderlich sein, aber ich bin zuversichtlich, dass jeder, der diesen Abschnitt liest, auch weiß, worum es in einem CMake EnTT verwendet wird.
Aktivieren Sie bei Verwendung von CMake einfach die Option ENTT_INCLUDE_NATVIS und genießen Sie sie.
Andernfalls werden die meisten Tools über NATVIS abgedeckt und alle Dateien finden Sie im natvis -Verzeichnis, geteilt durch das Modul.
Wenn Sie Fehler erkennen oder Vorschläge haben, ist ein Beitrag willkommen!
EnTT ist für einige der bekanntesten Verpackungswerkzeuge erhältlich. Insbesondere:
Conan , der C/C ++ -Paketmanager für Entwickler.
vcpkg , Microsoft VC ++ Packaging Tool.
Sie können EnTT in nur wenigen einfachen Schritten herunterladen und installieren:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
Oder Sie können die experimental Funktion verwenden, um die neuesten Änderungen zu testen:
vcpkg install entt[experimental] --head
Der EnTT -Port in vcpkg wird von Microsoft -Teammitgliedern und Community -Mitwirkenden auf dem Laufenden gehalten.
Wenn die Version veraltet ist, erstellen Sie bitte eine Ausgabe- oder Pull -Anfrage im vcpkg -Repository.
Homebrew , der vermisste Paketmanager für macOS.
Erhältlich als Homebrew -Formel. Geben Sie einfach Folgendes ein, um es zu installieren:
brew install skypjack/entt/entt
build2 , Build Toolchain für die Entwicklung und Verpackung von C- und C ++ - Code.
Um das entt -Paket in einem build2 -Projekt zu verwenden, fügen Sie der manifest -Datei die folgende oder ähnliche Zeile hinzu:
depends: entt ^3.0.0
Überprüfen Sie auch, ob sich die Konfiguration auf ein gültiges Repository bezieht, damit das Paket durch build2 gefunden werden kann:
cppget.org , das Open-Source Community Central Repository, zugänglich als https://pkg.cppget.org/1/stable .
Paket-Quell-Repository: Zugriff entweder https://github.com/build2-packaging/entt.git oder ssh://[email protected]/build2-packaging/entt.git . Fühlen Sie sich frei, Probleme mit diesem Paket zu melden.
Beide können mit bpkg add-repo verwendet oder in einem Projekt repositories.manifest hinzugefügt werden. Weitere Informationen finden Sie in der offiziellen Dokumentation.
bzlmod , Bazels externes Abhängigkeitsmanagementsystem.
Um das entt -Modul in einem bazel -Projekt zu verwenden, fügen Sie Ihr MODULE.bazel -Datei Folgendes hinzu:
bazel_dep ( name = "entt" , version = "3.12.2" ) Entt ist jetzt als @entt (kurz für @entt//:entt ) verfügbar, um in Ihren cc_* -Regel deps zu verwenden.
Betrachten Sie diese Liste in Arbeit und helfen Sie mir, es länger zu machen, wenn Sie möchten.
EnTT unterstützt auch pkg-config (zumindest für einige Definitionen von Unterstützung ). Eine geeignete Datei namens entt.pc wird in einem ordnungsgemäßen Verzeichnis generiert und installiert, wenn CMake ausgeführt wird.
Dies sollte auch die Verwendung mit Tools wie Meson oder ähnlichem die Verwendung erleichtern.
Die Dokumentation basiert auf Doxygen. Um es zu bauen:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
Die API -Referenz wird im HTML -Format im Verzeichnis build/docs/html erstellt. Um es mit Ihrem Lieblingsbrowser zu navigieren:
$ cd build
$ your_favorite_browser docs/html/index.html
Die gleiche Version ist auch online für die neueste Version erhältlich, die das letzte stabile Tag ist.
Darüber hinaus gibt es ein Wiki, das dem Projekt gewidmet ist, in dem Benutzer alle zugehörigen Dokumentationsseiten finden können.
Um die Tests zu kompilieren und auszuführen, benötigt EnTT googletest .
cmake lädt die Bibliothek herunter und erstellt, bevor Sie etwas anderes zusammenstellen. Um die Tests zu erstellen, setzen Sie die CMake -Option ENTT_BUILD_TESTING auf ON .
Um die grundlegendsten Tests zu erstellen:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testBeachten Sie, dass Benchmarks nicht Teil dieses Satzes sind.
EnTT wird in privaten und kommerziellen Anwendungen häufig verwendet. Ich kann die meisten von ihnen nicht einmal erwähnen, weil ich einige Unterschriften vor der Zeit aufgebraucht habe. Glücklicherweise gibt es auch Leute, die sich die Zeit genommen haben, Open -Source -Projekte basierend auf EnTT umzusetzen, und sich nicht zurückhalten, wenn es darum ging, sie zu dokumentieren.
Hier finden Sie eine unvollständige Liste von Spielen, Anwendungen und Artikeln, die als Referenz verwendet werden können.
Wenn Sie andere Ressourcen kennen, die sich um EnTT handeln, können Sie ein Problem oder eine PR eröffnen, und ich werde sie gerne zur Liste hinzufügen.
Anfragen nach Funktionen, PRs, Vorschlägen und Feedback werden sehr geschätzt.
Wenn Sie feststellen, dass Sie mit Ihrer Erfahrung helfen können und zum Projekt beitragen möchten oder aus einem anderen Grund einen Teil des Projekts erhalten möchten, können Sie mich direkt kontaktieren (Sie können die E -Mail im Profil finden).
Ich kann nicht versprechen, dass jeder Beitrag akzeptiert wird, aber ich kann versichern, dass ich mein Bestes tun werde, um sie alle so schnell wie möglich zu nehmen.
Wenn Sie sich für die Teilnahme entscheiden, finden Sie in den Richtlinien für den Beitrag zu Problemen, um Probleme zu erstellen oder Anfragen zu ziehen.
Schauen Sie sich auch die Liste der Mitwirkenden an, um zu wissen, wer bisher teilgenommen hat.
Code und Dokumentation Copyright (C) 2017-2024 Michele Caini.
Buntes Logo Copyright (C) 2018-2021 Richard Caseres.
Code, der unter der MIT -Lizenz veröffentlicht wurde.
Dokumentation, die unter CC von 4.0 veröffentlicht wurde.
Alle Logos, die unter CC BY-SA 4.0 veröffentlicht wurden.